Dima,

There is no need for these extra bytes. Protocol version would be enough.
Extensibility points wil be designed separately. We already have experience
with it in scope of .NET/CPP platforms, it is solved by special command
types where user can hook his own code.

On Wed, Aug 2, 2017 at 3:56 AM, Dmitriy Setrakyan <dsetrak...@apache.org>
wrote:

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

Reply via email to