[ 
https://issues.apache.org/jira/browse/IGNITE-17554?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mikhail Petrov updated IGNITE-17554:
------------------------------------
    Fix Version/s: 2.15

> {clientType}.ActiveSessions metrics are no updated in case of connection 
> problems/lost
> --------------------------------------------------------------------------------------
>
>                 Key: IGNITE-17554
>                 URL: https://issues.apache.org/jira/browse/IGNITE-17554
>             Project: Ignite
>          Issue Type: Bug
>    Affects Versions: 2.13
>            Reporter: Stepanov Ilya
>            Assignee: Mikhail Petrov
>            Priority: Minor
>              Labels: ise
>             Fix For: 2.15
>
>         Attachments: ProxyServer.java
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> Metrics "\{clientType}.ActiveSessions" are not updated correctly in case of 
> connection problems.
>  
> Steps to reproduce: 
> 1) Start server
> 2) Start jdbc or thin client
> 3) Block port 10800 on the server host
> {code:java}
> iptables -A INPUT -p tcp --dport 10800 -j DROP {code}
> 4) Check "\{clientType}.ActiveSessions". We will see one connection. 
> 5) Stop jdbc or thin client 
> 6) Check "\{clientType}.ActiveSessions". We will still see one connection in 
> "\{clientType}.ActiveSessions".
> 7) After about 2 hours, the metric will have a negative value = -1
> Error in log:
> {code:java}
> [ERROR][grid-nio-worker-client-listener-1-#55][ClientListenerProcessor] 
> Failed to process selector key [ses=GridSelectorNioSessionImpl 
> [worker=DirectNioClient
> Worker [super=AbstractNioClientWorker [idx=1, bytesRcvd=19, bytesSent=28, 
> bytesRcvd0=0, bytesSent0=0, select=true, super=GridWorker 
> [name=grid-nio-worker-client-listener-1, igniteInst
> anceName=null, finished=false, heartbeatTs=1661784642354, hashCode=624626958, 
> interrupted=false, runner=grid-nio-worker-client-listener-1-#55]]], 
> writeBuf=java.nio.DirectByteBuffer[po
> s=0 lim=23040 cap=23040], readBuf=java.nio.DirectByteBuffer[pos=0 lim=184640 
> cap=184640], inRecovery=null, outRecovery=null, closeSocket=true, 
> outboundMessagesQueueSizeMetric=o.a.i.i.
> processors.metric.impl.LongAdderMetric@63a61cb2, super=GridNioSessionImpl 
> [locAddr=/10.40.6.205:10800, rmtAddr=/10.255.12.2:4708, 
> createTime=1661776500783, closeTime=0, bytesSent=28, 
> bytesRcvd=19, bytesSent0=0, bytesRcvd0=0, sndSchedTime=1661776500844, 
> lastSndTime=1661776500844, lastRcvTime=1661776500833, readsPaused=false, 
> filterChain=FilterChain[filters=[GridNio
> AsyncNotifyFilter, GridNioCodecFilter [parser=ClientListenerNioMessageParser, 
> directMode=true]], accepted=true, markedForClose=false]]]
> java.io.IOException: Connection timed out
>         at sun.nio.ch.FileDispatcherImpl.read0(Native Method) ~[?:1.8.0_302]
>         at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39) 
> ~[?:1.8.0_302]
>         at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223) 
> ~[?:1.8.0_302]
>         at sun.nio.ch.IOUtil.read(IOUtil.java:192) ~[?:1.8.0_302]
>         at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:379) 
> ~[?:1.8.0_302]
>         at 
> org.apache.ignite.internal.util.nio.GridNioServer$DirectNioClientWorker.processRead(GridNioServer.java:1351)
>  ~[ignite-core-2.13.1-p0.jar:2.13.1-p0]
>         at 
> org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.processSelectedKeysOptimized(GridNioServer.java:2508)
>  [ignite-core-2.13.1-p0.jar:2.13.1-p0]
>         at 
> org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.bodyInternal(GridNioServer.java:2273)
>  [ignite-core-2.13.1-p0.jar:2.13.1-p0]
>         at 
> org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.body(GridNioServer.java:1910)
>  [ignite-core-2.13.1-p0.jar:2.13.1-p0]
>         at 
> org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125) 
> [ignite-core-2.13.1-p0.jar:2.13.1-p0] {code}
>  
> Another case with proxy:
>  
> Steps to reproduce: 
> 1) Start server 
> 2) Start Proxy server for remote port 10800 and local port 1024
> 3) Start jdbc or thin client with proxy server connection
> {code:java}
> ClientConfiguration cfg = new 
> ClientConfiguration().setAddresses("127.0.0.1:1024");
> IgniteClient igniteClient = Ignition.startClient(cfg);
> IgniteClient igniteClient2 = Ignition.startClient(cfg); {code}
> 4) Check "\{clientType}.ActiveSessions" and "views.CLIENT_CONNECTIONS". We 
> will see one connection. 
> 5) Stop jdbc or thin client 
> 6) Stop Proxy server 
> 7) Check "\{clientType}.ActiveSessions" and "views.CLIENT_CONNECTIONS".
> We will still see one connection in "\{clientType}.ActiveSessions" and no 
> connection in "views.CLIENT_CONNECTIONS".



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to