How about allowing 8 bytes of extra space for any user-specific additional data? For example, I can see that some implementations of this protocol will need to pass some extra parameters to the server. Of course, in that case the server side protocol handler should have a hook to react to these extra parameters.
Makes sense? D. On Tue, Aug 1, 2017 at 7:17 PM, Pavel Tupitsyn <ptupit...@apache.org> wrote: > Yes, in my understanding, we should provide backwards compatibility via > versioning. > > During handshake we pick RequestParser and RequestHandler (this is already > implemented, see SqlListenerNioListener.prepareContext). > Each protocol version would have separate implementations of these > interfaces. > > New version of the protocol does not affect existing versions. > > On Tue, Aug 1, 2017 at 8:09 PM, <dsetrak...@apache.org> wrote: > > > 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 > > >> >> > > >> > > >