I've reviewed the code again and it does not seem right to override user-defined heartbeat interval with a *bigger* value, so now I only set it to 1/3 of idleTimeout when the user-specified value is not already less than that.
On Wed, Feb 16, 2022 at 7:19 PM Pavel Tupitsyn <ptupit...@apache.org> wrote: > Ok, let's keep heartbeatInterval then. > I've updated the code to reflect our recent agreement, please review. > > On Tue, Feb 15, 2022 at 8:28 PM Ivan Daschinsky <ivanda...@gmail.com> > wrote: > >> I personally prefer heartbeatInterval >> >> вт, 15 февр. 2022 г., 18:25 Pavel Tupitsyn <ptupit...@apache.org>: >> >> > > What about "keepAlive", "keepAliveInterval" then? It looks more common >> > and matches the IEP title :) >> > According to Google, HeartbeatInterval has ~169K results, and >> > KeepAliveInterval has ~110K :) >> > >> > In my experience, both are well understood. I am equally willing to use >> any >> > of them. >> > Any other opinions? >> > >> > On Tue, Feb 15, 2022 at 6:11 PM Maksim Timonin <timoninma...@apache.org >> > >> > wrote: >> > >> > > What about "keepAlive", "keepAliveInterval" then? It looks more common >> > and >> > > matches the IEP title :) >> > > >> > > On Tue, Feb 15, 2022 at 5:54 PM Pavel Tupitsyn <ptupit...@apache.org> >> > > wrote: >> > > >> > > > To summarize, we add two properties to the ClientConfiguration: >> > > > bool heartbeatsEnabled = true; >> > > > long defaultHeartbeatInterval = 60_000; // Default 1 minute, used >> > > > >> > > > Logic: >> > > > if (heartbeatsEnabled) { >> > > > heartbeatInterval = serverIdleTimeout > 0 ? serverIdleTimeout / 3 >> : >> > > > defaultHeartbeatInterval; >> > > > } >> > > > >> > > > >> > > > Thoughts, objections? >> > > > >> > > > On Tue, Feb 15, 2022 at 4:32 PM Ivan Daschinsky < >> ivanda...@gmail.com> >> > > > wrote: >> > > > >> > > > > Pavel, sorry, i've made mistake. But current behaviour is ok for >> me. >> > > This >> > > > > timeout cannot be change on server side runtime. But we can >> simplify >> > > > > protocol just use one opcode and message >> > > > > >> > > > > вт, 15 февр. 2022 г., 14:54 Ivan Daschinsky <ivanda...@gmail.com >> >: >> > > > > >> > > > > > > Idle timeout can't change, why send it back with every >> heartbeat >> > > > > > response? >> > > > > > May be I am wrong, but from code I see this behaviour. But if I >> am >> > > > wrong, >> > > > > > this is ok behaviour for me. >> > > > > > >> > > > > > >> > > > > > >> > > > > > вт, 15 февр. 2022 г. в 14:00, Pavel Tupitsyn < >> ptupit...@apache.org >> > >: >> > > > > > >> > > > > >> Ivan, I mostly agree with your proposal, except this point: >> > > > > >> >> > > > > >> > Response to heartbeat request -- is idle timeout >> > > > > >> Idle timeout can't change, why send it back with every >> heartbeat >> > > > > response? >> > > > > >> >> > > > > >> > possible cases with cluster restart, upgrade >> > > > > >> In those cases, a new connection will be established, and we'll >> > > > retrieve >> > > > > >> the new timeout after the handshake. >> > > > > >> >> > > > > >> >> > > > > >> On Tue, Feb 15, 2022 at 12:04 PM Maksim Timonin < >> > > > > timoninma...@apache.org> >> > > > > >> wrote: >> > > > > >> >> > > > > >> > Hi Ivan, >> > > > > >> > >> > > > > >> > Cases you described sound reasonable to me. Then the client >> > should >> > > > > just >> > > > > >> set >> > > > > >> > up the `keepAlive` flag, and it just works. >> > > > > >> > >> > > > > >> > So, there are 3 branches: >> > > > > >> > 1. Users don't configure keepAlive at all. >> > > > > >> > 2. Users configure keepAliveHeartbeatInterval (long, ms). >> > > > > >> > 3. Users configure keepAlive (boolean). >> > > > > >> > >> > > > > >> > AFAIU, Pavel's proposal is about covering the second case >> only. >> > > But >> > > > > >> > actually the 2nd and 3rd aren't conflicted with each other.I >> > think >> > > > for >> > > > > >> both >> > > > > >> > branches, a cluster should respond with idleTimeout value on >> > every >> > > > > keep >> > > > > >> > alive client request. Because there are possible cases with >> > > cluster >> > > > > >> > restart, upgrade, etc. Clients should check every response >> and >> > in >> > > > case >> > > > > >> of >> > > > > >> > changed idleTimeout. For 2nd case write a WARN message, and >> for >> > > 3rd >> > > > - >> > > > > >> > reconfigure themself in case of changed idleTimeout. >> > > > > >> > >> > > > > >> > >> > > > > >> > >> > > > > >> > >> > > > > >> > On Tue, Feb 15, 2022 at 9:51 AM Ivan Daschinsky < >> > > > ivanda...@gmail.com> >> > > > > >> > wrote: >> > > > > >> > >> > > > > >> > > Regarding discussion here [1] >> > > > > >> > > >> > > > > >> > > I suppose that this feature, despite the fact that initial >> > > > intention >> > > > > >> of >> > > > > >> > > Pavel was different, can drastically >> > > > > >> > > improve the usage pattern of thin clients and give a lot of >> > > > > >> opportunities >> > > > > >> > > if the following is done: >> > > > > >> > > >> > > > > >> > > 1. GridNioServer has a great feature -- idle timeout. If a >> > > server >> > > > > did >> > > > > >> > not >> > > > > >> > > receive any from a client -- it will be kicked off. >> > > > > >> > > But there are some scenarios that make the use of this >> > > feature >> > > > > >> > > impossible: >> > > > > >> > > a. Multiple workers waiting for batch tasks and relatively >> low >> > > > > >> requests >> > > > > >> > > rate -- this services will be often kicked off and must >> > > reconnect. >> > > > > >> > > In order to prevent this behaviour, the user must >> implement a >> > > kind >> > > > > of >> > > > > >> > > heartbeating by himself. >> > > > > >> > > b. Quite often user may want to implement leader-follower >> > > pattern >> > > > > for >> > > > > >> > > services for HA, so followers also will be considered as >> idle. >> > > > > Kicking >> > > > > >> > off >> > > > > >> > > these followers >> > > > > >> > > is not acceptable, so user should also implement >> heartbeating >> > > by >> > > > > >> > himself. >> > > > > >> > > >> > > > > >> > > My proposition is: >> > > > > >> > > 1. Add two flags -- enable/disable heartbeats, and very >> > optional >> > > > > >> > heartbeat >> > > > > >> > > timeout. Set enable to true by default, timeout to default >> > > > heartbeat >> > > > > >> > > timeout. >> > > > > >> > > 2. If server and client both support this feature, and >> > > heartbeats >> > > > > are >> > > > > >> not >> > > > > >> > > explicitly disabled on client side: >> > > > > >> > > 3. Response to heartbeat request -- is idle timeout. If >> idle >> > > > timeout >> > > > > >> is >> > > > > >> > set >> > > > > >> > > on the server side , set heartbeat timeout to one-third of >> it, >> > > > > instead >> > > > > >> > set >> > > > > >> > > to default or specified value. >> > > > > >> > > >> > > > > >> > > Pros: >> > > > > >> > > 1. Easy to set up -- just flag on client side and just set >> > > timeout >> > > > > on >> > > > > >> > > server side. >> > > > > >> > > 2. Hard to configure improperly, i.e set heartbeat timeout >> not >> > > > short >> > > > > >> > enough >> > > > > >> > > in order to prevent kicking out by server. >> > > > > >> > > 3. If the user just wants heartbeats without setting idle >> > > timeout >> > > > -- >> > > > > >> > > heartbeats are by default on and with reasonable timeout. >> > > > > >> > > >> > > > > >> > > Cons: >> > > > > >> > > 1. If someone will rely on old behavior and just wants to >> drop >> > > his >> > > > > >> > clients >> > > > > >> > > on timeout -- this will not work without reconfiguring, he >> > > should >> > > > > >> disable >> > > > > >> > > heartbeats. >> > > > > >> > > But I cannot even imagine that someone will find this >> > behaviour >> > > > > >> > desirable. >> > > > > >> > > I strongly believe that this behaviour prevents users from >> > using >> > > > > >> > > idleTimeout on server side. >> > > > > >> > > >> > > > > >> > > [1] -- >> > > > > >> >> https://github.com/apache/ignite/pull/9817#discussion_r805628955 >> > > > > >> > > >> > > > > >> > > пт, 11 февр. 2022 г. в 10:58, Pavel Tupitsyn < >> > > > ptupit...@apache.org >> > > > > >: >> > > > > >> > > >> > > > > >> > > > 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 >> > > > > >> > > > > >> > > > > >> > > > >> > > > > >> > > >> > > > > >> > > >> > > > > >> > > -- >> > > > > >> > > Sincerely yours, Ivan Daschinskiy >> > > > > >> > > >> > > > > >> > >> > > > > >> >> > > > > > >> > > > > > >> > > > > > -- >> > > > > > Sincerely yours, Ivan Daschinskiy >> > > > > > >> > > > > >> > > > >> > > >> > >> >