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

Reply via email to