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] [Comment Edited] (IGNITE-12032) Server node prints exception when ODBC driver disconnects
Date Wed, 11 Sep 2019 10:02:00 GMT

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

Lev Agafonov edited comment on IGNITE-12032 at 9/11/19 10:01 AM:
-----------------------------------------------------------------

Hello,

I investigated the issue, seems that exception is thrown from [this line|https://github.com/apache/ignite/blob/ignite-2.7.6/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java#L2673]

I also was able to reproduce this stack trace with following test:

 
{code:java}
import java.sql._

import org.scalatest.{FunSuite, Matchers}

class OdbcTest extends FunSuite with Matchers {
  test("Odbc close connection") {
    val dsn = "Ignite_srv"
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")
    val t = new Thread() {
      override def run() = {
        val conn = DriverManager.getConnection(s"jdbc:odbc:$dsn")
        //conn.close()
      }
    }
    t.start()
    Thread.sleep(100)
    t.interrupt()
  }
}
{code}
As you can see - there is commented 'conn.close()' in my test, and actually this produces
error.

Of course, it absolutely normal to close database connection, but it should be done in proper
way, by calling `close` connection method.

In my opinion throwing error on unexpectedly closed network connection - is correct. In case
it changed to INFO,  the problem of loosing network connection will be hidden.

So, I suppose that problem should be fixed by correct closing database connection with adding
`connection.close()` to client application, before "{color:#000000}process using this thin
clients is finished".{color}

 

 


was (Author: levagafonov):
Hello,

I investigated the issue, seems that exception is thrown from [this line|#L2673].]

I also was able to reproduce this stack trace with following test:

 
{code:java}
import java.sql._

import org.scalatest.{FunSuite, Matchers}

class OdbcTest extends FunSuite with Matchers {
  test("Odbc close connection") {
    val dsn = "Ignite_srv"
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")
    val t = new Thread() {
      override def run() = {
        val conn = DriverManager.getConnection(s"jdbc:odbc:$dsn")
        //conn.close()
      }
    }
    t.start()
    Thread.sleep(100)
    t.interrupt()
  }
}
{code}
As you can see - there is commented 'conn.close()' in my test, and actually this produces
error.

Of course, it absolutely normal to close database connection, but it should be done in proper
way, by calling `close` connection method.

In my opinion throwing error on unexpectedly closed network connection - is correct. In case
it changed to INFO,  the problem of loosing network connection will be hidden.

So, I suppose that problem should be fixed by correct closing database connection with `connection.close()`
to client application, before "{color:#000000}process using this thin clients is finished".{color}

 

 

> 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