ignite-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Lev Agafonov (Jira)" <j...@apache.org>
Subject [jira] [Commented] (IGNITE-12032) Server node prints exception when ODBC driver disconnects
Date Thu, 12 Sep 2019 06:56:00 GMT

    [ https://issues.apache.org/jira/browse/IGNITE-12032?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16928286#comment-16928286
] 

Lev Agafonov commented on IGNITE-12032:
---------------------------------------

Denis, thank you for helping me :)

I go deeper and could also reproduce exactly same stack trace against JDBC thin client.

The test:
{code:java}
import java.sql._
import org.scalatest.{FunSuite, Matchers}

class JdbcTest extends FunSuite with Matchers {

  test("Jdbc incorrect session close test") {
    val igniteHost = "*.*.*.*"
    val ignitePort = "10800"

    Class.forName("org.apache.ignite.IgniteJdbcThinDriver")
    val t = new Thread() {
      override def run() = {
        val conn = DriverManager.getConnection(s"jdbc:ignite:thin://${igniteHost}:${ignitePort}")
        //conn.close()
      }
    }
    t.start()
    Thread.sleep(100)
    t.interrupt()
  }
}{code}
The stack trace:

 
{code:java}
[12-Sep-2019 09:18:13][ERROR][grid-nio-worker-client-listener-0-#29][ClientListenerProcessor]
Failed to process selector key [ses=GridSelectorNioSessionImpl [worker=ByteBufferNioClientWorker
[readBuf=java.nio.HeapByteBuffer[pos=0 lim=8192 cap=8192], super=AbstractNioClientWorker [idx=0,
bytesRcvd=0, bytesSent=0, bytesRcvd0=0, bytesSent0=0, select=true, super=GridWorker [name=grid-nio-worker-client-listener-0,
igniteInstanceName=null, finished=false, heartbeatTs=1568269092688, hashCode=1630725146, interrupted=false,
runner=grid-nio-worker-client-listener-0-#29]]], writeBuf=null, readBuf=null, inRecovery=null,
outRecovery=null, closeSocket=true, super=GridNioSessionImpl [locAddr=/*.*.*.*:10800, rmtAddr=/*.*.*.*:59186,
createTime=1568269092688, closeTime=0, bytesSent=0, bytesRcvd=0, bytesSent0=0, bytesRcvd0=0,
sndSchedTime=1568269092688, lastSndTime=1568269092688, lastRcvTime=1568269092688, readsPaused=false,
filterChain=FilterChain[filters=[GridNioAsyncNotifyFilter, GridNioCodecFilter [parser=ClientListenerBufferedParser,
directMode=false]], accepted=true, markedForClose=false]]]
java.io.IOException: An existing connection was forcibly closed by the remote host
        at sun.nio.ch.SocketDispatcher.read0(Native Method)
        at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
        at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
        at sun.nio.ch.IOUtil.read(IOUtil.java:197)
        at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
        at org.apache.ignite.internal.util.nio.GridNioServer$ByteBufferNioClientWorker.processRead(GridNioServer.java:1120)
        at org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.processSelectedKeysOptimized(GridNioServer.java:2407)
        at org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.bodyInternal(GridNioServer.java:2174)
        at org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.body(GridNioServer.java:1815)
        at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120)
        at java.lang.Thread.run(Thread.java:748)
[12-Sep-2019 09:18:13][WARN ][grid-nio-worker-client-listener-0-#29][ClientListenerProcessor]
Closing NIO session because of unhandled exception [cls=class o.a.i.i.util.nio.GridNioException,
msg=An existing connection was forcibly closed by the remote host]
{code}
 

So, my suggestion that this kind of problem doesn't related to Odbc module, but to Core one.

If I do call conn.close() method - no errors are thrown in both JDBC and ODBC connections.

I think it will be good enough to make a small patch, making things more clear by changing
current WARN message:

"Closing NIO session because of unhandled exception"

to something like 

"Network connection lost, closing NIO connection. Please, check database connection is closed
in safe manner, by calling connection.close() method"

 

> Server node prints exception when ODBC driver disconnects
> ---------------------------------------------------------
>
>                 Key: IGNITE-12032
>                 URL: https://issues.apache.org/jira/browse/IGNITE-12032
>             Project: Ignite
>          Issue Type: Bug
>          Components: odbc
>    Affects Versions: 2.7.5
>            Reporter: Evgenii Zhuravlev
>            Priority: Major
>              Labels: newbie, usability
>             Fix For: 2.8
>
>
> Whenever a process using ODBC clients is finished, it's printing in the 
> node logs this exception: 
> {code:java}
> *[07:45:19,559][SEVERE][grid-nio-worker-client-listener-1-#30][ClientListenerProcessor]

> Failed to process selector key [s 
> es=GridSelectorNioSessionImpl [worker=ByteBufferNioClientWorker 
> [readBuf=java.nio.HeapByteBuffer[pos=0 lim=8192 cap=8192 
> ], super=AbstractNioClientWorker [idx=1, bytesRcvd=0, bytesSent=0, 
> bytesRcvd0=0, bytesSent0=0, select=true, super=GridWo 
> rker [name=grid-nio-worker-client-listener-1, igniteInstanceName=null, 
> finished=false, heartbeatTs=1564289118230, hashCo 
> de=1829856117, interrupted=false, 
> runner=grid-nio-worker-client-listener-1-#30]]], writeBuf=null, 
> readBuf=null, inRecove 
> ry=null, outRecovery=null, super=GridNioSessionImpl 
> [locAddr=/0:0:0:0:0:0:0:1:10800, rmtAddr=/0:0:0:0:0:0:0:1:63697, cre 
> ateTime=1564289116225, closeTime=0, bytesSent=1346, bytesRcvd=588, 
> bytesSent0=0, bytesRcvd0=0, sndSchedTime=156428911623 
> 5, lastSndTime=1564289116235, lastRcvTime=1564289116235, readsPaused=false, 
> filterChain=FilterChain[filters=[GridNioAsyn 
> cNotifyFilter, GridNioCodecFilter [parser=ClientListenerBufferedParser, 
> directMode=false]], accepted=true, markedForClos 
> e=false]]] 
> java.io.IOException: An existing connection was forcibly closed by the 
> remote host 
>         at sun.nio.ch.SocketDispatcher.read0(Native Method) 
>         at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43) 
>         at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223) 
>         at sun.nio.ch.IOUtil.read(IOUtil.java:197) 
>         at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380) 
>         at 
> org.apache.ignite.internal.util.nio.GridNioServer$ByteBufferNioClientWorker.processRead(GridNioServer.java:11

> 04) 
>         at 
> org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.processSelectedKeysOptimized(GridNi

> oServer.java:2389) 
>         at 
> org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.bodyInternal(GridNioServer.java:215

> 6) 
>         at 
> org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.body(GridNioServer.java:1797)

>         at 
> org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120) 
>         at java.lang.Thread.run(Thread.java:748)* 
> {code}
> It's absolutely normal behavior when ODBC client disconnects from the node, so, we shouldn't
print exception in the log. We should replace it with something like INFO message about ODBC
client disconnection.
> Thread from user list: http://apache-ignite-users.70518.x6.nabble.com/exceptions-in-Ignite-node-when-a-thin-client-process-ends-td28970.html



--
This message was sent by Atlassian Jira
(v8.3.2#803003)

Mime
View raw message