Uploaded image for project: 'Derby'
  1. Derby
  2. DERBY-3077

Trying to reconnect with derby client after bringing server down throws SQL Exception 58009 rather than 08XXX exception

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 10.2.2.0
    • 10.3.2.1, 10.4.1.3
    • JDBC
    • None

    Description

      This issue was discussed in DERBY-401, because the case where the server is brought down and an application tries to reconnect does not throw a SQLNonTransientException. Discussion is still underway about whether 58XXX exceptions should be SQLNonTransientExceptions, but at least for this case changing the exception to 08006 per Knut's suggestion should correct the problem for this case. See https://issues.apache.org/jira/browse/DERBY-401#action_12527400

      Below is current stack and test case.

      Apache Derby
      got connection now sleep
      now try to use the connection after you killed the nS
      Exception in thread "main" java.sql.SQLException: A communications error has been detected: Software caused connection abort: recv failed.
      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 DerbyClientNonXA.main(DerbyClientNonXA.java:48)
      Caused by: org.apache.derby.client.am.DisconnectException: A communications error has been detected: Software caused connection abort: recv failed.
      at org.apache.derby.client.net.NetAgent.throwCommunicationsFailure(Unknown Source)
      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)
      ... 3 more
      Caused by: java.net.SocketException: Software caused connection abort: recv failed
      at java.net.SocketInputStream.read(SocketInputStream.java:129)
      ... 15 more

      import java.sql.Connection;
      import java.sql.DatabaseMetaData;
      import java.sql.PreparedStatement;
      import java.sql.SQLException;
      import java.sql.Statement;
      import javax.sql.PooledConnection;

      public class DerbyClientNonXA

      { public static void main(String args[]) throws Exception { org.apache.derby.jdbc.ClientConnectionPoolDataSource40 ds = new org.apache.derby.jdbc.ClientConnectionPoolDataSource40(); Connection conn = null; ds.setDatabaseName("e:\\temp\\sampl127;create=true"); PooledConnection pooledCon = ds.getPooledConnection(); conn = pooledCon.getConnection(); DatabaseMetaData md = conn.getMetaData(); System.out.println(md.getDatabaseProductVersion()); System.out.println(md.getDatabaseProductName()); System.out.println("got connection now sleep. Bring down network server."); Statement st = null; PreparedStatement ps1 = null; st = conn.createStatement(); try { st.executeUpdate("drop table TAB1"); } catch (SQLException x) { System.out.println("no table exists"); } Thread.sleep(15000); System.out.println("now try to use the connection after you killed the nS"); ps1 = conn.prepareStatement("CREATE TABLE TAB1(COL1 INT NOT NULL)"); ps1.executeUpdate(); conn.commit(); System.out.println("done"); }

      }

      Attachments

        1. derby-3077_cleanup_diff.txt
          60 kB
          Katherine Marsden
        2. derby-3077_cleanup_stat.txt
          1 kB
          Katherine Marsden
        3. derby-3077_diff.txt
          41 kB
          Katherine Marsden
        4. derby-3077_stat.txt
          0.3 kB
          Katherine Marsden

        Activity

          People

            kmarsden Katherine Marsden
            kmarsden Katherine Marsden
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: