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 > >> >