I've prepared a PR, please have a look:
https://github.com/apache/ignite/pull/9817

On Mon, Feb 7, 2022 at 6:37 PM Ivan Daschinsky <ivanda...@gmail.com> wrote:

> I see potential in this feature, especially if we use something like
> continuous query. Stale clients can consume a lot of resources and it is
> worth kick these clients out.
>
> пн, 7 февр. 2022 г. в 18:25, Pavel Tupitsyn <ptupit...@apache.org>:
>
> > > If we use new approach, we can reduce this timeout. But this can affect
> > old clients.
> >
> > idleTimeout is disabled by default, we are not going to change this.
> >
> > > Also, let's think about that sending heartbeats and interval of sending
> > > heartbeats could be calculated on the server side (i.e. one third of
> idle
> > > timeout) and sent to the client during handshake.
> > > Also we can introduce something like a negotiation mechanism as in
> > > zookeeper.
> >
> > I tend to agree with Maksim here, let's keep it simple and explicit.
> > Log a warning, but don't do anything clever.
> >
> > On Mon, Feb 7, 2022 at 6:15 PM Ivan Daschinsky <ivanda...@gmail.com>
> > wrote:
> >
> > > >> idleTimeout already exists, I don't think we should change the way
> it
> > > works (or did I misunderstand you?)
> > > If we use new approach, we can reduce this timeout. But this can affect
> > old
> > > clients.
> > >
> > >
> > > Also, let's think about that sending heartbeats and interval of sending
> > > heartbeats could be calculated on the server side (i.e. one third of
> idle
> > > timeout) and sent to the client
> > > during handshake.
> > > Also we can introduce something like a negotiation mechanism as in
> > > zookeeper.
> > >
> > >
> > > пн, 7 февр. 2022 г. в 18:05, Pavel Tupitsyn <ptupit...@apache.org>:
> > >
> > > > Igor,
> > > >
> > > > > Maybe clients should pass this information on to the handshake.
> > > >
> > > > Do you think we should log a mismatched timeout warning on the
> server,
> > > not
> > > > on the client?
> > > > Or should we do both?
> > > >
> > > >
> > > > I've updated the proposal with OP_GET_IDLE_TIMEOUT and some other
> > details
> > > > discussed above.
> > > >
> > > > On Mon, Feb 7, 2022 at 5:42 PM Igor Sapego <isap...@apache.org>
> wrote:
> > > >
> > > > > Feature seems useful for me as it makes connection management more
> > > robust
> > > > > and
> > > > > predictable.
> > > > >
> > > > > I agree with Pavel, that we should print warning when heartbeat
> > period
> > > is
> > > > > larger than
> > > > > idle timeout, but I see a problem here as idle timeout is
> configured
> > on
> > > > > server and is not
> > > > > known to clients, while heartbeats configured on clients and their
> > > period
> > > > > is not known
> > > > > to the server. Maybe clients should pass this information on to the
> > > > > handshake.
> > > > >
> > > > > Regarding Python and PHP clients - can not we use some kind of
> timers
> > > to
> > > > > implement
> > > > > this feature?
> > > > >
> > > > > Best Regards,
> > > > > Igor
> > > > >
> > > > >
> > > > > On Mon, Feb 7, 2022 at 5:23 PM Pavel Tupitsyn <
> ptupit...@apache.org>
> > > > > wrote:
> > > > >
> > > > > > Maksim, agree. Let's not be too clever and only log a warning.
> > > > > >
> > > > > > On Mon, Feb 7, 2022 at 5:23 PM Pavel Tupitsyn <
> > ptupit...@apache.org>
> > > > > > wrote:
> > > > > >
> > > > > > > Ivan, idleTimeout already exists, I don't think we should
> change
> > > the
> > > > > way
> > > > > > > it works (or did I misunderstand you?)
> > > > > > >
> > > > > > > Of course, enabling heartbeats means that otherwise idle
> clients
> > > will
> > > > > no
> > > > > > > longer be disconnected by the server.
> > > > > > > I think we should cross-link those properties in the
> > documentation
> > > > and
> > > > > > > explain this behavior.
> > > > > > >
> > > > > > > On Mon, Feb 7, 2022 at 4:39 PM Ivan Daschinsky <
> > > ivanda...@gmail.com>
> > > > > > > wrote:
> > > > > > >
> > > > > > >> >>3. Already implemented: when
> > > > > ClientConnectorConfiguration#idleTimeout
> > > > > > is
> > > > > > >> not zero, server disconnects idle clients
> > > > > > >> >>
> > > > > > >> But I suppose it would be great to have:
> > > > > > >> 1. If client supports keep alive, use idleTimeout
> > > > > > >> 2. If not, do not use it.
> > > > > > >>
> > > > > > >> But I am not sure if it is correct or not.
> > > > > > >>
> > > > > > >> пн, 7 февр. 2022 г. в 16:01, Maksim Timonin <
> > > > timoninma...@apache.org
> > > > > >:
> > > > > > >>
> > > > > > >> > I believe explicit is better than implicit :) Also in case
> of
> > > > > dynamic
> > > > > > >> > calculation of timeout, it can change dynamically, for
> example
> > > > > > >> restarting a
> > > > > > >> > cluster with different configuration should reconfigure
> > clients
> > > > too.
> > > > > > >> Looks
> > > > > > >> > complicated.
> > > > > > >> >
> > > > > > >> > My vote for WARN + javadocs with mention of this issue.
> > > > > > >> >
> > > > > > >> > On Mon, Feb 7, 2022 at 3:51 PM Pavel Tupitsyn <
> > > > ptupit...@apache.org
> > > > > >
> > > > > > >> > wrote:
> > > > > > >> >
> > > > > > >> > > > WDYT, should we add a WARN message for clients that
> > > configure
> > > > > > >> > > > keepAliveTimeout greater than idleTimeout on the server
> > > side?
> > > > > > >> > >
> > > > > > >> > > I think we should either log a WARN, or retrieve
> idleTimeout
> > > > from
> > > > > > >> server
> > > > > > >> > > and configure heartbeatTimeout accordingly (e.g. divide by
> > 2).
> > > > > > >> > > Thoughts?
> > > > > > >> > >
> > > > > > >> > > On Mon, Feb 7, 2022 at 3:14 PM Maksim Timonin <
> > > > > > >> timoninma...@apache.org>
> > > > > > >> > > wrote:
> > > > > > >> > >
> > > > > > >> > > > Hi Pavel,
> > > > > > >> > > >
> > > > > > >> > > > Thanks for the links. Yes, I forgot that the flag of
> > changed
> > > > > > >> topology
> > > > > > >> > is
> > > > > > >> > > > lazy. Also I missed that the keepAlive setting is
> > configured
> > > > on
> > > > > > the
> > > > > > >> > > client
> > > > > > >> > > > side (alternatively to idleTimeout that is on the server
> > > > side).
> > > > > > >> > > >
> > > > > > >> > > > Now I understand, this feature can be helpful then.
> Every
> > > > client
> > > > > > can
> > > > > > >> > > > configure itself in case it's possible to be idle
> > sometimes,
> > > > and
> > > > > > >> choose
> > > > > > >> > > > an appropriate timeout by itself too. And by default the
> > > > feature
> > > > > > >> should
> > > > > > >> > > be
> > > > > > >> > > > disabled.
> > > > > > >> > > >
> > > > > > >> > > > WDYT, should we add a WARN message for clients that
> > > configure
> > > > > > >> > > > keepAliveTimeout greater than idleTimeout on the server
> > > side?
> > > > > > >> > > >
> > > > > > >> > > >
> > > > > > >> > > >
> > > > > > >> > > > On Mon, Feb 7, 2022 at 1:05 PM Pavel Tupitsyn <
> > > > > > ptupit...@apache.org
> > > > > > >> >
> > > > > > >> > > > wrote:
> > > > > > >> > > >
> > > > > > >> > > > > Ivan,
> > > > > > >> > > > >
> > > > > > >> > > > > I suggest the following:
> > > > > > >> > > > >
> > > > > > >> > > > > 1. Server sends KEEP_ALIVE feature flag, which means
> it
> > > > > accepts
> > > > > > >> > > > > OP_KEEP_ALIVE empty message
> > > > > > >> > > > > 2. Client sends OP_KEEP_ALIVE when the connection is
> > idle
> > > > for
> > > > > a
> > > > > > >> > > > > certain period of time
> > > > > > >> > > > > 3. Already implemented: when
> > > > > > >> ClientConnectorConfiguration#idleTimeout
> > > > > > >> > > is
> > > > > > >> > > > > not zero, server disconnects idle clients
> > > > > > >> > > > >
> > > > > > >> > > > > This way we don't need server->client keepalives, as
> you
> > > > > > correctly
> > > > > > >> > > noted.
> > > > > > >> > > > >
> > > > > > >> > > > > On Mon, Feb 7, 2022 at 12:43 PM Ivan Daschinsky <
> > > > > > >> ivanda...@gmail.com
> > > > > > >> > >
> > > > > > >> > > > > wrote:
> > > > > > >> > > > >
> > > > > > >> > > > > > Pavel, I suppose that ideally:
> > > > > > >> > > > > > 1. Client send in handshake flag, that it supports
> > > > > KEEP_ALIVE
> > > > > > >> > feature
> > > > > > >> > > > and
> > > > > > >> > > > > > server takes it into account.
> > > > > > >> > > > > > 2. Each request of client can be considered as
> > > keep-alive
> > > > > > ping.
> > > > > > >> > > > > > 3. Client send failure should be processed using
> retry
> > > > > policy.
> > > > > > >> > > > > > 4. Server should not send keep-alive packets, it is
> > > > > redundant,
> > > > > > >> but
> > > > > > >> > > > server
> > > > > > >> > > > > > should track requests from client and if there is no
> > > > > requests
> > > > > > >> from
> > > > > > >> > > > client
> > > > > > >> > > > > > with KEEP_ALIVE feature,
> > > > > > >> > > > > > automatically close connection and free resources.
> > > > > > >> > > > > >
> > > > > > >> > > > > > Similar approach is used in zookeeper clients.
> > > > > > >> > > > > >
> > > > > > >> > > > > > пн, 7 февр. 2022 г. в 12:24, Pavel Tupitsyn <
> > > > > > >> ptupit...@apache.org
> > > > > > >> > >:
> > > > > > >> > > > > >
> > > > > > >> > > > > > > Ivan,
> > > > > > >> > > > > > >
> > > > > > >> > > > > > > Ideally, the check should come from both sides.
> > > > > > >> > > > > > > - Client periodically sends keepalive to server
> > > > > > >> > > > > > > - Server periodically sends keepalive to client
> > > > > > >> > > > > > >
> > > > > > >> > > > > > > Feature flags will be added accordingly, so it is
> > not
> > > > > > >> necessary
> > > > > > >> > to
> > > > > > >> > > > > > > implement this in all thin clients.
> > > > > > >> > > > > > >
> > > > > > >> > > > > > > On Mon, Feb 7, 2022 at 11:43 AM Ivan Daschinsky <
> > > > > > >> > > ivanda...@gmail.com
> > > > > > >> > > > >
> > > > > > >> > > > > > > wrote:
> > > > > > >> > > > > > >
> > > > > > >> > > > > > > > I suppose it is great idea, but this
> functionality
> > > can
> > > > > be
> > > > > > >> hard
> > > > > > >> > to
> > > > > > >> > > > > > > implement
> > > > > > >> > > > > > > > for some platforms. I.e. sync python client or
> php
> > > > > (there
> > > > > > >> is no
> > > > > > >> > > > real
> > > > > > >> > > > > > > > multithreading for python (GIL) and php is
> single
> > > > > threaded
> > > > > > >> by
> > > > > > >> > > > > design).
> > > > > > >> > > > > > > But
> > > > > > >> > > > > > > > for async clients it is not very hard to
> > implement.
> > > > > > >> > Nevertheless,
> > > > > > >> > > > > this
> > > > > > >> > > > > > > > feature should be optional, because of possible
> > > > > technical
> > > > > > >> > > > > limitations.
> > > > > > >> > > > > > > >
> > > > > > >> > > > > > > > Pavel, is this check mostly for client side? Or
> > > > servers
> > > > > > can
> > > > > > >> do
> > > > > > >> > > some
> > > > > > >> > > > > > > actions
> > > > > > >> > > > > > > > if there is no activity from thin client (i.e.
> > > closing
> > > > > > >> context
> > > > > > >> > > and
> > > > > > >> > > > > free
> > > > > > >> > > > > > > > resources such as queries' handles and so on?)
> > > > > > >> > > > > > > >
> > > > > > >> > > > > > > > пн, 7 февр. 2022 г. в 11:09, Pavel Tupitsyn <
> > > > > > >> > > ptupit...@apache.org
> > > > > > >> > > > >:
> > > > > > >> > > > > > > >
> > > > > > >> > > > > > > > > Hi Maksim,
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > > > > half-state is a possible situation when an
> > > Ignite
> > > > > node
> > > > > > >> goes
> > > > > > >> > > > down
> > > > > > >> > > > > or
> > > > > > >> > > > > > > > > somehow removes connection to a thin client
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > > > Half-open state is also possible when, for
> > > example,
> > > > an
> > > > > > >> > > > intermediate
> > > > > > >> > > > > > > > router
> > > > > > >> > > > > > > > > is rebooted [1].
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > > > This is what we seem to have encountered with
> > one
> > > of
> > > > > our
> > > > > > >> > > > customers
> > > > > > >> > > > > -
> > > > > > >> > > > > > > they
> > > > > > >> > > > > > > > > have a stable cluster, and long-living
> (multiple
> > > > days)
> > > > > > >> thin
> > > > > > >> > > > client
> > > > > > >> > > > > > > > > connections which can be idle for some time.
> > > > > > >> > > > > > > > > And only when we send some data on such an
> idle
> > > > > > >> connection do
> > > > > > >> > > we
> > > > > > >> > > > > > > discover
> > > > > > >> > > > > > > > > that it is broken.
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > > > > But with enabled (true by default)
> > > > > partitionAwareness
> > > > > > >> > feature
> > > > > > >> > > > > > clients
> > > > > > >> > > > > > > > can
> > > > > > >> > > > > > > > > be notified about topology changes
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > > > Partition awareness is a "lazy" notification
> in
> > a
> > > > form
> > > > > > of
> > > > > > >> a
> > > > > > >> > > > > response
> > > > > > >> > > > > > > > > message flag [2].
> > > > > > >> > > > > > > > > You won't get one on an idle connection.
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > > > > the connections are removed on the server
> side
> > > by
> > > > > > client
> > > > > > >> > idle
> > > > > > >> > > > > > timeout
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > > > Idle timeout is disabled by default.
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > > > > is it OK to keep such connections alive for
> a
> > > long
> > > > > > time
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > > > I think it is up to the user.
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > > > > in the case of partition awareness features
> it
> > > can
> > > > > > lead
> > > > > > >> to
> > > > > > >> > > > > wasting
> > > > > > >> > > > > > > TCP
> > > > > > >> > > > > > > > > sockets on Ignite nodes, can't it
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > > > Can you please elaborate?
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > > > [1]
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > >
> > > > > > >> > > > > > >
> > > > > > >> > > > > >
> > > > > > >> > > > >
> > > > > > >> > > >
> > > > > > >> > >
> > > > > > >> >
> > > > > > >>
> > > > > >
> > > > >
> > > >
> > >
> >
> https://blog.stephencleary.com/2009/05/detection-of-half-open-dropped.html
> > > > > > >> > > > > > > > > [2]
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > >
> > > > > > >> > > > > > >
> > > > > > >> > > > > >
> > > > > > >> > > > >
> > > > > > >> > > >
> > > > > > >> > >
> > > > > > >> >
> > > > > > >>
> > > > > >
> > > > >
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/IGNITE/IEP-23%3A+Best+Effort+Affinity+for+Thin+Clients
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > > > On Fri, Feb 4, 2022 at 4:01 PM Maksim Timonin
> <
> > > > > > >> > > > > > timoninma...@apache.org
> > > > > > >> > > > > > > >
> > > > > > >> > > > > > > > > wrote:
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > > > > Hi Pavel,
> > > > > > >> > > > > > > > > >
> > > > > > >> > > > > > > > > > Thanks for starting this thread! Can I ask
> > some
> > > > > > >> questions
> > > > > > >> > > here
> > > > > > >> > > > to
> > > > > > >> > > > > > get
> > > > > > >> > > > > > > > the
> > > > > > >> > > > > > > > > > feature more clearly?
> > > > > > >> > > > > > > > > >
> > > > > > >> > > > > > > > > > As I understand it correctly, half-state is
> a
> > > > > possible
> > > > > > >> > > > situation
> > > > > > >> > > > > > when
> > > > > > >> > > > > > > > an
> > > > > > >> > > > > > > > > > Ignite node goes down or somehow removes
> > > > connection
> > > > > > to a
> > > > > > >> > thin
> > > > > > >> > > > > > client.
> > > > > > >> > > > > > > > But
> > > > > > >> > > > > > > > > > with enabled (true by default)
> > > partitionAwareness
> > > > > > >> feature
> > > > > > >> > > > clients
> > > > > > >> > > > > > can
> > > > > > >> > > > > > > > be
> > > > > > >> > > > > > > > > > notified about topology changes. So, there
> are
> > > > > > possible
> > > > > > >> > > cases:
> > > > > > >> > > > > > > > > > 1. ThinClient connects to a single node.
> > > > > > >> > > > > > > > > > 2. Ignite node removes connection from
> itself.
> > > > > > >> > > > > > > > > >
> > > > > > >> > > > > > > > > > I like the idea for the case with a single
> > node,
> > > > as
> > > > > it
> > > > > > >> > helps
> > > > > > >> > > > fail
> > > > > > >> > > > > > > fast.
> > > > > > >> > > > > > > > > > But is it OK to connect a client to a single
> > > node
> > > > > > only?
> > > > > > >> > > > > > > > > >
> > > > > > >> > > > > > > > > > For the second one: you mention that a case
> > for
> > > > the
> > > > > > >> second
> > > > > > >> > > > option
> > > > > > >> > > > > > is
> > > > > > >> > > > > > > > > > "Long-living and mostly idle connections are
> > > > > > especially
> > > > > > >> > > > > susceptible
> > > > > > >> > > > > > > to
> > > > > > >> > > > > > > > > this
> > > > > > >> > > > > > > > > > behavior". If I understand correctly the
> > > > connections
> > > > > > are
> > > > > > >> > > > removed
> > > > > > >> > > > > on
> > > > > > >> > > > > > > the
> > > > > > >> > > > > > > > > > server side by client idle timeout. Can we
> > just
> > > > > > >> configure
> > > > > > >> > the
> > > > > > >> > > > > idle
> > > > > > >> > > > > > > > > timeout
> > > > > > >> > > > > > > > > > for cases where we really need keeping alive
> > > idle
> > > > > > >> > > connections?
> > > > > > >> > > > > Are
> > > > > > >> > > > > > > > there
> > > > > > >> > > > > > > > > > any other cases with unexpectedly dropped
> > > > > connections?
> > > > > > >> > > > > > > > > >
> > > > > > >> > > > > > > > > > I'm wondering is it OK to keep such
> > connections
> > > > > alive
> > > > > > >> for a
> > > > > > >> > > > long
> > > > > > >> > > > > > > time?
> > > > > > >> > > > > > > > > > Also in the case of partition awareness
> > features
> > > > it
> > > > > > can
> > > > > > >> > lead
> > > > > > >> > > to
> > > > > > >> > > > > > > wasting
> > > > > > >> > > > > > > > > TCP
> > > > > > >> > > > > > > > > > sockets on Ignite nodes, can't it?
> > > > > > >> > > > > > > > > >
> > > > > > >> > > > > > > > > > Thanks!
> > > > > > >> > > > > > > > > >
> > > > > > >> > > > > > > > > >
> > > > > > >> > > > > > > > > >
> > > > > > >> > > > > > > > > >
> > > > > > >> > > > > > > > > >
> > > > > > >> > > > > > > > > >
> > > > > > >> > > > > > > > > > On Thu, Feb 3, 2022 at 2:24 PM Pavel
> Tupitsyn
> > <
> > > > > > >> > > > > > ptupit...@apache.org>
> > > > > > >> > > > > > > > > > wrote:
> > > > > > >> > > > > > > > > >
> > > > > > >> > > > > > > > > >> Igniters,
> > > > > > >> > > > > > > > > >>
> > > > > > >> > > > > > > > > >> Please review the proposal to add heartbeat
> > > > > messages
> > > > > > to
> > > > > > >> > the
> > > > > > >> > > > thin
> > > > > > >> > > > > > > > client
> > > > > > >> > > > > > > > > >> protocol (both 2.x and 3.x) and let me know
> > > your
> > > > > > >> thoughts:
> > > > > > >> > > > > > > > > >>
> > > > > > >> > > > > > > > > >>
> > > > > > >> > > > > > > > > >>
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > >
> > > > > > >> > > > > > >
> > > > > > >> > > > > >
> > > > > > >> > > > >
> > > > > > >> > > >
> > > > > > >> > >
> > > > > > >> >
> > > > > > >>
> > > > > >
> > > > >
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/IGNITE/IEP-83+Thin+Client+Keepalive
> > > > > > >> > > > > > > > > >>
> > > > > > >> > > > > > > > > >
> > > > > > >> > > > > > > > >
> > > > > > >> > > > > > > >
> > > > > > >> > > > > > > >
> > > > > > >> > > > > > > > --
> > > > > > >> > > > > > > > Sincerely yours, Ivan Daschinskiy
> > > > > > >> > > > > > > >
> > > > > > >> > > > > > >
> > > > > > >> > > > > >
> > > > > > >> > > > > >
> > > > > > >> > > > > > --
> > > > > > >> > > > > > Sincerely yours, Ivan Daschinskiy
> > > > > > >> > > > > >
> > > > > > >> > > > >
> > > > > > >> > > >
> > > > > > >> > >
> > > > > > >> >
> > > > > > >>
> > > > > > >>
> > > > > > >> --
> > > > > > >> Sincerely yours, Ivan Daschinskiy
> > > > > > >>
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> > >
> > > --
> > > Sincerely yours, Ivan Daschinskiy
> > >
> >
>
>
> --
> Sincerely yours, Ivan Daschinskiy
>

Reply via email to