[ 
https://issues.apache.org/jira/browse/DERBY-3172?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12541161
 ] 

Mamta A. Satoor commented on DERBY-3172:
----------------------------------------

On further investigation, it seems that in client server mode, we are changing 
the exception's severity code from session severity to some DRDA severity and 
that causes the connection error event to not trigger even with my local code 
changes. 

The exception that gets thrown when Network Server is down is 
    String COMMUNICATION_ERROR                                  = "08006.C.3";
derby,shared.common.error.ExceptionUtil.java uses 08006 and determines the 
severity code to be session severity. So far so good. But later 
derby.client.am.SqlException changes the severity code to  disconnectError 
which is defined as new SqlCode(-4499) in client,am.SqlCode

    public SqlException(LogWriter logWriter, ClientMessageId msgid, Object[] 
args,
        SqlCode sqlcode, Throwable t) {
        this(logWriter, msgid, args, t);
        this.errorcode_ = sqlcode.getCode();
    }

So the cause of the problem is this change of severity code. Does anyone know 
why do we overwrite the severity code determined based on 08006 to a completely 
different value.

I need to run pickup my daughter so if this information looks incomplete or if 
I can provide further information, let me know and I will post something later 
tonight.,

> ConnectionEventListener.connectionErrorOccurred not being executed when 
> SQLState 08006 Error is thrown
> ------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-3172
>                 URL: https://issues.apache.org/jira/browse/DERBY-3172
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.3.1.4
>            Reporter: Stan Bradbury
>            Assignee: Mamta A. Satoor
>         Attachments: DerbyNotification2.java
>
>
> The attached program demonstrates the problem.  Using the 
> ClientConnectionPoolDataSource40 with a connectionEventListener the defined 
> method connectionErrorOccurred is not executed after the Network Server is 
> shutdown and activity is performed on a previously established pooled 
> connection.
> Program also demonstrates that the connectionClosed method is executed when 
> the connection is closed.
> To run the reproduction:
> 1) start network server (listening on default host/port and  
> -noSecurityManager specified)
> 2) run the program
> Output is:
>  > java DerbyNotification2
> 10.3.1.5 - (579866)
> Apache Derby
>  .got connection...check if connectionClosed method is called
> EVENT CALLED: Connection closed happened
>  . . .
>  . . .Get connection and issue test SQL statement
>  . . .AS EXPECTED: no table exists
>  . SHUTDOWN Network server and check if connectionErrorOccurred is called
> now try to use the connection after the NS is STOPPED
> SQLState is: 08006
> Error is: -4499
> Message is: Insufficient data while reading from the network - expected a 
> minimum of 6 bytes and received only -1 bytes.  The connection has been 
> terminated.
> Exception in thread "main" java.sql.SQLNonTransientConnectionException: 
> Insufficient data while reading from the network - expected a minimum of 6 
> bytes and received only -1 bytes.  The connection has
>  been terminated.
>         at 
> org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown 
> Source)
>         at org.apache.derby.client.am.SqlException.getSQLException(Unknown 
> Source)
>         at org.apache.derby.client.am.Connection.prepareStatement(Unknown 
> Source)
>         at 
> org.apache.derby.client.am.LogicalConnection.prepareStatement(Unknown Source)
>         at DerbyNotification2.runTest(DerbyNotification2.java:64)
>         at DerbyNotification2.main(DerbyNotification2.java:87)
> Caused by: org.apache.derby.client.am.DisconnectException: Insufficient data 
> while reading from the network - expected a minimum of 6 bytes and received 
> only -1 bytes.  The connection has been termina
> ted.
>         at org.apache.derby.client.net.Reply.fill(Unknown Source)
>         at org.apache.derby.client.net.Reply.ensureALayerDataInBuffer(Unknown 
> Source)
>         at org.apache.derby.client.net.Reply.readDssHeader(Unknown Source)
>         at org.apache.derby.client.net.Reply.startSameIdChainParse(Unknown 
> Source)
>         at 
> org.apache.derby.client.net.NetStatementReply.readPrepareDescribeOutput(Unknown
>  Source)
>         at 
> org.apache.derby.client.net.StatementReply.readPrepareDescribeOutput(Unknown 
> Source)
>         at 
> org.apache.derby.client.net.NetStatement.readPrepareDescribeOutput_(Unknown 
> Source)
>         at 
> org.apache.derby.client.am.Statement.readPrepareDescribeOutput(Unknown Source)
>         at 
> org.apache.derby.client.am.PreparedStatement.readPrepareDescribeInputOutput(Unknown
>  Source)
>         at 
> org.apache.derby.client.am.PreparedStatement.flowPrepareDescribeInputOutput(Unknown
>  Source)
>         at org.apache.derby.client.am.PreparedStatement.prepare(Unknown 
> Source)
>         at org.apache.derby.client.am.Connection.prepareStatementX(Unknown 
> Source)
>         ... 4 more

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to