Hi Pavel,

Thank you for the review!

Igniters,

Also, I want to bring here a discussion about configuring limit for active
transactions per thin client connection.

I see two ways to configure such limit:
1. A new system property
2. A new ClientConnectorConfiguration class property.

In the current implementation, I've introduced a new system
property IGNITE_THIN_MAX_ACTIVE_TX_PER_CONNECTION. Pavel proposes to
configure limit via ClientConnectorConfiguration.

Such limit is only reliable to thin clients, but
ClientConnectorConfiguration is also used for JDBC and ODBC connections as
well. A new property in ClientConnectorConfiguration will be useless for
JDBC and ODBC (since they use one transaction per connection) and may be
confusing.

Which way is better, WDYT?



чт, 15 авг. 2019 г. в 11:46, Pavel Tupitsyn <ptupit...@apache.org>:

> Hi Alex,
>
> I've checked the patch, protocol changes look good to me. See reply in
> Jira.
> But we certainly need more eyes on this.
>
> On Thu, Aug 15, 2019 at 10:36 AM Alex Plehanov <plehanov.a...@gmail.com>
> wrote:
>
> > Hi Ivan,
> >
> > Java thin client doesn't support affinity awareness yet (ticket [1] is in
> > progress now), but changes to correctly work with protocol version 1.4.0
> > was made, so java thin client will work properly with 1.4.0 and 1.5.0
> > protocol versions.
> >
> > [1]: https://issues.apache.org/jira/browse/IGNITE-11898
> >
> > чт, 15 авг. 2019 г. в 10:23, Павлухин Иван <vololo...@gmail.com>:
> >
> > > Hi Alex,
> > >
> > > Could you please elaborate about thin client protocol versioning. As I
> > > see 1.5.0 is supposed to be a version supporting transactions. And we
> > > already have a version 1.4.0 with affinity awareness support. I
> > > forgot, does Java thin client support affinity awareness? Will it work
> > > properly if it does not?
> > >
> > > ср, 14 авг. 2019 г. в 13:59, Alex Plehanov <plehanov.a...@gmail.com>:
> > > >
> > > > Hi Igniters,
> > > >
> > > > Finally, all dependent tickets are resolved and I've completed the
> > > > implementation of thin client transactions support. The patch [1]
> > > includes
> > > > server-side implementation and java thin client-side implementation.
> > > > Changes to thin client protocol and top-level view of implementation
> > also
> > > > described in IEP [2].
> > > > Can anyone review the patch?
> > > >
> > > > [1]: https://issues.apache.org/jira/browse/IGNITE-9410
> > > > [2]:
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/IGNITE/IEP-34+Thin+client%3A+transactions+support
> > > >
> > > > пн, 27 мая 2019 г. в 13:27, Alex Plehanov <plehanov.a...@gmail.com>:
> > > >
> > > > > Ivan,
> > > > >
> > > > > Yes, .NET client has such capability. Pavel Tupitsyn already
> mentions
> > > it
> > > > > in this thread. As far as I understand, in .NET client
> implementation
> > > to
> > > > > dispatch responses dedicated thread is used.
> > > > > In a draft implementation of IGNITE-11685 I've used another
> approach:
> > > each
> > > > > request thread can read a response (if lock is acquired by this
> > thread
> > > > > successfully) and complete a future of its own request or another
> > > threads
> > > > > request.
> > > > >
> > > > > пн, 27 мая 2019 г. в 13:01, Павлухин Иван <vololo...@gmail.com>:
> > > > >
> > > > >> Alex,
> > > > >>
> > > > >> I am quite curious about async implementations from other clients.
> > Is
> > > > >> there any design document describing such implementations? Does
> .NET
> > > > >> client have such capability?
> > > > >>
> > > > >> Actually, I forgot to finish my previous message. One of my
> concerns
> > > > >> is that a concurrent response dispatch does not sound as a trivial
> > > > >> thing. So, I would like to understand if we already have a good
> > > > >> approach for that. If not then I suppose it worth a discussion.
> > > > >>
> > > > >> пн, 27 мая 2019 г. в 12:51, Alex Plehanov <
> plehanov.a...@gmail.com
> > >:
> > > > >> >
> > > > >> > Hi Ivan.
> > > > >> >
> > > > >> > Thin client transactions support is not only for java thin
> client.
> > > There
> > > > >> > are other clients, some of them already work in async mode.
> > > > >> > Ticket IGNITE-11685 already has draft implementation too, but
> now
> > > it's
> > > > >> > based on some changes to java thin client which were made by
> > > > >> "transaction
> > > > >> > support" implementation. I think this ticket will be ready in a
> > > couple
> > > > >> of
> > > > >> > days after "transaction support" will be merged. And both
> patches
> > > will
> > > > >> be
> > > > >> > included in the same release.
> > > > >> >
> > > > >> > пн, 27 мая 2019 г. в 11:57, Павлухин Иван <vololo...@gmail.com
> >:
> > > > >> >
> > > > >> > > Hi Alex,
> > > > >> > >
> > > > >> > > Regarding a problem with possible deadlock when two concurrent
> > > > >> > > transactions from the same client are trying to lock the same
> > key
> > > and
> > > > >> > > an issue [1]. It seems to me that without fixing the issue
> [1] a
> > > > >> > > client transactions feature is not practical. Everyone who
> uses
> > a
> > > > >> > > client from multiple threads can face a deadlock which is
> > > impossible
> > > > >> > > to deal with. Or am I missing something here?
> > > > >> > >
> > > > >> > > One workaround I can imagine is failing a transactions
> execution
> > > from
> > > > >> > > concurrent threads for a first time.
> > > > >> > >
> > > > >> > > [1] https://issues.apache.org/jira/browse/IGNITE-11685
> > > > >> > >
> > > > >> > > вт, 21 мая 2019 г. в 19:05, Alex Plehanov <
> > > plehanov.a...@gmail.com>:
> > > > >> > > >
> > > > >> > > > Guys,
> > > > >> > > >
> > > > >> > > > I've updated the IEP [1]. Please have a look.
> > > > >> > > >
> > > > >> > > > [1]
> > > > >> > > >
> > > > >> > >
> > > > >>
> > >
> >
> https://cwiki.apache.org/confluence/display/IGNITE/IEP-34+Thin+client%3A+transactions+support
> > > > >> > > >
> > > > >> > > >
> > > > >> > > > вт, 21 мая 2019 г., 14:19 Alex Plehanov <
> > > plehanov.a...@gmail.com>:
> > > > >> > > >
> > > > >> > > > > Ivan,
> > > > >> > > > >
> > > > >> > > > > Yes, I have plans to do that (at least for java thin
> > client).
> > > > >> Something
> > > > >> > > > > like new class "ClientTransactionConfiguration" inside
> > > > >> > > > > "ClientConfiguration".
> > > > >> > > > >
> > > > >> > > > > вт, 21 мая 2019 г. в 13:37, Павлухин Иван <
> > > vololo...@gmail.com>:
> > > > >> > > > >
> > > > >> > > > >> Alex,
> > > > >> > > > >>
> > > > >> > > > >> Are you going to introduce settings specifying default
> > values
> > > > >> for tx
> > > > >> > > > >> concurrency and isolation in client configuration?
> > > > >> > > > >>
> > > > >> > > > >> пн, 20 мая 2019 г. в 19:34, Alex Plehanov <
> > > > >> plehanov.a...@gmail.com>:
> > > > >> > > > >> >
> > > > >> > > > >> > Igor,
> > > > >> > > > >> >
> > > > >> > > > >> > Perhaps we don't really need to use server's default
> > values
> > > > >> for tx
> > > > >> > > > >> > parameters. It's a minor fix and can be easily
> > implemented
> > > if
> > > > >> it
> > > > >> > > will be
> > > > >> > > > >> > required in the future.
> > > > >> > > > >> > I will update IEP tomorrow regarding point 1 and point
> 3.
> > > > >> > > > >> > Thanks for your feedback.
> > > > >> > > > >> >
> > > > >> > > > >> > пн, 20 мая 2019 г. в 15:24, Igor Sapego <
> > > isap...@apache.org>:
> > > > >> > > > >> >
> > > > >> > > > >> > > Ivan,
> > > > >> > > > >> > >
> > > > >> > > > >> > > This may be a good point for a DBMS, but Ignite is
> much
> > > more
> > > > >> than
> > > > >> > > > >> just a
> > > > >> > > > >> > > DBMS and Ignite client code is not just an SQL query
> > > (which
> > > > >> > > execution
> > > > >> > > > >> > > inherently heavily depends on DBMS). With database
> user
> > > is
> > > > >> > > expecting
> > > > >> > > > >> that
> > > > >> > > > >> > > server have a lot of control on query execution. But
> > with
> > > > >> Ignite,
> > > > >> > > in
> > > > >> > > > >> my
> > > > >> > > > >> > > opinion,
> > > > >> > > > >> > > user writes generic code including business logic in
> > > native
> > > > >> > > language
> > > > >> > > > >> and
> > > > >> > > > >> > > may
> > > > >> > > > >> > > expect more deterministic behaviour from a client.
> > > > >> > > > >> > >
> > > > >> > > > >> > > Also, thick clients do not use server-side defaults.
> > > > >> > > > >> > >
> > > > >> > > > >> > > Of course, this question is debatable and It's not
> > like I
> > > > >> 100%
> > > > >> > > against
> > > > >> > > > >> > > server-side
> > > > >> > > > >> > > defaults here, I just suggest to discuss it in more
> > > detail.
> > > > >> > > > >> > >
> > > > >> > > > >> > > Best Regards,
> > > > >> > > > >> > > Igor
> > > > >> > > > >> > >
> > > > >> > > > >> > >
> > > > >> > > > >> > > On Mon, May 20, 2019 at 2:21 PM Павлухин Иван <
> > > > >> > > vololo...@gmail.com>
> > > > >> > > > >> wrote:
> > > > >> > > > >> > >
> > > > >> > > > >> > > > Igor, Alex,
> > > > >> > > > >> > > >
> > > > >> > > > >> > > > Regarding point 1. I must say that SQL vendors
> > usually
> > > > >> allow to
> > > > >> > > > >> > > > configure default timeouts and a transaction
> > isolation
> > > on a
> > > > >> > > server
> > > > >> > > > >> > > > side. E.g. in MySQL you can do a following:
> > > > >> > > > >> > > > set local tx_isolation = <isolation> -- per SQL
> > client
> > > > >> session
> > > > >> > > > >> > > > (usually physical network connection)
> > > > >> > > > >> > > > set global tx_isolation = <isolation> -- global
> > > settings,
> > > > >> all
> > > > >> > > > >> clients
> > > > >> > > > >> > > > (which does not override it) are affected
> > > > >> > > > >> > > >
> > > > >> > > > >> > > > So, if it is a standard practice why should do it
> > > > >> differently?
> > > > >> > > If it
> > > > >> > > > >> > > > is not, we can continue discussion. Do we have some
> > > > >> examples
> > > > >> > > > >> following
> > > > >> > > > >> > > > opposite way (client-wide default setting)?
> > > > >> > > > >> > > >
> > > > >> > > > >> > > > пн, 20 мая 2019 г. в 13:50, Igor Sapego <
> > > > >> isap...@apache.org>:
> > > > >> > > > >> > > > >
> > > > >> > > > >> > > > > 1. In my opinion, having client-specific
> > transaction
> > > > >> > > parameters is
> > > > >> > > > >> > > > expected
> > > > >> > > > >> > > > > for
> > > > >> > > > >> > > > > client when have different arguments depending on
> > > server
> > > > >> seems
> > > > >> > > > >> > > unexpected
> > > > >> > > > >> > > > > and can lead to hard-to-debug bugs and issues
> when
> > > > >> updating
> > > > >> > > from
> > > > >> > > > >> old to
> > > > >> > > > >> > > > new
> > > > >> > > > >> > > > > server versions. Also it goes against common
> > practice
> > > > >> with
> > > > >> > > > >> arguments of
> > > > >> > > > >> > > > thin
> > > > >> > > > >> > > > > client and thus, may be even more unexpected.
> > > > >> > > > >> > > > >
> > > > >> > > > >> > > > > I believe that if we want to add ability to
> client
> > to
> > > > >> adopt
> > > > >> > > some
> > > > >> > > > >> > > server's
> > > > >> > > > >> > > > > defaults
> > > > >> > > > >> > > > > we should implement it as separate feature, and
> it
> > > > >> should not
> > > > >> > > be a
> > > > >> > > > >> > > > default
> > > > >> > > > >> > > > > behaviour for client, user should explicitly
> state
> > > that
> > > > >> they
> > > > >> > > want
> > > > >> > > > >> this
> > > > >> > > > >> > > > > behaviour,
> > > > >> > > > >> > > > > so it won't be unexpected for them.
> > > > >> > > > >> > > > >
> > > > >> > > > >> > > > > 3. "Flags" field looks like a good solution to
> me.
> > > > >> > > > >> > > > >
> > > > >> > > > >> > > > > Best Regards,
> > > > >> > > > >> > > > > Igor
> > > > >> > > > >> > > > >
> > > > >> > > > >> > > > >
> > > > >> > > > >> > > > > On Mon, May 20, 2019 at 12:58 PM Alex Plehanov <
> > > > >> > > > >> > > plehanov.a...@gmail.com>
> > > > >> > > > >> > > > > wrote:
> > > > >> > > > >> > > > >
> > > > >> > > > >> > > > > > Hi, Igor
> > > > >> > > > >> > > > > >
> > > > >> > > > >> > > > > > 1. I think it's better to have the ability to
> > > configure
> > > > >> > > > >> transaction
> > > > >> > > > >> > > > > > parameters (for example configure default
> timeout
> > > for
> > > > >> all
> > > > >> > > > >> clients) on
> > > > >> > > > >> > > > > > server-side, then don't have such ability and
> > > always
> > > > >> use
> > > > >> > > some
> > > > >> > > > >> > > > predefined
> > > > >> > > > >> > > > > > client-side values (which can be different for
> > > > >> different
> > > > >> > > client
> > > > >> > > > >> > > > > > implementations). At least default timeout is
> > more
> > > > >> server
> > > > >> > > > >> specific
> > > > >> > > > >> > > then
> > > > >> > > > >> > > > > > client specific parameter since it can affect
> > > > >> server-side
> > > > >> > > > >> processes
> > > > >> > > > >> > > > (PME
> > > > >> > > > >> > > > > > for example).
> > > > >> > > > >> > > > > >
> > > > >> > > > >> > > > > > 2. IgniteUuid has 24 bytes length. This tx id
> > > needs to
> > > > >> be
> > > > >> > > > >> included to
> > > > >> > > > >> > > > each
> > > > >> > > > >> > > > > > cache operation under a transaction. And it
> > almost
> > > > >> will not
> > > > >> > > > >> simplify
> > > > >> > > > >> > > > server
> > > > >> > > > >> > > > > > code. Also, thin clients don't know how to deal
> > > with
> > > > >> > > IgniteUuid
> > > > >> > > > >> now,
> > > > >> > > > >> > > > there
> > > > >> > > > >> > > > > > is no such entity in the protocol, there are no
> > > > >> described
> > > > >> > > rules
> > > > >> > > > >> on
> > > > >> > > > >> > > how
> > > > >> > > > >> > > > to
> > > > >> > > > >> > > > > > convert it to a string. For
> monitoring/debugging
> > > > >> purposes we
> > > > >> > > > >> should
> > > > >> > > > >> > > > have
> > > > >> > > > >> > > > > > the same presentation of this entity on server
> > and
> > > > >> client
> > > > >> > > > >> sides. I
> > > > >> > > > >> > > > think if
> > > > >> > > > >> > > > > > we need to know real tx id on the client side
> > it's
> > > > >> better to
> > > > >> > > > >> > > > additionally
> > > > >> > > > >> > > > > > include this value to OP_TX_START response (we
> > > also can
> > > > >> > > > >> serialize it
> > > > >> > > > >> > > > as a
> > > > >> > > > >> > > > > > string to avoid introducing new entity on
> client
> > > side)
> > > > >> or
> > > > >> > > > >> create a
> > > > >> > > > >> > > new
> > > > >> > > > >> > > > > > operation to explicitly request tx id (for
> > example
> > > > >> > > OP_TX_INFO).
> > > > >> > > > >> > > > > >
> > > > >> > > > >> > > > > > 3. Make sense, we can reuse deprecated "flags"
> > > field
> > > > >> > > > >> (undeprecate
> > > > >> > > > >> > > it),
> > > > >> > > > >> > > > > > which is included now to each cache operation.
> > > > >> > > > >> > > > > >
> > > > >> > > > >> > > > > >
> > > > >> > > > >> > > > > > пт, 17 мая 2019 г. в 18:49, Igor Sapego <
> > > > >> isap...@apache.org
> > > > >> > > >:
> > > > >> > > > >> > > > > >
> > > > >> > > > >> > > > > > > Hi,
> > > > >> > > > >> > > > > > >
> > > > >> > > > >> > > > > > > I had a look at IEP and have several
> comments:
> > > > >> > > > >> > > > > > >
> > > > >> > > > >> > > > > > > 1. Why would one want to use to use server's
> > > default
> > > > >> > > values
> > > > >> > > > >> for
> > > > >> > > > >> > > > > > Concurrency
> > > > >> > > > >> > > > > > > or Isolation?
> > > > >> > > > >> > > > > > > I believe, client should have its own
> defaults
> > > which
> > > > >> > > should be
> > > > >> > > > >> > > > explicitly
> > > > >> > > > >> > > > > > > documented, so that
> > > > >> > > > >> > > > > > > behaviour of transactions will not depend on
> > the
> > > > >> server
> > > > >> > > node
> > > > >> > > > >> it was
> > > > >> > > > >> > > > > > routed
> > > > >> > > > >> > > > > > > to. The same goes
> > > > >> > > > >> > > > > > > for timeout.
> > > > >> > > > >> > > > > > >
> > > > >> > > > >> > > > > > > 2. Not sure about transaction ID represented
> by
> > > int.
> > > > >> Why
> > > > >> > > not
> > > > >> > > > >> to use
> > > > >> > > > >> > > > > > > IgniteUuid? It should simplify
> > > > >> > > > >> > > > > > > server code. Also it may help with
> > > > >> monitoring/debugging if
> > > > >> > > > >> thin
> > > > >> > > > >> > > > clients
> > > > >> > > > >> > > > > > and
> > > > >> > > > >> > > > > > > server nodes use the
> > > > >> > > > >> > > > > > > same identifier for transactions. It does not
> > > seem
> > > > >> as a
> > > > >> > > big
> > > > >> > > > >> > > overhead
> > > > >> > > > >> > > > to
> > > > >> > > > >> > > > > > me
> > > > >> > > > >> > > > > > > either.
> > > > >> > > > >> > > > > > >
> > > > >> > > > >> > > > > > > 3. Maybe it makes sense to add "In
> transaction"
> > > > >> boolean
> > > > >> > > flag
> > > > >> > > > >> to
> > > > >> > > > >> > > cache
> > > > >> > > > >> > > > > > > operation request header
> > > > >> > > > >> > > > > > > to avoid bloating message size in
> non-affected
> > > > >> scenarios.
> > > > >> > > > >> > > > > > >
> > > > >> > > > >> > > > > > > Best Regards,
> > > > >> > > > >> > > > > > > Igor
> > > > >> > > > >> > > > > > >
> > > > >> > > > >> > > > > > >
> > > > >> > > > >> > > > > > > On Mon, May 13, 2019 at 1:58 PM Alex
> Plehanov <
> > > > >> > > > >> > > > plehanov.a...@gmail.com>
> > > > >> > > > >> > > > > > > wrote:
> > > > >> > > > >> > > > > > >
> > > > >> > > > >> > > > > > > > Hi, Ivan.
> > > > >> > > > >> > > > > > > >
> > > > >> > > > >> > > > > > > > Thanks for your comments.
> > > > >> > > > >> > > > > > > >
> > > > >> > > > >> > > > > > > > 1. Transaction id in thin client protocol
> > it's
> > > > >> just a tx
> > > > >> > > > >> counter
> > > > >> > > > >> > > > for
> > > > >> > > > >> > > > > > the
> > > > >> > > > >> > > > > > > > current connection. It's not related to
> > > > >> > > GridCacheVersion.
> > > > >> > > > >> If we
> > > > >> > > > >> > > > want to
> > > > >> > > > >> > > > > > > > know GridCacheVersion on the client side, I
> > > think
> > > > >> we
> > > > >> > > should
> > > > >> > > > >> > > > introduce a
> > > > >> > > > >> > > > > > > new
> > > > >> > > > >> > > > > > > > type of operation (for example OP_TX_INFO).
> > > > >> > > > >> > > > > > > > 2. Error handling is already provided by
> thin
> > > > >> client
> > > > >> > > > >> protocol,
> > > > >> > > > >> > > > even in
> > > > >> > > > >> > > > > > > case
> > > > >> > > > >> > > > > > > > of empty response. Of course, the client
> will
> > > know
> > > > >> if
> > > > >> > > there
> > > > >> > > > >> is a
> > > > >> > > > >> > > > > > failure
> > > > >> > > > >> > > > > > > > occurred during OP_TX_END operation.
> > > > >> > > > >> > > > > > > > 3. AFAIK some of thin client
> implementations
> > > > >> already
> > > > >> > > send
> > > > >> > > > >> > > requests
> > > > >> > > > >> > > > and
> > > > >> > > > >> > > > > > > > process responses in an async way (.NET for
> > > > >> example). As
> > > > >> > > > >> for java
> > > > >> > > > >> > > > thin
> > > > >> > > > >> > > > > > > > client, in the current implementation
> channel
> > > is
> > > > >> locked
> > > > >> > > > >> > > exclusively
> > > > >> > > > >> > > > > > > before
> > > > >> > > > >> > > > > > > > request send and until the response is
> > > processed.
> > > > >> I have
> > > > >> > > > >> some
> > > > >> > > > >> > > ideas
> > > > >> > > > >> > > > > > about
> > > > >> > > > >> > > > > > > > how to fix this (split send/receive process
> > > into
> > > > >> two
> > > > >> > > > >> different
> > > > >> > > > >> > > > parts
> > > > >> > > > >> > > > > > and
> > > > >> > > > >> > > > > > > > acquire locks for this parts separately or
> > > create
> > > > >> > > futures on
> > > > >> > > > >> > > > request
> > > > >> > > > >> > > > > > sent
> > > > >> > > > >> > > > > > > > and complete it after processing the
> response
> > > in a
> > > > >> > > dedicated
> > > > >> > > > >> > > > thread),
> > > > >> > > > >> > > > > > > I've
> > > > >> > > > >> > > > > > > > created ticket [1] for this issue and will
> > try
> > > to
> > > > >> > > implement
> > > > >> > > > >> > > > prototype
> > > > >> > > > >> > > > > > in
> > > > >> > > > >> > > > > > > a
> > > > >> > > > >> > > > > > > > couple of days.
> > > > >> > > > >> > > > > > > >
> > > > >> > > > >> > > > > > > > About suspend/resume, yes, on server-side
> we
> > > should
> > > > >> > > resume
> > > > >> > > > >> tx
> > > > >> > > > >> > > > before
> > > > >> > > > >> > > > > > each
> > > > >> > > > >> > > > > > > > transactional cache operation and suspend
> the
> > > tx
> > > > >> after
> > > > >> > > the
> > > > >> > > > >> > > > operation.
> > > > >> > > > >> > > > > > In
> > > > >> > > > >> > > > > > > my
> > > > >> > > > >> > > > > > > > opinion, suspend/resume approach have
> several
> > > > >> advantages
> > > > >> > > > >> over
> > > > >> > > > >> > > > approach
> > > > >> > > > >> > > > > > > with
> > > > >> > > > >> > > > > > > > explicit tx id argument:
> > > > >> > > > >> > > > > > > > - Introducing explicit tx id argument for
> > cache
> > > > >> > > operations
> > > > >> > > > >> leads
> > > > >> > > > >> > > > to a
> > > > >> > > > >> > > > > > > > significant API change
> > > > >> > > > >> > > > > > > > - It's not clear how to use it together
> with
> > > > >> current
> > > > >> > > > >> > > > (tx-per-thread)
> > > > >> > > > >> > > > > > > > approach (for example, what if a thread is
> > > already
> > > > >> held
> > > > >> > > > >> > > > transaction and
> > > > >> > > > >> > > > > > > > someone call cache operation with explicit
> tx
> > > id?)
> > > > >> > > > >> > > > > > > > - Suspend/resume feature will also be
> useful
> > > for
> > > > >> thick
> > > > >> > > > >> clients
> > > > >> > > > >> > > > > > > > - Suspend/resume functionality is already
> > > partially
> > > > >> > > > >> implemented
> > > > >> > > > >> > > > (for
> > > > >> > > > >> > > > > > > > optimistic transactions only)
> > > > >> > > > >> > > > > > > >
> > > > >> > > > >> > > > > > > > [1]
> > > > >> https://issues.apache.org/jira/browse/IGNITE-11685
> > > > >> > > > >> > > > > > > >
> > > > >> > > > >> > > > > > > > пт, 3 мая 2019 г. в 08:10, Павлухин Иван <
> > > > >> > > > >> vololo...@gmail.com>:
> > > > >> > > > >> > > > > > > >
> > > > >> > > > >> > > > > > > > > Hi Alex,
> > > > >> > > > >> > > > > > > > >
> > > > >> > > > >> > > > > > > > > I went through IEP [1] and I have a
> couple
> > of
> > > > >> > > questions:
> > > > >> > > > >> > > > > > > > > 1. What is going to be used as
> transaction
> > > id?
> > > > >> In a
> > > > >> > > > >> described
> > > > >> > > > >> > > > > > protocol
> > > > >> > > > >> > > > > > > > > I see an int field for it. Should not it
> be
> > > > >> > > > >> GridCacheVersion
> > > > >> > > > >> > > > > > > > > corresponding to
> > IgniteInternalTx#xidVersion?
> > > > >> > > > >> > > > > > > > > 2. OP_TX_END message assumes an empty
> > > response,
> > > > >> but I
> > > > >> > > > >> think
> > > > >> > > > >> > > that
> > > > >> > > > >> > > > > > > > > errors during tx finish are possible and
> > > should
> > > > >> be
> > > > >> > > > >> returned in
> > > > >> > > > >> > > a
> > > > >> > > > >> > > > > > > > > response.
> > > > >> > > > >> > > > > > > > > 3. In IEP it is stated that async
> > processing
> > > of
> > > > >> lock
> > > > >> > > > >> operations
> > > > >> > > > >> > > > > > should
> > > > >> > > > >> > > > > > > > > be introduced on a client side to enable
> > > > >> concurrent
> > > > >> > > > >> operations
> > > > >> > > > >> > > > from
> > > > >> > > > >> > > > > > > > > different client threads. Do you have an
> > idea
> > > > >> how to
> > > > >> > > > >> achieve
> > > > >> > > > >> > > it?
> > > > >> > > > >> > > > > > > > >
> > > > >> > > > >> > > > > > > > > Also, a bit about a suspend/resume
> trait. I
> > > > >> tried to
> > > > >> > > think
> > > > >> > > > >> > > about
> > > > >> > > > >> > > > it
> > > > >> > > > >> > > > > > > > > leaving away an existing transactions
> > > > >> implementation
> > > > >> > > in
> > > > >> > > > >> Ignite.
> > > > >> > > > >> > > > As I
> > > > >> > > > >> > > > > > > > > understood we are going to resume a tx
> > before
> > > > >> each
> > > > >> > > cache
> > > > >> > > > >> > > > operation in
> > > > >> > > > >> > > > > > > > > the tx and resume the tx after the
> > > operation. All
> > > > >> > > this to
> > > > >> > > > >> make
> > > > >> > > > >> > > an
> > > > >> > > > >> > > > > > > > > executing thread available for other
> > > operations
> > > > >> (e.g.
> > > > >> > > in
> > > > >> > > > >> other
> > > > >> > > > >> > > > txs).
> > > > >> > > > >> > > > > > > > > From the first glance it seems like an
> > > inversed
> > > > >> > > logic. A
> > > > >> > > > >> > > > > > > > > straightforward way is to execute a cache
> > > > >> operation
> > > > >> > > > >> within a
> > > > >> > > > >> > > > > > > > > particular transaction defined as an
> > > explicit tx
> > > > >> id
> > > > >> > > > >> argument
> > > > >> > > > >> > > > (e.g.
> > > > >> > > > >> > > > > > > > > cache.put(key, value, txid)). Can we do
> so?
> > > > >> > > > >> > > > > > > > >
> > > > >> > > > >> > > > > > > > > And leaving for now thin client API. I
> > > cannot say
> > > > >> > > that one
> > > > >> > > > >> > > > proposed
> > > > >> > > > >> > > > > > in
> > > > >> > > > >> > > > > > > > > IEP is good or bad. I can only say that
> it
> > > > >> ressembles
> > > > >> > > > >> current
> > > > >> > > > >> > > > thick
> > > > >> > > > >> > > > > > > > > client API. And perhaps it should not. I
> > > think
> > > > >> that we
> > > > >> > > > >> should
> > > > >> > > > >> > > > > > consider
> > > > >> > > > >> > > > > > > > > similar APIs provided by other vendors
> and
> > > keep
> > > > >> in
> > > > >> > > mind
> > > > >> > > > >> that we
> > > > >> > > > >> > > > have
> > > > >> > > > >> > > > > > a
> > > > >> > > > >> > > > > > > > > bunch of client implementations for
> > different
> > > > >> > > languages. I
> > > > >> > > > >> > > > suppose
> > > > >> > > > >> > > > > > > > > that we can return to it a little bit
> > later.
> > > And
> > > > >> I
> > > > >> > > hope
> > > > >> > > > >> that we
> > > > >> > > > >> > > > will
> > > > >> > > > >> > > > > > > > > do it.
> > > > >> > > > >> > > > > > > > >
> > > > >> > > > >> > > > > > > > > [1]
> > > > >> > > > >> > > > > > > > >
> > > > >> > > > >> > > > > > > >
> > > > >> > > > >> > > > > > >
> > > > >> > > > >> > > > > >
> > > > >> > > > >> > > >
> > > > >> > > > >> > >
> > > > >> > > > >>
> > > > >> > >
> > > > >>
> > >
> >
> https://cwiki.apache.org/confluence/display/IGNITE/IEP-34+Thin+client%3A+transactions+support
> > > > >> > > > >> > > > > > > > >
> > > > >> > > > >> > > > > > > > > вт, 30 апр. 2019 г. в 13:24, Alex
> Plehanov
> > <
> > > > >> > > > >> > > > plehanov.a...@gmail.com
> > > > >> > > > >> > > > > > >:
> > > > >> > > > >> > > > > > > > > >
> > > > >> > > > >> > > > > > > > > > Hello, Igniters!
> > > > >> > > > >> > > > > > > > > >
> > > > >> > > > >> > > > > > > > > > I've update IEP [1] and implement PoC
> > > > >> according to
> > > > >> > > new
> > > > >> > > > >> > > approach
> > > > >> > > > >> > > > > > > > (multiple
> > > > >> > > > >> > > > > > > > > > concurrent transactions per
> connection).
> > > > >> > > > >> > > > > > > > > > But to move forward another feature
> need
> > > to be
> > > > >> > > > >> implemented:
> > > > >> > > > >> > > > > > > > > suspend/resume
> > > > >> > > > >> > > > > > > > > > for pessimistic transactions
> (IGNITE-5714
> > > [2]).
> > > > >> > > > >> > > Implementation
> > > > >> > > > >> > > > of
> > > > >> > > > >> > > > > > > > > > suspend/resume is ready now and ticket
> in
> > > > >> 'Patch
> > > > >> > > > >> available'
> > > > >> > > > >> > > > status.
> > > > >> > > > >> > > > > > > Can
> > > > >> > > > >> > > > > > > > > any
> > > > >> > > > >> > > > > > > > > > transactions expert help with review of
> > > > >> IGNITE-5714?
> > > > >> > > > >> > > > > > > > > >
> > > > >> > > > >> > > > > > > > > > [1]:
> > > > >> > > > >> > > > > > > > > >
> > > > >> > > > >> > > > > > > > >
> > > > >> > > > >> > > > > > > >
> > > > >> > > > >> > > > > > >
> > > > >> > > > >> > > > > >
> > > > >> > > > >> > > >
> > > > >> > > > >> > >
> > > > >> > > > >>
> > > > >> > >
> > > > >>
> > >
> >
> https://cwiki.apache.org/confluence/display/IGNITE/IEP-34+Thin+client%3A+transactions+support
> > > > >> > > > >> > > > > > > > > > [2]:
> > > > >> > > https://issues.apache.org/jira/browse/IGNITE-5714
> > > > >> > > > >> > > > > > > > > >
> > > > >> > > > >> > > > > > > > > > чт, 4 апр. 2019 г. в 11:32, Alex
> > Plehanov <
> > > > >> > > > >> > > > plehanov.a...@gmail.com
> > > > >> > > > >> > > > > > >:
> > > > >> > > > >> > > > > > > > > >
> > > > >> > > > >> > > > > > > > > > > Vladimir,
> > > > >> > > > >> > > > > > > > > > >
> > > > >> > > > >> > > > > > > > > > > Ok, then I will rewrite IEP in the
> near
> > > > >> future.
> > > > >> > > > >> > > > > > > > > > >
> > > > >> > > > >> > > > > > > > > > > чт, 4 апр. 2019 г. в 11:14, Vladimir
> > > Ozerov <
> > > > >> > > > >> > > > > > voze...@gridgain.com
> > > > >> > > > >> > > > > > > >:
> > > > >> > > > >> > > > > > > > > > >
> > > > >> > > > >> > > > > > > > > > >> Hi Alex,
> > > > >> > > > >> > > > > > > > > > >>
> > > > >> > > > >> > > > > > > > > > >> I think we should be able to handle
> > many
> > > > >> > > transactions
> > > > >> > > > >> > > > through a
> > > > >> > > > >> > > > > > > > single
> > > > >> > > > >> > > > > > > > > > >> connection. This will make our
> > protocol
> > > and
> > > > >> > > client
> > > > >> > > > >> > > > > > implementations
> > > > >> > > > >> > > > > > > > > much
> > > > >> > > > >> > > > > > > > > > >> more efficient, and simplicity from
> > > > >> developer's
> > > > >> > > > >> > > perspective
> > > > >> > > > >> > > > is
> > > > >> > > > >> > > > > > not
> > > > >> > > > >> > > > > > > > our
> > > > >> > > > >> > > > > > > > > > >> goal. Consider normal nodes. We have
> > > server
> > > > >> > > nodes and
> > > > >> > > > >> > > client
> > > > >> > > > >> > > > > > > nodes.
> > > > >> > > > >> > > > > > > > > You
> > > > >> > > > >> > > > > > > > > > >> may
> > > > >> > > > >> > > > > > > > > > >> span whatever number of transactions
> > you
> > > > >> need,
> > > > >> > > but
> > > > >> > > > >> all of
> > > > >> > > > >> > > > them
> > > > >> > > > >> > > > > > are
> > > > >> > > > >> > > > > > > > > > >> coordinated through a single
> > connection.
> > > > >> The same
> > > > >> > > > >> should
> > > > >> > > > >> > > be
> > > > >> > > > >> > > > > > > > > applicable to
> > > > >> > > > >> > > > > > > > > > >> thin clients. Protocol is already
> > > designed
> > > > >> to
> > > > >> > > handle
> > > > >> > > > >> this,
> > > > >> > > > >> > > > as we
> > > > >> > > > >> > > > > > > > pass
> > > > >> > > > >> > > > > > > > > > >> unique operation ID in order to
> > > distinguish
> > > > >> one
> > > > >> > > > >> operation
> > > > >> > > > >> > > > from
> > > > >> > > > >> > > > > > > > > another. It
> > > > >> > > > >> > > > > > > > > > >> is true, though, that we will have
> to
> > > > >> introduce a
> > > > >> > > > >> kind of
> > > > >> > > > >> > > > > > > "session"
> > > > >> > > > >> > > > > > > > > > >> concept, and pass additional
> > identifier
> > > > >> along
> > > > >> > > with
> > > > >> > > > >> cache
> > > > >> > > > >> > > > > > > operations,
> > > > >> > > > >> > > > > > > > > but
> > > > >> > > > >> > > > > > > > > > >> this doesn't sound like a problem to
> > me.
> > > > >> > > > >> > > > > > > > > > >>
> > > > >> > > > >> > > > > > > > > > >> And provided that currently
> > server-side
> > > > >> > > transactions
> > > > >> > > > >> are
> > > > >> > > > >> > > > bound
> > > > >> > > > >> > > > > > to
> > > > >> > > > >> > > > > > > > > threads
> > > > >> > > > >> > > > > > > > > > >> artificially, I would say that the
> > first
> > > > >> step in
> > > > >> > > > >> > > > implementation
> > > > >> > > > >> > > > > > of
> > > > >> > > > >> > > > > > > > > > >> transactions on thin clients should
> be
> > > > >> decoupling
> > > > >> > > > >> > > > server-side
> > > > >> > > > >> > > > > > > > > transactions
> > > > >> > > > >> > > > > > > > > > >> from threads. Without this we will
> > have
> > > very
> > > > >> > > > >> inefficient
> > > > >> > > > >> > > > > > > > > implementation,
> > > > >> > > > >> > > > > > > > > > >> when every new client transaction
> have
> > > to
> > > > >> spawn
> > > > >> > > a new
> > > > >> > > > >> > > > thread.
> > > > >> > > > >> > > > > > This
> > > > >> > > > >> > > > > > > > is
> > > > >> > > > >> > > > > > > > > slow
> > > > >> > > > >> > > > > > > > > > >> and introduces high memory pressure
> > on a
> > > > >> cluster
> > > > >> > > > >> node. We
> > > > >> > > > >> > > > > > already
> > > > >> > > > >> > > > > > > > work
> > > > >> > > > >> > > > > > > > > > >> this
> > > > >> > > > >> > > > > > > > > > >> way for MVCC transactions which are
> > > spawned
> > > > >> from
> > > > >> > > JDBC
> > > > >> > > > >> > > > driver,
> > > > >> > > > >> > > > > > and
> > > > >> > > > >> > > > > > > > > believe
> > > > >> > > > >> > > > > > > > > > >> me, we do not want to replicated
> this
> > > bad
> > > > >> > > practice to
> > > > >> > > > >> > > other
> > > > >> > > > >> > > > > > > clients
> > > > >> > > > >> > > > > > > > > :-)
> > > > >> > > > >> > > > > > > > > > >>
> > > > >> > > > >> > > > > > > > > > >> Vladimir.
> > > > >> > > > >> > > > > > > > > > >>
> > > > >> > > > >> > > > > > > > > > >> On Thu, Apr 4, 2019 at 10:08 AM Alex
> > > > >> Plehanov <
> > > > >> > > > >> > > > > > > > > plehanov.a...@gmail.com>
> > > > >> > > > >> > > > > > > > > > >> wrote:
> > > > >> > > > >> > > > > > > > > > >>
> > > > >> > > > >> > > > > > > > > > >> > Guys, so, do we need multiple
> > > concurrent
> > > > >> > > > >> transactions
> > > > >> > > > >> > > per
> > > > >> > > > >> > > > > > > > > connection?
> > > > >> > > > >> > > > > > > > > > >> >
> > > > >> > > > >> > > > > > > > > > >> > There are pros and cons for each
> > > approach.
> > > > >> > > > >> Difference
> > > > >> > > > >> > > > between
> > > > >> > > > >> > > > > > > > > > >> approaches:
> > > > >> > > > >> > > > > > > > > > >> >
> > > > >> > > > >> > > > > > > > > > >> > One transaction at a time per
> > > connection:
> > > > >> > > > >> > > > > > > > > > >> >  - This approach is used in RDBMS
> > > world
> > > > >> and
> > > > >> > > users
> > > > >> > > > >> got
> > > > >> > > > >> > > > used to
> > > > >> > > > >> > > > > > it
> > > > >> > > > >> > > > > > > > > > >> >  - To use transactions
> concurrently
> > > users
> > > > >> need
> > > > >> > > to
> > > > >> > > > >> use
> > > > >> > > > >> > > > > > different
> > > > >> > > > >> > > > > > > > > > >> connections
> > > > >> > > > >> > > > > > > > > > >> > and get these connections via
> > > something
> > > > >> like a
> > > > >> > > > >> > > connection
> > > > >> > > > >> > > > pool
> > > > >> > > > >> > > > > > > > > > >> >  - Easy to implement (in fact, PoC
> > is
> > > > >> already
> > > > >> > > done)
> > > > >> > > > >> > > > > > > > > > >> >
> > > > >> > > > >> > > > > > > > > > >> > Multiple concurrent transactions
> per
> > > > >> > > connection:
> > > > >> > > > >> > > > > > > > > > >> >  - At least for java thin client,
> we
> > > can
> > > > >> > > implement
> > > > >> > > > >> > > > transaction
> > > > >> > > > >> > > > > > > per
> > > > >> > > > >> > > > > > > > > > >> thread
> > > > >> > > > >> > > > > > > > > > >> > approach as implemented now for
> the
> > > thick
> > > > >> > > client
> > > > >> > > > >> > > (perhaps
> > > > >> > > > >> > > > > > other
> > > > >> > > > >> > > > > > > > thin
> > > > >> > > > >> > > > > > > > > > >> > clients can implement the same
> > > > >> abstraction)
> > > > >> > > > >> > > > > > > > > > >> >  - There is also protocol change
> for
> > > all
> > > > >> cache
> > > > >> > > > >> > > operations
> > > > >> > > > >> > > > > > needed
> > > > >> > > > >> > > > > > > > (to
> > > > >> > > > >> > > > > > > > > > >> bind
> > > > >> > > > >> > > > > > > > > > >> > cache operation to the
> transaction)
> > > > >> > > > >> > > > > > > > > > >> >  - Significant changes to all
> > > implemented
> > > > >> > > clients
> > > > >> > > > >> are
> > > > >> > > > >> > > > needed
> > > > >> > > > >> > > > > > > > > > >> >  - Implementation on the server
> side
> > > is
> > > > >> more
> > > > >> > > > >> complex
> > > > >> > > > >> > > > > > > > > > >> >
> > > > >> > > > >> > > > > > > > > > >> > What do you think?
> > > > >> > > > >> > > > > > > > > > >> >
> > > > >> > > > >> > > > > > > > > > >> >
> > > > >> > > > >> > > > > > > > > > >> > вт, 2 апр. 2019 г. в 16:29, Alex
> > > Plehanov
> > > > >> <
> > > > >> > > > >> > > > > > > > plehanov.a...@gmail.com
> > > > >> > > > >> > > > > > > > > >:
> > > > >> > > > >> > > > > > > > > > >> >
> > > > >> > > > >> > > > > > > > > > >> > > Ilya,
> > > > >> > > > >> > > > > > > > > > >> > >
> > > > >> > > > >> > > > > > > > > > >> > > > We should be able to multiplex
> > > several
> > > > >> > > > >> transactions
> > > > >> > > > >> > > > using
> > > > >> > > > >> > > > > > a
> > > > >> > > > >> > > > > > > > > single
> > > > >> > > > >> > > > > > > > > > >> > > Client connection.
> > > > >> > > > >> > > > > > > > > > >> > > In this case, we should
> > > significantly
> > > > >> change
> > > > >> > > > >> cache
> > > > >> > > > >> > > > > > operations
> > > > >> > > > >> > > > > > > > > syntax
> > > > >> > > > >> > > > > > > > > > >> (for
> > > > >> > > > >> > > > > > > > > > >> > > each implemented client), to
> bind
> > > each
> > > > >> > > operation
> > > > >> > > > >> to
> > > > >> > > > >> > > the
> > > > >> > > > >> > > > > > > > > transaction.
> > > > >> > > > >> > > > > > > > > > >> > >
> > > > >> > > > >> > > > > > > > > > >> > > > I want to also ask if "Number
> of
> > > > >> entries
> > > > >> > > > >> > > > participating in
> > > > >> > > > >> > > > > > > > > > >> transaction
> > > > >> > > > >> > > > > > > > > > >> > > (may be approximate). 0 -
> default
> > > > >> value." is
> > > > >> > > > >> needed.
> > > > >> > > > >> > > > > > > > > > >> > > I've tried to minimize API
> changes
> > > > >> between
> > > > >> > > thick
> > > > >> > > > >> and
> > > > >> > > > >> > > > thin
> > > > >> > > > >> > > > > > > client
> > > > >> > > > >> > > > > > > > > to
> > > > >> > > > >> > > > > > > > > > >> > > simplify move from one to
> another.
> > > It's
> > > > >> the
> > > > >> > > only
> > > > >> > > > >> > > reason.
> > > > >> > > > >> > > > > > But I
> > > > >> > > > >> > > > > > > > > agree
> > > > >> > > > >> > > > > > > > > > >> with
> > > > >> > > > >> > > > > > > > > > >> > > you, the parameter is not very
> > > useful.
> > > > >> > > > >> > > > > > > > > > >> > >
> > > > >> > > > >> > > > > > > > > > >> > >
> > > > >> > > > >> > > > > > > > > > >> > > вт, 2 апр. 2019 г. в 14:48, Ilya
> > > > >> Kasnacheev <
> > > > >> > > > >> > > > > > > > > > >> ilya.kasnach...@gmail.com>:
> > > > >> > > > >> > > > > > > > > > >> > >
> > > > >> > > > >> > > > > > > > > > >> > >> Hello!
> > > > >> > > > >> > > > > > > > > > >> > >>
> > > > >> > > > >> > > > > > > > > > >> > >> Pavel, I agree with you
> > thorougly.
> > > We
> > > > >> > > should be
> > > > >> > > > >> able
> > > > >> > > > >> > > to
> > > > >> > > > >> > > > > > > > multiplex
> > > > >> > > > >> > > > > > > > > > >> > several
> > > > >> > > > >> > > > > > > > > > >> > >> transactions using a single
> > Client
> > > > >> > > connection.
> > > > >> > > > >> This
> > > > >> > > > >> > > > means
> > > > >> > > > >> > > > > > > > adding
> > > > >> > > > >> > > > > > > > > > >> > >> Transaction id parameter to
> every
> > > > >> affected
> > > > >> > > cache
> > > > >> > > > >> > > > operation
> > > > >> > > > >> > > > > > /
> > > > >> > > > >> > > > > > > > SQL
> > > > >> > > > >> > > > > > > > > > >> > statement
> > > > >> > > > >> > > > > > > > > > >> > >> (if applicable) to make sure we
> > do
> > > > >> cache
> > > > >> > > > >> operations
> > > > >> > > > >> > > on
> > > > >> > > > >> > > > > > > relevant
> > > > >> > > > >> > > > > > > > > > >> > >> transaction.
> > > > >> > > > >> > > > > > > > > > >> > >>
> > > > >> > > > >> > > > > > > > > > >> > >> This is how other things work
> in
> > > > >> Ignite,
> > > > >> > > such as
> > > > >> > > > >> > > > > > > communication.
> > > > >> > > > >> > > > > > > > > We do
> > > > >> > > > >> > > > > > > > > > >> > not
> > > > >> > > > >> > > > > > > > > > >> > >> open dozens of connections, we
> > > > >> multiplex
> > > > >> > > > >> operations
> > > > >> > > > >> > > > > > > > > asynchronously
> > > > >> > > > >> > > > > > > > > > >> > through
> > > > >> > > > >> > > > > > > > > > >> > >> a single connection.
> > > > >> > > > >> > > > > > > > > > >> > >>
> > > > >> > > > >> > > > > > > > > > >> > >> I think that trying to pool
> > Ignite
> > > > >> > > connections
> > > > >> > > > >> will
> > > > >> > > > >> > > be
> > > > >> > > > >> > > > > > highly
> > > > >> > > > >> > > > > > > > > > >> > >> inconvenient,
> > > > >> > > > >> > > > > > > > > > >> > >> since there is no existing
> > > > >> infrastructure
> > > > >> > > for
> > > > >> > > > >> such
> > > > >> > > > >> > > > pooling
> > > > >> > > > >> > > > > > > > (like
> > > > >> > > > >> > > > > > > > > > >> there
> > > > >> > > > >> > > > > > > > > > >> > >> exists for JDBC).
> > > > >> > > > >> > > > > > > > > > >> > >>
> > > > >> > > > >> > > > > > > > > > >> > >> I want to also ask if "Number
> of
> > > > >> entries
> > > > >> > > > >> > > participating
> > > > >> > > > >> > > > in
> > > > >> > > > >> > > > > > > > > transaction
> > > > >> > > > >> > > > > > > > > > >> > (may
> > > > >> > > > >> > > > > > > > > > >> > >> be approximate). 0 - default
> > > value." is
> > > > >> > > needed.
> > > > >> > > > >> Does
> > > > >> > > > >> > > it
> > > > >> > > > >> > > > > > > > actually
> > > > >> > > > >> > > > > > > > > do
> > > > >> > > > >> > > > > > > > > > >> > >> anything in our tx protocol?
> > Users
> > > of
> > > > >> > > existing
> > > > >> > > > >> APIs
> > > > >> > > > >> > > are
> > > > >> > > > >> > > > > > > already
> > > > >> > > > >> > > > > > > > > > >> confused
> > > > >> > > > >> > > > > > > > > > >> > >> by
> > > > >> > > > >> > > > > > > > > > >> > >> this parameter, if we could get
> > > rid of
> > > > >> it in
> > > > >> > > > >> thin
> > > > >> > > > >> > > > client
> > > > >> > > > >> > > > > > > > > protocol it
> > > > >> > > > >> > > > > > > > > > >> > would
> > > > >> > > > >> > > > > > > > > > >> > >> be nice clean-up.
> > > > >> > > > >> > > > > > > > > > >> > >>
> > > > >> > > > >> > > > > > > > > > >> > >> Regards,
> > > > >> > > > >> > > > > > > > > > >> > >> --
> > > > >> > > > >> > > > > > > > > > >> > >> Ilya Kasnacheev
> > > > >> > > > >> > > > > > > > > > >> > >>
> > > > >> > > > >> > > > > > > > > > >> > >>
> > > > >> > > > >> > > > > > > > > > >> > >> вт, 2 апр. 2019 г. в 09:55,
> Pavel
> > > > >> Tupitsyn <
> > > > >> > > > >> > > > > > > > ptupit...@apache.org
> > > > >> > > > >> > > > > > > > > >:
> > > > >> > > > >> > > > > > > > > > >> > >>
> > > > >> > > > >> > > > > > > > > > >> > >> > Alex,
> > > > >> > > > >> > > > > > > > > > >> > >> >
> > > > >> > > > >> > > > > > > > > > >> > >> > > now we can only support one
> > > active
> > > > >> > > > >> transaction
> > > > >> > > > >> > > per
> > > > >> > > > >> > > > > > > > connection
> > > > >> > > > >> > > > > > > > > > >> > >> >
> > > > >> > > > >> > > > > > > > > > >> > >> > I totally understand
> > server-side
> > > and
> > > > >> > > protocol
> > > > >> > > > >> > > > limitations
> > > > >> > > > >> > > > > > > > that
> > > > >> > > > >> > > > > > > > > are
> > > > >> > > > >> > > > > > > > > > >> > >> causing
> > > > >> > > > >> > > > > > > > > > >> > >> > this.
> > > > >> > > > >> > > > > > > > > > >> > >> > But I have no idea how to
> > support
> > > > >> this in
> > > > >> > > > >> .NET Thin
> > > > >> > > > >> > > > > > Client,
> > > > >> > > > >> > > > > > > > for
> > > > >> > > > >> > > > > > > > > > >> > example.
> > > > >> > > > >> > > > > > > > > > >> > >> >
> > > > >> > > > >> > > > > > > > > > >> > >> > It is thread-safe and can
> > handle
> > > > >> multiple
> > > > >> > > > >> async
> > > > >> > > > >> > > > > > operations
> > > > >> > > > >> > > > > > > in
> > > > >> > > > >> > > > > > > > > > >> > parallel.
> > > > >> > > > >> > > > > > > > > > >> > >> > But with TX support we have
> to
> > > > >> somehow
> > > > >> > > switch
> > > > >> > > > >> to
> > > > >> > > > >> > > > > > > > > single-threaded
> > > > >> > > > >> > > > > > > > > > >> mode
> > > > >> > > > >> > > > > > > > > > >> > to
> > > > >> > > > >> > > > > > > > > > >> > >> > avoid unexpected effects.
> > > > >> > > > >> > > > > > > > > > >> > >> >
> > > > >> > > > >> > > > > > > > > > >> > >> > Any ideas?
> > > > >> > > > >> > > > > > > > > > >> > >> >
> > > > >> > > > >> > > > > > > > > > >> > >> >
> > > > >> > > > >> > > > > > > > > > >> > >> > On Mon, Apr 1, 2019 at 6:38
> PM
> > > Alex
> > > > >> > > Plehanov <
> > > > >> > > > >> > > > > > > > > > >> plehanov.a...@gmail.com
> > > > >> > > > >> > > > > > > > > > >> > >
> > > > >> > > > >> > > > > > > > > > >> > >> > wrote:
> > > > >> > > > >> > > > > > > > > > >> > >> >
> > > > >> > > > >> > > > > > > > > > >> > >> > > Dmitriy, thank you!
> > > > >> > > > >> > > > > > > > > > >> > >> > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > Guys, I've created the IEP
> > [1]
> > > on
> > > > >> wiki,
> > > > >> > > > >> please
> > > > >> > > > >> > > > have a
> > > > >> > > > >> > > > > > > look.
> > > > >> > > > >> > > > > > > > > > >> > >> > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > [1]
> > > > >> > > > >> > > > > > > > > > >> > >> > >
> > > > >> > > > >> > > > > > > > > > >> > >> > >
> > > > >> > > > >> > > > > > > > > > >> > >> >
> > > > >> > > > >> > > > > > > > > > >> > >>
> > > > >> > > > >> > > > > > > > > > >> >
> > > > >> > > > >> > > > > > > > > > >>
> > > > >> > > > >> > > > > > > > >
> > > > >> > > > >> > > > > > > >
> > > > >> > > > >> > > > > > >
> > > > >> > > > >> > > > > >
> > > > >> > > > >> > > >
> > > > >> > > > >> > >
> > > > >> > > > >>
> > > > >> > >
> > > > >>
> > >
> >
> https://cwiki.apache.org/confluence/display/IGNITE/IEP-34+Thin+client%3A+transactions+support
> > > > >> > > > >> > > > > > > > > > >> > >> > >
> > > > >> > > > >> > > > > > > > > > >> > >> > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > чт, 28 мар. 2019 г. в
> 14:33,
> > > > >> Dmitriy
> > > > >> > > Pavlov
> > > > >> > > > >> <
> > > > >> > > > >> > > > > > > > > dpav...@apache.org
> > > > >> > > > >> > > > > > > > > > >> >:
> > > > >> > > > >> > > > > > > > > > >> > >> > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > Hi,
> > > > >> > > > >> > > > > > > > > > >> > >> > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > I've added permissions to
> > > account
> > > > >> > > > >> plehanov.alex
> > > > >> > > > >> > > > > > > > > > >> > >> > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > Recently Infra integrated
> > > Apache
> > > > >> LDAP
> > > > >> > > with
> > > > >> > > > >> > > > > > confluence,
> > > > >> > > > >> > > > > > > so
> > > > >> > > > >> > > > > > > > > it is
> > > > >> > > > >> > > > > > > > > > >> > >> > possible
> > > > >> > > > >> > > > > > > > > > >> > >> > > to
> > > > >> > > > >> > > > > > > > > > >> > >> > > > login using Apache
> > > credentials.
> > > > >> > > Probably
> > > > >> > > > >> we can
> > > > >> > > > >> > > > ask
> > > > >> > > > >> > > > > > > infra
> > > > >> > > > >> > > > > > > > > if
> > > > >> > > > >> > > > > > > > > > >> extra
> > > > >> > > > >> > > > > > > > > > >> > >> > > > permissions to edit pages
> > > should
> > > > >> be
> > > > >> > > added
> > > > >> > > > >> for
> > > > >> > > > >> > > > > > > committers.
> > > > >> > > > >> > > > > > > > > > >> > >> > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > Sincerely,
> > > > >> > > > >> > > > > > > > > > >> > >> > > > Dmitriy Pavlov
> > > > >> > > > >> > > > > > > > > > >> > >> > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > ср, 27 мар. 2019 г. в
> > 13:37,
> > > Alex
> > > > >> > > > >> Plehanov <
> > > > >> > > > >> > > > > > > > > > >> > plehanov.a...@gmail.com
> > > > >> > > > >> > > > > > > > > > >> > >> >:
> > > > >> > > > >> > > > > > > > > > >> > >> > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > Vladimir,
> > > > >> > > > >> > > > > > > > > > >> > >> > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > About current tx: ok,
> > then
> > > we
> > > > >> don't
> > > > >> > > > >> need tx()
> > > > >> > > > >> > > > > > method
> > > > >> > > > >> > > > > > > in
> > > > >> > > > >> > > > > > > > > the
> > > > >> > > > >> > > > > > > > > > >> > >> interface
> > > > >> > > > >> > > > > > > > > > >> > >> > > at
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > all (the same cached
> > > > >> transaction
> > > > >> > > info
> > > > >> > > > >> user
> > > > >> > > > >> > > can
> > > > >> > > > >> > > > > > store
> > > > >> > > > >> > > > > > > by
> > > > >> > > > >> > > > > > > > > > >> > himself).
> > > > >> > > > >> > > > > > > > > > >> > >> > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > About decoupling
> > > transactions
> > > > >> from
> > > > >> > > > >> threads on
> > > > >> > > > >> > > > the
> > > > >> > > > >> > > > > > > > server
> > > > >> > > > >> > > > > > > > > > >> side:
> > > > >> > > > >> > > > > > > > > > >> > for
> > > > >> > > > >> > > > > > > > > > >> > >> > now,
> > > > >> > > > >> > > > > > > > > > >> > >> > > > we
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > can start with
> > > > >> thread-per-connection
> > > > >> > > > >> approach
> > > > >> > > > >> > > > (we
> > > > >> > > > >> > > > > > > only
> > > > >> > > > >> > > > > > > > > can
> > > > >> > > > >> > > > > > > > > > >> > support
> > > > >> > > > >> > > > > > > > > > >> > >> > one
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > active transaction per
> > > > >> connection,
> > > > >> > > see
> > > > >> > > > >> below,
> > > > >> > > > >> > > > so we
> > > > >> > > > >> > > > > > > > need
> > > > >> > > > >> > > > > > > > > one
> > > > >> > > > >> > > > > > > > > > >> > >> > additional
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > dedicated thread for
> each
> > > > >> connection
> > > > >> > > > >> with
> > > > >> > > > >> > > > active
> > > > >> > > > >> > > > > > > > > > >> transaction),
> > > > >> > > > >> > > > > > > > > > >> > and
> > > > >> > > > >> > > > > > > > > > >> > >> > > later
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > change server-side
> > > internals to
> > > > >> > > process
> > > > >> > > > >> > > client
> > > > >> > > > >> > > > > > > > > transactions
> > > > >> > > > >> > > > > > > > > > >> in
> > > > >> > > > >> > > > > > > > > > >> > any
> > > > >> > > > >> > > > > > > > > > >> > >> > > server
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > thread (not dedicated
> to
> > > this
> > > > >> > > > >> connection).
> > > > >> > > > >> > > This
> > > > >> > > > >> > > > > > > change
> > > > >> > > > >> > > > > > > > > will
> > > > >> > > > >> > > > > > > > > > >> not
> > > > >> > > > >> > > > > > > > > > >> > >> > affect
> > > > >> > > > >> > > > > > > > > > >> > >> > > > the
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > thin client protocol,
> it
> > > only
> > > > >> > > affects
> > > > >> > > > >> the
> > > > >> > > > >> > > > server
> > > > >> > > > >> > > > > > > side.
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > In any case, we can't
> > > support
> > > > >> > > concurrent
> > > > >> > > > >> > > > > > transactions
> > > > >> > > > >> > > > > > > > per
> > > > >> > > > >> > > > > > > > > > >> > >> connection
> > > > >> > > > >> > > > > > > > > > >> > >> > on
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > the client side without
> > > > >> fundamental
> > > > >> > > > >> changes
> > > > >> > > > >> > > to
> > > > >> > > > >> > > > the
> > > > >> > > > >> > > > > > > > > current
> > > > >> > > > >> > > > > > > > > > >> > >> protocol
> > > > >> > > > >> > > > > > > > > > >> > >> > > > (cache
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > operation doesn't bound
> > to
> > > > >> > > transaction
> > > > >> > > > >> or
> > > > >> > > > >> > > > thread
> > > > >> > > > >> > > > > > and
> > > > >> > > > >> > > > > > > > the
> > > > >> > > > >> > > > > > > > > > >> server
> > > > >> > > > >> > > > > > > > > > >> > >> > doesn't
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > know which thread on
> the
> > > client
> > > > >> > > side do
> > > > >> > > > >> this
> > > > >> > > > >> > > > cache
> > > > >> > > > >> > > > > > > > > > >> operation).
> > > > >> > > > >> > > > > > > > > > >> > In
> > > > >> > > > >> > > > > > > > > > >> > >> my
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > opinion, if a user
> wants
> > > to use
> > > > >> > > > >> concurrent
> > > > >> > > > >> > > > > > > > transactions,
> > > > >> > > > >> > > > > > > > > he
> > > > >> > > > >> > > > > > > > > > >> must
> > > > >> > > > >> > > > > > > > > > >> > >> use
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > different connections
> > from
> > > a
> > > > >> > > connection
> > > > >> > > > >> pool.
> > > > >> > > > >> > > > > > > > > > >> > >> > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > About semantics of
> > > > >> suspend/resume
> > > > >> > > on the
> > > > >> > > > >> > > > > > client-side:
> > > > >> > > > >> > > > > > > > > it's
> > > > >> > > > >> > > > > > > > > > >> > >> absolutely
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > different than
> > server-side
> > > > >> > > semantics (we
> > > > >> > > > >> > > don't
> > > > >> > > > >> > > > need
> > > > >> > > > >> > > > > > > to
> > > > >> > > > >> > > > > > > > do
> > > > >> > > > >> > > > > > > > > > >> > >> > > suspend/resume
> > > > >> > > > >> > > > > > > > > > >> > >> > > > to
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > pass transaction
> between
> > > > >> threads on
> > > > >> > > the
> > > > >> > > > >> > > > > > client-side),
> > > > >> > > > >> > > > > > > > but
> > > > >> > > > >> > > > > > > > > > >> can't
> > > > >> > > > >> > > > > > > > > > >> > be
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > implemented efficiently
> > > without
> > > > >> > > > >> implemented
> > > > >> > > > >> > > > > > > > > suspend/resume on
> > > > >> > > > >> > > > > > > > > > >> > >> > > > server-side.
> > > > >> > > > >> > > > > > > > > > >> > >> > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > Can anyone give me
> > > permissions
> > > > >> to
> > > > >> > > > >> create IEP
> > > > >> > > > >> > > on
> > > > >> > > > >> > > > > > > Apache
> > > > >> > > > >> > > > > > > > > wiki?
> > > > >> > > > >> > > > > > > > > > >> > >> > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > ср, 27 мар. 2019 г. в
> > > 11:59,
> > > > >> > > Vladimir
> > > > >> > > > >> Ozerov
> > > > >> > > > >> > > <
> > > > >> > > > >> > > > > > > > > > >> > >> voze...@gridgain.com>:
> > > > >> > > > >> > > > > > > > > > >> > >> > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > Hi Alex,
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > My comments was only
> > > about
> > > > >> the
> > > > >> > > > >> protocol.
> > > > >> > > > >> > > > Getting
> > > > >> > > > >> > > > > > > > > current
> > > > >> > > > >> > > > > > > > > > >> info
> > > > >> > > > >> > > > > > > > > > >> > >> about
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > transaction should be
> > > > >> handled by
> > > > >> > > the
> > > > >> > > > >> client
> > > > >> > > > >> > > > > > itself.
> > > > >> > > > >> > > > > > > > It
> > > > >> > > > >> > > > > > > > > is
> > > > >> > > > >> > > > > > > > > > >> not
> > > > >> > > > >> > > > > > > > > > >> > >> > > protocl's
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > concern. Same about
> > other
> > > > >> APIs and
> > > > >> > > > >> behavior
> > > > >> > > > >> > > > in
> > > > >> > > > >> > > > > > case
> > > > >> > > > >> > > > > > > > > another
> > > > >> > > > >> > > > > > > > > > >> > >> > > transaction
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > is
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > attempted from the
> same
> > > > >> thread.
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > Putting protocol
> aside,
> > > > >> > > transaction
> > > > >> > > > >> support
> > > > >> > > > >> > > > is
> > > > >> > > > >> > > > > > > > > complicated
> > > > >> > > > >> > > > > > > > > > >> > >> matter.
> > > > >> > > > >> > > > > > > > > > >> > >> > I
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > would
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > propose to route
> > through
> > > IEP
> > > > >> and
> > > > >> > > wide
> > > > >> > > > >> > > > community
> > > > >> > > > >> > > > > > > > > > >> discussion. We
> > > > >> > > > >> > > > > > > > > > >> > >> need
> > > > >> > > > >> > > > > > > > > > >> > >> > > to
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > review API and
> > semantics
> > > very
> > > > >> > > > >> carefully,
> > > > >> > > > >> > > > taking
> > > > >> > > > >> > > > > > > > > > >> SUSPEND/RESUME
> > > > >> > > > >> > > > > > > > > > >> > >> in
> > > > >> > > > >> > > > > > > > > > >> > >> > > > count.
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > Also I do not see how
> > we
> > > > >> support
> > > > >> > > > >> client
> > > > >> > > > >> > > > > > > transactions
> > > > >> > > > >> > > > > > > > > > >> > efficiently
> > > > >> > > > >> > > > > > > > > > >> > >> > > > without
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > decoupling
> transactions
> > > from
> > > > >> > > threads
> > > > >> > > > >> on the
> > > > >> > > > >> > > > > > server
> > > > >> > > > >> > > > > > > > side
> > > > >> > > > >> > > > > > > > > > >> first.
> > > > >> > > > >> > > > > > > > > > >> > >> > > Because
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > without it you will
> > need
> > > a
> > > > >> > > dedicated
> > > > >> > > > >> server
> > > > >> > > > >> > > > > > thread
> > > > >> > > > >> > > > > > > > for
> > > > >> > > > >> > > > > > > > > > >> every
> > > > >> > > > >> > > > > > > > > > >> > >> > client's
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > transaction which is
> > slow
> > > > >> and may
> > > > >> > > even
> > > > >> > > > >> > > crash
> > > > >> > > > >> > > > the
> > > > >> > > > >> > > > > > > > > server.
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > Vladimir.
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > On Wed, Mar 27, 2019
> at
> > > > >> 11:44 AM
> > > > >> > > Alex
> > > > >> > > > >> > > > Plehanov <
> > > > >> > > > >> > > > > > > > > > >> > >> > > > plehanov.a...@gmail.com>
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > wrote:
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > Vladimir, what if
> we
> > > want
> > > > >> to get
> > > > >> > > > >> current
> > > > >> > > > >> > > > > > > > transaction
> > > > >> > > > >> > > > > > > > > info
> > > > >> > > > >> > > > > > > > > > >> > >> (tx()
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > method)?
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > Does close() method
> > > mapped
> > > > >> to
> > > > >> > > > >> > > > TX_END(rollback)?
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > For example, this
> > code:
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > try(tx =
> txStart()) {
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > >     tx.commit();
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > }
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > Will produce:
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > TX_START
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > TX_END(commit)
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > TX_END(rollback)
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > Am I understand you
> > > right?
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > About xid. There is
> > yet
> > > > >> another
> > > > >> > > > >> proposal.
> > > > >> > > > >> > > > Use
> > > > >> > > > >> > > > > > > some
> > > > >> > > > >> > > > > > > > > unique
> > > > >> > > > >> > > > > > > > > > >> > per
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > connection
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > id
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > (integer, simple
> > > counter)
> > > > >> for
> > > > >> > > > >> identifying
> > > > >> > > > >> > > > the
> > > > >> > > > >> > > > > > > > > > >> transaction on
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > commit/rollback
> > > message.
> > > > >> The
> > > > >> > > client
> > > > >> > > > >> gets
> > > > >> > > > >> > > > this
> > > > >> > > > >> > > > > > id
> > > > >> > > > >> > > > > > > > > from the
> > > > >> > > > >> > > > > > > > > > >> > >> server
> > > > >> > > > >> > > > > > > > > > >> > >> > > with
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > transaction info
> and
> > > sends
> > > > >> it
> > > > >> > > back
> > > > >> > > > >> to the
> > > > >> > > > >> > > > > > server
> > > > >> > > > >> > > > > > > > when
> > > > >> > > > >> > > > > > > > > > >> trying
> > > > >> > > > >> > > > > > > > > > >> > >> to
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > commit/rollback
> > > > >> transaction.
> > > > >> > > This
> > > > >> > > > >> id is
> > > > >> > > > >> > > not
> > > > >> > > > >> > > > > > shown
> > > > >> > > > >> > > > > > > > to
> > > > >> > > > >> > > > > > > > > > >> users.
> > > > >> > > > >> > > > > > > > > > >> > >> But
> > > > >> > > > >> > > > > > > > > > >> > >> > > also
> > > > >> > > > >> > > > > > > > > > >> > >> > > > we
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > can
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > pass from server to
> > > client
> > > > >> real
> > > > >> > > > >> > > > transaction id
> > > > >> > > > >> > > > > > > > (xid)
> > > > >> > > > >> > > > > > > > > with
> > > > >> > > > >> > > > > > > > > > >> > >> > > transaction
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > info
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > for diagnostic
> > > purposes.
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > And one more
> > question:
> > > what
> > > > >> > > should
> > > > >> > > > >> we do
> > > > >> > > > >> > > > if the
> > > > >> > > > >> > > > > > > > > client
> > > > >> > > > >> > > > > > > > > > >> > starts
> > > > >> > > > >> > > > > > > > > > >> > >> a
> > > > >> > > > >> > > > > > > > > > >> > >> > new
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > transaction without
> > > ending
> > > > >> the
> > > > >> > > old
> > > > >> > > > >> one?
> > > > >> > > > >> > > > Should
> > > > >> > > > >> > > > > > we
> > > > >> > > > >> > > > > > > > > end the
> > > > >> > > > >> > > > > > > > > > >> > old
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > transaction
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > implicitly
> (rollback)
> > > or
> > > > >> throw
> > > > >> > > an
> > > > >> > > > >> > > > exception to
> > > > >> > > > >> > > > > > > the
> > > > >> > > > >> > > > > > > > > > >> client?
> > > > >> > > > >> > > > > > > > > > >> > In
> > > > >> > > > >> > > > > > > > > > >> > >> my
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > opinion,
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > the first option is
> > > > >> better. For
> > > > >> > > > >> example,
> > > > >> > > > >> > > > if we
> > > > >> > > > >> > > > > > > got
> > > > >> > > > >> > > > > > > > a
> > > > >> > > > >> > > > > > > > > > >> > >> previously
> > > > >> > > > >> > > > > > > > > > >> > >> > > used
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > connection from the
> > > > >> connection
> > > > >> > > > >> pool, we
> > > > >> > > > >> > > > should
> > > > >> > > > >> > > > > > > not
> > > > >> > > > >> > > > > > > > > worry
> > > > >> > > > >> > > > > > > > > > >> > about
> > > > >> > > > >> > > > > > > > > > >> > >> > any
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > uncompleted
> > transaction
> > > > >> started
> > > > >> > > by
> > > > >> > > > >> the
> > > > >> > > > >> > > > previous
> > > > >> > > > >> > > > > > > > user
> > > > >> > > > >> > > > > > > > > of
> > > > >> > > > >> > > > > > > > > > >> this
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > connection.
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > ср, 27 мар. 2019
> г. в
> > > > >> 11:02,
> > > > >> > > > >> Vladimir
> > > > >> > > > >> > > > Ozerov <
> > > > >> > > > >> > > > > > > > > > >> > >> > voze...@gridgain.com
> > > > >> > > > >> > > > > > > > > > >> > >> > > >:
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > As far as
> > > > >> > > > >> SUSPEND/RESUME/SAVEPOINT - we
> > > > >> > > > >> > > > do
> > > > >> > > > >> > > > > > not
> > > > >> > > > >> > > > > > > > > support
> > > > >> > > > >> > > > > > > > > > >> > them
> > > > >> > > > >> > > > > > > > > > >> > >> > yet,
> > > > >> > > > >> > > > > > > > > > >> > >> > > > and
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > adding
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > them in future
> > > should not
> > > > >> > > > >> conflict with
> > > > >> > > > >> > > > > > simple
> > > > >> > > > >> > > > > > > > > > >> START/END
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > infrastructure.
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > On Wed, Mar 27,
> > 2019
> > > at
> > > > >> 11:00
> > > > >> > > AM
> > > > >> > > > >> > > Vladimir
> > > > >> > > > >> > > > > > > Ozerov
> > > > >> > > > >> > > > > > > > <
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > voze...@gridgain.com
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > wrote:
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > > Hi Alex,
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > > I am not sure
> we
> > > need 5
> > > > >> > > > >> commands.
> > > > >> > > > >> > > > Wouldn't
> > > > >> > > > >> > > > > > it
> > > > >> > > > >> > > > > > > > be
> > > > >> > > > >> > > > > > > > > > >> enough
> > > > >> > > > >> > > > > > > > > > >> > to
> > > > >> > > > >> > > > > > > > > > >> > >> > have
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > only
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > two?
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > > START - accepts
> > > > >> optional
> > > > >> > > > >> parameters,
> > > > >> > > > >> > > > > > returns
> > > > >> > > > >> > > > > > > > > > >> transaction
> > > > >> > > > >> > > > > > > > > > >> > >> info
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > > END - provides
> > > commit
> > > > >> flag,
> > > > >> > > > >> returns
> > > > >> > > > >> > > > void
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > > Vladimir.
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > > On Wed, Mar 27,
> > > 2019 at
> > > > >> > > 8:26 AM
> > > > >> > > > >> Alex
> > > > >> > > > >> > > > > > > Plehanov <
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > >
> > plehanov.a...@gmail.com
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > > wrote:
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> Sergey, yes,
> the
> > > > >> close is
> > > > >> > > > >> something
> > > > >> > > > >> > > > like
> > > > >> > > > >> > > > > > > > silent
> > > > >> > > > >> > > > > > > > > > >> > rollback.
> > > > >> > > > >> > > > > > > > > > >> > >> > But
> > > > >> > > > >> > > > > > > > > > >> > >> > > we
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > can
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> also implement
> > > this
> > > > >> on the
> > > > >> > > > >> client
> > > > >> > > > >> > > > side,
> > > > >> > > > >> > > > > > just
> > > > >> > > > >> > > > > > > > > using
> > > > >> > > > >> > > > > > > > > > >> > >> rollback
> > > > >> > > > >> > > > > > > > > > >> > >> > > and
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > ignoring
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> errors in the
> > > > >> response.
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >>
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> ср, 27 мар.
> 2019
> > > г. в
> > > > >> > > 00:04,
> > > > >> > > > >> Sergey
> > > > >> > > > >> > > > > > Kozlov <
> > > > >> > > > >> > > > > > > > > > >> > >> > > > skoz...@gridgain.com
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > >:
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >>
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > Nikolay
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > Am I
> correctly
> > > > >> > > understand you
> > > > >> > > > >> > > > points:
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> >    - close:
> > > rollback
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> >    - commit,
> > > close:
> > > > >> do
> > > > >> > > > >> nothing
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> >    -
> rollback,
> > > > >> close: do
> > > > >> > > > >> what? (I
> > > > >> > > > >> > > > > > suppose
> > > > >> > > > >> > > > > > > > > nothing)
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > Also you
> > assume
> > > that
> > > > >> > > after
> > > > >> > > > >> > > > > > commit/rollback
> > > > >> > > > >> > > > > > > > we
> > > > >> > > > >> > > > > > > > > may
> > > > >> > > > >> > > > > > > > > > >> > need
> > > > >> > > > >> > > > > > > > > > >> > >> to
> > > > >> > > > >> > > > > > > > > > >> > >> > > free
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > some
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > resources on
> > > server
> > > > >> > > > >> node(s)or just
> > > > >> > > > >> > > > do on
> > > > >> > > > >> > > > > > > > > client
> > > > >> > > > >> > > > > > > > > > >> > started
> > > > >> > > > >> > > > > > > > > > >> > >> > TX?
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > On Tue, Mar
> > 26,
> > > > >> 2019 at
> > > > >> > > > >> 10:41 PM
> > > > >> > > > >> > > > Alex
> > > > >> > > > >> > > > > > > > > Plehanov <
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > >
> > > plehanov.a...@gmail.com
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > wrote:
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > Sergey, we
> > > have
> > > > >> the
> > > > >> > > close()
> > > > >> > > > >> > > > method in
> > > > >> > > > >> > > > > > > the
> > > > >> > > > >> > > > > > > > > thick
> > > > >> > > > >> > > > > > > > > > >> > >> client,
> > > > >> > > > >> > > > > > > > > > >> > >> > > it's
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > behavior
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> is
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > slightly
> > > > >> different than
> > > > >> > > > >> > > rollback()
> > > > >> > > > >> > > > > > > method
> > > > >> > > > >> > > > > > > > > (it
> > > > >> > > > >> > > > > > > > > > >> > should
> > > > >> > > > >> > > > > > > > > > >> > >> > > > rollback
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > if
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > the
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > >
> transaction
> > > is not
> > > > >> > > > >> committed and
> > > > >> > > > >> > > > do
> > > > >> > > > >> > > > > > > > nothing
> > > > >> > > > >> > > > > > > > > if
> > > > >> > > > >> > > > > > > > > > >> the
> > > > >> > > > >> > > > > > > > > > >> > >> > > > transaction
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > is
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> already
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > >
> committed).
> > I
> > > > >> think we
> > > > >> > > > >> should
> > > > >> > > > >> > > > support
> > > > >> > > > >> > > > > > > > > > >> > >> try-with-resource
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > semantics
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > in
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> the
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > thin
> client
> > > and
> > > > >> > > > >> OP_TX_CLOSE will
> > > > >> > > > >> > > > be
> > > > >> > > > >> > > > > > > useful
> > > > >> > > > >> > > > > > > > > here.
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > Nikolay,
> > > > >> suspend/resume
> > > > >> > > > >> didn't
> > > > >> > > > >> > > > work
> > > > >> > > > >> > > > > > yet
> > > > >> > > > >> > > > > > > > for
> > > > >> > > > >> > > > > > > > > > >> > >> pessimistic
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > transactions.
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > Also,
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > the main
> > goal
> > > of
> > > > >> > > > >> suspend/resume
> > > > >> > > > >> > > > > > > operations
> > > > >> > > > >> > > > > > > > > is to
> > > > >> > > > >> > > > > > > > > > >> > >> support
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > transaction
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > passing
> > > between
> > > > >> > > threads.
> > > > >> > > > >> In the
> > > > >> > > > >> > > > thin
> > > > >> > > > >> > > > > > > > > client, the
> > > > >> > > > >> > > > > > > > > > >> > >> > > transaction
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > is
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > bound
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> to
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > the client
> > > > >> connection,
> > > > >> > > not
> > > > >> > > > >> > > client
> > > > >> > > > >> > > > > > > thread.
> > > > >> > > > >> > > > > > > > I
> > > > >> > > > >> > > > > > > > > > >> think
> > > > >> > > > >> > > > > > > > > > >> > >> > passing
> > > > >> > > > >> > > > > > > > > > >> > >> > > a
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> transaction
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > between
> > > different
> > > > >> > > client
> > > > >> > > > >> > > > connections
> > > > >> > > > >> > > > > > is
> > > > >> > > > >> > > > > > > > not
> > > > >> > > > >> > > > > > > > > a
> > > > >> > > > >> > > > > > > > > > >> very
> > > > >> > > > >> > > > > > > > > > >> > >> > useful
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > case.
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > вт, 26
> мар.
> > > 2019
> > > > >> г. в
> > > > >> > > > >> 22:17,
> > > > >> > > > >> > > > Nikolay
> > > > >> > > > >> > > > > > > > > Izhikov <
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > nizhi...@apache.org
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > >:
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > Hello,
> > Alex.
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > We also
> > have
> > > > >> suspend
> > > > >> > > and
> > > > >> > > > >> > > resume
> > > > >> > > > >> > > > > > > > > operations.
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > I think
> we
> > > > >> should
> > > > >> > > > >> support them
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > вт, 26
> > марта
> > > > >> 2019 г.,
> > > > >> > > > >> 22:07
> > > > >> > > > >> > > > Sergey
> > > > >> > > > >> > > > > > > > Kozlov
> > > > >> > > > >> > > > > > > > > <
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > skoz...@gridgain.com
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > >:
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > Hi
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > Looks
> > > like I
> > > > >> missed
> > > > >> > > > >> > > something
> > > > >> > > > >> > > > but
> > > > >> > > > >> > > > > > > why
> > > > >> > > > >> > > > > > > > we
> > > > >> > > > >> > > > > > > > > > >> need
> > > > >> > > > >> > > > > > > > > > >> > >> > > > OP_TX_CLOSE
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> operation?
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > Also I
> > > > >> suggest to
> > > > >> > > > >> reserve a
> > > > >> > > > >> > > > code
> > > > >> > > > >> > > > > > for
> > > > >> > > > >> > > > > > > > > > >> SAVEPOINT
> > > > >> > > > >> > > > > > > > > > >> > >> > > operation
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > which
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> very
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > useful
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > to
> > > understand
> > > > >> where
> > > > >> > > > >> > > > transaction
> > > > >> > > > >> > > > > > has
> > > > >> > > > >> > > > > > > > been
> > > > >> > > > >> > > > > > > > > > >> rolled
> > > > >> > > > >> > > > > > > > > > >> > >> back
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > On
> Tue,
> > > Mar
> > > > >> 26,
> > > > >> > > 2019
> > > > >> > > > >> at 6:07
> > > > >> > > > >> > > > PM
> > > > >> > > > >> > > > > > Alex
> > > > >> > > > >> > > > > > > > > > >> Plehanov <
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> >
> > > > >> plehanov.a...@gmail.com
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > wrote:
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> Hello
> > > > >> Igniters!
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > I
> want
> > > to
> > > > >> pick
> > > > >> > > up the
> > > > >> > > > >> > > ticket
> > > > >> > > > >> > > > > > > > > IGNITE-7369
> > > > >> > > > >> > > > > > > > > > >> and
> > > > >> > > > >> > > > > > > > > > >> > >> add
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > transactions
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > support
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > to
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > our
> > thin
> > > > >> client
> > > > >> > > > >> > > > implementation.
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > I've
> > > looked
> > > > >> at
> > > > >> > > our
> > > > >> > > > >> current
> > > > >> > > > >> > > > > > > > > implementation
> > > > >> > > > >> > > > > > > > > > >> and
> > > > >> > > > >> > > > > > > > > > >> > >> have
> > > > >> > > > >> > > > > > > > > > >> > >> > > > some
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> proposals
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > to
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > support
> > > > >> > > transactions:
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > Add
> > new
> > > > >> > > operations
> > > > >> > > > >> to thin
> > > > >> > > > >> > > > > > client
> > > > >> > > > >> > > > > > > > > > >> protocol:
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > > > >>  OP_TX_GET,
> > > > >> > > 4000,
> > > > >> > > > >> Get
> > > > >> > > > >> > > > current
> > > > >> > > > >> > > > > > > > > > >> transaction
> > > > >> > > > >> > > > > > > > > > >> > >> for
> > > > >> > > > >> > > > > > > > > > >> > >> > > > client
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> connection
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > > > >>  OP_TX_START,
> > > > >> > > > >> 4001,
> > > > >> > > > >> > > > Start a
> > > > >> > > > >> > > > > > new
> > > > >> > > > >> > > > > > > > > > >> > transaction
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > > > >>  OP_TX_COMMIT,
> > > > >> > > > >> 4002,
> > > > >> > > > >> > > > Commit
> > > > >> > > > >> > > > > > > > > transaction
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > > > >> > >  OP_TX_ROLLBACK,
> > > > >> > > > >> 4003,
> > > > >> > > > >> > > > > > Rollback
> > > > >> > > > >> > > > > > > > > > >> > transaction
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > > > >>  OP_TX_CLOSE,
> > > > >> > > > >> 4004,
> > > > >> > > > >> > > Close
> > > > >> > > > >> > > > > > > > > transaction
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > From
> > the
> > > > >> client
> > > > >> > > side
> > > > >> > > > >> > > (java)
> > > > >> > > > >> > > > new
> > > > >> > > > >> > > > > > > > > interfaces
> > > > >> > > > >> > > > > > > > > > >> > >> will be
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > added:
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> public
> > > > >> interface
> > > > >> > > > >> > > > > > > ClientTransactions
> > > > >> > > > >> > > > > > > > {
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > >  public
> > > > >> > > > >> > > ClientTransaction
> > > > >> > > > >> > > > > > > > > txStart();
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > >  public
> > > > >> > > > >> > > ClientTransaction
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > >
> > > > >> txStart(TransactionConcurrency
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > >
> > concurrency,
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > > > >> > > TransactionIsolation
> > > > >> > > > >> > > > isolation);
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > >  public
> > > > >> > > > >> > > ClientTransaction
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > >
> > > > >> txStart(TransactionConcurrency
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > >
> > concurrency,
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > > > >> > > TransactionIsolation
> > > > >> > > > >> > > > isolation,
> > > > >> > > > >> > > > > > > long
> > > > >> > > > >> > > > > > > > > > >> timeout,
> > > > >> > > > >> > > > > > > > > > >> > >> int
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > txSize);
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > >  public
> > > > >> > > > >> > > ClientTransaction
> > > > >> > > > >> > > > > > tx();
> > > > >> > > > >> > > > > > > > //
> > > > >> > > > >> > > > > > > > > Get
> > > > >> > > > >> > > > > > > > > > >> > >> current
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > connection
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > >
> > transaction
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > >  public
> > > > >> > > > >> > > > ClientTransactions
> > > > >> > > > >> > > > > > > > > > >> > withLabel(String
> > > > >> > > > >> > > > > > > > > > >> > >> > lb);
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > }
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> public
> > > > >> interface
> > > > >> > > > >> > > > > > ClientTransaction
> > > > >> > > > >> > > > > > > > > extends
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > AutoCloseable {
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > >  public
> > > > >> > > IgniteUuid
> > > > >> > > > >> > > > xid(); //
> > > > >> > > > >> > > > > > Do
> > > > >> > > > >> > > > > > > > we
> > > > >> > > > >> > > > > > > > > need
> > > > >> > > > >> > > > > > > > > > >> > it?
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > >  public
> > > > >> > > > >> > > > TransactionIsolation
> > > > >> > > > >> > > > > > > > > > >> isolation();
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > >  public
> > > > >> > > > >> > > > > > TransactionConcurrency
> > > > >> > > > >> > > > > > > > > > >> > >> concurrency();
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > >  public
> > > > >> long
> > > > >> > > > >> timeout();
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > >  public
> > > > >> String
> > > > >> > > > >> label();
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > >  public
> > > > >> void
> > > > >> > > > >> commit();
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > >  public
> > > > >> void
> > > > >> > > > >> > > rollback();
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > >  public
> > > > >> void
> > > > >> > > > >> close();
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > }
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > From
> > the
> > > > >> server
> > > > >> > > > >> side, I
> > > > >> > > > >> > > > think
> > > > >> > > > >> > > > > > as a
> > > > >> > > > >> > > > > > > > > first
> > > > >> > > > >> > > > > > > > > > >> step
> > > > >> > > > >> > > > > > > > > > >> > >> > (while
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> transactions
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > > > >> suspend/resume
> > > > >> > > is not
> > > > >> > > > >> > > fully
> > > > >> > > > >> > > > > > > > > implemented)
> > > > >> > > > >> > > > > > > > > > >> we
> > > > >> > > > >> > > > > > > > > > >> > can
> > > > >> > > > >> > > > > > > > > > >> > >> > use
> > > > >> > > > >> > > > > > > > > > >> > >> > > > the
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > same
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > approach
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > as
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > for
> > > JDBC:
> > > > >> add a
> > > > >> > > new
> > > > >> > > > >> worker
> > > > >> > > > >> > > > to
> > > > >> > > > >> > > > > > each
> > > > >> > > > >> > > > > > > > > > >> > >> > > > ClientRequestHandler
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > and
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> process
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > > requests by
> > > > >> this
> > > > >> > > > >> worker if
> > > > >> > > > >> > > > the
> > > > >> > > > >> > > > > > > > > > >> transaction is
> > > > >> > > > >> > > > > > > > > > >> > >> > > started
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> explicitly.
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > > > >> > > ClientRequestHandler
> > > > >> > > > >> is
> > > > >> > > > >> > > > bound to
> > > > >> > > > >> > > > > > > > > client
> > > > >> > > > >> > > > > > > > > > >> > >> > connection,
> > > > >> > > > >> > > > > > > > > > >> > >> > > so
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > there
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> will
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > be
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > 1:1
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > relation
> > > > >> between
> > > > >> > > > >> client
> > > > >> > > > >> > > > > > connection
> > > > >> > > > >> > > > > > > > and
> > > > >> > > > >> > > > > > > > > > >> > thread,
> > > > >> > > > >> > > > > > > > > > >> > >> > which
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > process
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > operations
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > in
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > a
> > > > >> transaction.
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> Also,
> > > there
> > > > >> is a
> > > > >> > > > >> couple of
> > > > >> > > > >> > > > > > issues
> > > > >> > > > >> > > > > > > I
> > > > >> > > > >> > > > > > > > > want
> > > > >> > > > >> > > > > > > > > > >> to
> > > > >> > > > >> > > > > > > > > > >> > >> > discuss:
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > We
> > have
> > > > >> > > overloaded
> > > > >> > > > >> method
> > > > >> > > > >> > > > > > txStart
> > > > >> > > > >> > > > > > > > > with a
> > > > >> > > > >> > > > > > > > > > >> > >> different
> > > > >> > > > >> > > > > > > > > > >> > >> > > set
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > of
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > arguments.
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > Some
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > of
> the
> > > > >> arguments
> > > > >> > > may
> > > > >> > > > >> be
> > > > >> > > > >> > > > missing.
> > > > >> > > > >> > > > > > > To
> > > > >> > > > >> > > > > > > > > pass
> > > > >> > > > >> > > > > > > > > > >> > >> arguments
> > > > >> > > > >> > > > > > > > > > >> > >> > > > with
> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> OP_TX_START
> > > > >> > > > >> > > > > > > > > > >> > >> &
> > > > >> > > > >
> > > > >> > > > >
> > > > >> > >
> > > > >> > >
> > > > >> > >
> > > > >> > > --
> > > > >> > > Best regards,
> > > > >> > > Ivan Pavlukhin
> > > > >> > >
> > > > >>
> > > > >>
> > > > >>
> > > > >> --
> > > > >> Best regards,
> > > > >> Ivan Pavlukhin
> > > > >>
> > > > >
> > >
> > >
> > >
> > > --
> > > Best regards,
> > > Ivan Pavlukhin
> > >
> > >
> >
>

Reply via email to