Backward compatible? D.
On Aug 1, 2017, 7:04 PM, at 7:04 PM, Pavel Tupitsyn <ptupit...@apache.org> wrote: >Dmitry, we don't need any reserved bytes, because protocol is >versioned. > >On Tue, Aug 1, 2017 at 7:49 PM, <dsetrak...@apache.org> wrote: > >> We should also leave 8 bytes of empty space for future changes. >> >> D. >> >> On Aug 1, 2017, 6:41 PM, at 6:41 PM, Pavel Tupitsyn ><ptupit...@apache.org> >> wrote: >> >Alexey, good idea. ODBC and JDBC could also benefit from this. >> > >> >On Tue, Aug 1, 2017 at 7:27 PM, Alexey Kuznetsov >> ><akuznet...@apache.org> >> >wrote: >> > >> >> Pavel, >> >> >> >> How about data compression? >> >> May be it make sense to add a byte with compression algorithm? >> >> 0 - none >> >> 1 - ZIP >> >> 2 - .... >> >> .... >> >> >> >> On Tue, Aug 1, 2017 at 11:10 PM, Pavel Tupitsyn >> ><ptupit...@apache.org> >> >> wrote: >> >> >> >> > Igniters, >> >> > >> >> > Below is a proposed design for thin client protocol [1] [2] >socket >> >data >> >> > exchange format. >> >> > >> >> > * Values are little-endian >> >> > * Every request and response message starts with 4-byte length >> >(including >> >> > handshake) >> >> > * Ignite binary format is used for value serialization (via >> >> > GridBinaryMarshaller/BinaryWriter/BinaryReader). Ignite binary >> >protocol >> >> > has >> >> > to be implemented by clients anyway to work with cache values, >so >> >it >> >> makes >> >> > sense to use for all data exchange. >> >> > >> >> > >> >> > 1) Socket connection is established on a port according >> >> > to ConnectorConfiguration.port >> >> > >> >> > 2) Handshake is performed. >> >> > Request: >> >> > int32 length = 8 // message length >> >> > byte opCode = 1 // handshake command >> >> > int16 verMajor >> >> > int16 verMinor >> >> > int16 verMaintenance >> >> > byte clientCode = 2 // client type code (odbc, jdbc, >> >platform) >> >> > >> >> > Response: >> >> > uint32 length = 1 >> >> > byte success >> >> > >> >> > 3) Execute command. Request starts with a command code, then >goes >> >> > command-specific data. >> >> > For example, IgniteCache<Integer, String>.put(1, "foo") will >look >> >like >> >> > this: >> >> > Request: >> >> > int16 opCode // OP_CACHE_GET >> >> > int32 cacheId // GridCacheUtils.cacheId >> >> > byte flags // skipStore, noRetry, etc >> >> > binobject key >> >> > >> >> > Response: >> >> > byte success >> >> > binobject value >> >> > >> >> > Where binobject corresponds to Ignite BinaryMarshaller format, >> >which is >> >> > produced by BinaryWriter.writeObject method. Integer will be >> >represented >> >> as >> >> > byte typeCode = 3 // GridBinaryMarshaller.INT >> >> > int32 value = 1 >> >> > >> >> > 4) Goto (3) >> >> > >> >> > >> >> > Comments are welcome. >> >> > >> >> > Pavel >> >> > >> >> > [1] >> >> > http://apache-ignite-developers.2346864.n4.nabble. >> >> com/Support-for-Ignite- >> >> > clients-in-any-language-thin-client-protocol-td20297.html >> >> > [2] https://issues.apache.org/jira/browse/IGNITE-5896 >> >> > >> >> >> >> >> >> >> >> -- >> >> Alexey Kuznetsov >> >> >>