Derby
  1. Derby
  2. DERBY-4312

SQLException XJ215 on insert with setCharacterStream() and autocommit off in mailjdbc test

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 10.4.2.0, 10.5.1.1, 10.5.2.0, 10.6.1.0
    • Fix Version/s: 10.4.2.1, 10.5.3.0, 10.6.1.0
    • Component/s: JDBC, Network Client
    • Labels:
      None
    • Environment:
      SuSE Linux IBM 1.6 SR4
    • Urgency:
      Urgent
    • Issue & fix info:
      High Value Fix, Patch Available, Release Note Needed, Repro attached
    • Bug behavior facts:
      Embedded/Client difference, Regression

      Description

      I am running the 10.5 maildbc test on Linux with network server and the 10.5.2.0 release candidate and an updated derbyTesting.jar to have just Lily's change to change the backup user: I see in the test output early and often, this error inserting data into the table:

      SQLState: XJ215
      Severity: 20000
      Message: You cannot invoke other java.sql.Clob/java.sql.Blob methods after calling the free() method or after
      Clob's transaction has been committed or rolled back.
      java.sql.SQLException: You cannot invoke other java.sql.Clob/java.sql.Blob methods after calling the free() m
      ter the Blob/Clob's transaction has been committed or rolled back.
      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.Lob.checkValidity(Unknown Source)
      at org.apache.derby.client.am.Clob.length(Unknown Source)
      at org.apache.derby.client.net.NetStatementRequest.computeProtocolTypesAndLengths(Unknown Source)
      at org.apache.derby.client.net.NetStatementRequest.buildSQLDTAcommandData(Unknown Source)
      at org.apache.derby.client.net.NetStatementRequest.writeExecute(Unknown Source)
      at org.apache.derby.client.net.NetPreparedStatement.writeExecute_(Unknown Source)
      at org.apache.derby.client.am.PreparedStatement.writeExecute(Unknown Source)
      at org.apache.derby.client.am.PreparedStatement.flowExecute(Unknown Source)
      at org.apache.derby.client.am.PreparedStatement.executeUpdateX(Unknown Source)
      at org.apache.derby.client.am.PreparedStatement.executeUpdate(Unknown Source)
      at org.apache.derbyTesting.system.mailjdbc.utils.DbTasks.insertMail(DbTasks.java:447)
      at org.apache.derbyTesting.system.mailjdbc.tasks.Refresh.insertMail(Refresh.java:99)
      at org.apache.derbyTesting.system.mailjdbc.tasks.Refresh.doWork(Refresh.java:75)
      at org.apache.derbyTesting.system.mailjdbc.tasks.Refresh.run(Refresh.java:51)
      Caused by: org.apache.derby.client.am.SqlException: You cannot invoke other java.sql.Clob/java.sql.Blob metho
      lling the free() method or after the Blob/Clob's transaction has been committed or rolled back.

      The interesting thing is that the test itself is not using any Clob methods it uses setCharacterStream and also autocommit is off.
      Below is a code excerpt and
      conn.setAutoCommit(false);
      PreparedStatement insertFirst = conn.prepareStatement(
      Statements.insertStr, Statement.RETURN_GENERATED_KEYS);
      String name = new String("ABCD");
      String l_name = new String("WXYZ");
      long s_insert = System.currentTimeMillis();
      for (int i = 0; i < num; i++) {
      String new_name = new String(increment(name, 60));
      String new_lname = new String(decrement(l_name, 60));
      insertFirst.setString(1, new_name);
      insertFirst.setString(2, new_lname);
      insertFirst.setTimestamp(3, new Timestamp(System
      .currentTimeMillis()));
      name = new_name;
      l_name = new_lname;
      try

      { // to create a stream of random length between 200 bytes and 3MB int clobLength = Rn.nextInt(3078000 - 200 + 1) + 200; streamReader = new LoopingAlphabetReader(clobLength, CharAlphabet.modernLatinLowercase()); insertFirst.setCharacterStream(4, streamReader, clobLength); }

      catch (Exception e)

      { MailJdbc.logAct.logMsg(LogFile.ERROR + thread_name + " : " + "File not found Exception : " + e.getMessage()); errorPrint(e); throw e; }

      int rand_num = Rn.nextInt(10 - 1);
      if (i == rand_num) {
      ResultSet rs = stmt
      .executeQuery("select count from REFRESH.INBOX where attach_id>0");
      while (rs.next())

      { id_count = rs.getInt(1); insertFirst.setInt(5, rs.getInt(1) + 1); }

      rs.close();
      conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
      } else
      insertFirst.setInt(5, 0);
      insertFirst
      .setString(
      6,
      "This column is used only to by pass the space problem. If the problem still exists, then we are going to "
      + "have a serious issue here.*****************************************************************************************************");
      int result = insertFirst.executeUpdate();

      if I connect with ij I do see some rows in the INBOX, so some inserts do seem to be happening.

      Kristian pointed out that this looks similar to DERBY-4224 with setAsciiStream() but this looks far more serious as autocommit is off and there does not appear to be a commit, so there is no obvious workaround. I assume this is also a regression. We shouldn't be throwing this error if the user did not use any Clob methods. I will try to narrow down the reproduction and track down where the issue was introduced. Knut said DERBY-4224 goes all the way back to 10.3.1.4 with DERBY-208. I don't know if it is the same case with this one.

      1. create.sql
        1 kB
        Kathey Marsden
      2. derby-4312_diff.txt
        5 kB
        Kathey Marsden
      3. derby-4312_diff.txt
        2 kB
        Kathey Marsden
      4. releaseNote.html
        4 kB
        Rick Hillegas
      5. releaseNote.html
        5 kB
        Kathey Marsden
      6. ReproDerby4312.java
        2 kB
        Kathey Marsden

        Issue Links

          Activity

          Kathey Marsden created issue -
          Kathey Marsden made changes -
          Field Original Value New Value
          Link This issue is related to DERBY-208 [ DERBY-208 ]
          Kathey Marsden made changes -
          Link This issue relates to DERBY-4224 [ DERBY-4224 ]
          Kathey Marsden made changes -
          Attachment ReproDerby4312.java [ 12413817 ]
          Attachment create.sql [ 12413818 ]
          Kathey Marsden made changes -
          Affects Version/s 10.5.1.1 [ 12313771 ]
          Affects Version/s 10.4.2.0 [ 12313345 ]
          Affects Version/s 10.6.0.0 [ 12313727 ]
          Kathey Marsden made changes -
          Link This issue is related to DERBY-3574 [ DERBY-3574 ]
          Kathey Marsden made changes -
          Assignee Kathey Marsden [ kmarsden ]
          Kathey Marsden made changes -
          Attachment derby-4312_diff.txt [ 12413866 ]
          Kathey Marsden made changes -
          Link This issue is blocked by DERBY-4315 [ DERBY-4315 ]
          Kathey Marsden made changes -
          Attachment derby-4312_diff.txt [ 12413952 ]
          Kathey Marsden made changes -
          Issue & fix info [Repro attached, High Value Fix] [High Value Fix, Patch Available, Release Note Needed, Repro attached]
          Kathey Marsden made changes -
          Attachment releaseNote.html [ 12414219 ]
          Kathey Marsden made changes -
          Status Open [ 1 ] Closed [ 6 ]
          Fix Version/s 10.4.2.1 [ 12313401 ]
          Fix Version/s 10.5.2.1 [ 12314117 ]
          Fix Version/s 10.6.0.0 [ 12313727 ]
          Resolution Fixed [ 1 ]
          Kathey Marsden made changes -
          Link This issue is blocked by DERBY-4315 [ DERBY-4315 ]
          Kathey Marsden made changes -
          Link This issue is related to DERBY-4315 [ DERBY-4315 ]
          Rick Hillegas made changes -
          Attachment releaseNote.html [ 12442288 ]
          Gavin made changes -
          Workflow jira [ 12470910 ] Default workflow, editable Closed status [ 12797160 ]

            People

            • Assignee:
              Kathey Marsden
              Reporter:
              Kathey Marsden
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development