[
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)