Derby
  1. Derby
  2. DERBY-3811

ArrayIndexOutOfBoundsException in BasePage.getHeaderAtSlot accessing modified Clob with READ_UNCOMMITTED isolation

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 10.5.1.1
    • Fix Version/s: None
    • Component/s: Store
    • Urgency:
      Normal
    • Issue & fix info:
      High Value Fix, Repro attached
    • Bug behavior facts:
      Seen in production

      Description

      The attached Java program does the following, using two concurrent threads for the last part.
      a) Inserts a 1 MB Clob.
      b) UpdateThread changes the Clob to a 0.5 MB Clob, then sleeps for 5 seconds before it performs a rollback.
      c) SelectThread selects the Clob and calls Clob.length().

      Both threads/connections run with READ_UNCOMMITTED isolation and with autocommit off.

      Running the attached Java program results in the following exception:
      1217602873292 :: Using isolation level READ_UNCOMMITTED (1)
      1217602873341 :: <<UpdateThread>> Starting update.
      1217602873649 :: <<UpdateThread>> Update completed!
      1217602875305 :: <<SelectThread>> Executing select query...
      1217602875328 :: <<SelectThread>> Getting Clob object...
      java.sql.SQLException: Java exception: '-1: java.lang.ArrayIndexOutOfBoundsException'.
      at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(SQLExceptionFactory40.java:95)
      at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Util.java:87)
      at org.apache.derby.impl.jdbc.Util.javaException(Util.java:244)
      at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:403)
      at org.apache.derby.impl.jdbc.EmbedResultSet.noStateChangeException(EmbedResultSet.java:4386)
      at org.apache.derby.impl.jdbc.StoreStreamClob.noStateChangeLOB(StoreStreamClob.java:292)
      at org.apache.derby.impl.jdbc.StoreStreamClob.getCharLength(StoreStreamClob.java:170)
      at org.apache.derby.impl.jdbc.EmbedClob.length(EmbedClob.java:175)
      at ClobStabilityTest$SelectThread.myRun(ClobStabilityTest.java:102)
      at ClobStabilityTest$SelectThread.run(ClobStabilityTest.java:87)
      at java.lang.Thread.run(Thread.java:619)
      Caused by: java.sql.SQLException: Java exception: '-1: java.lang.ArrayIndexOutOfBoundsException'.
      at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:45)
      at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(SQLExceptionFactory40.java:119)
      at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(SQLExceptionFactory40.java:70)
      ... 10 more
      Caused by: java.lang.ArrayIndexOutOfBoundsException: -1
      at org.apache.derby.impl.store.raw.data.BasePage.getHeaderAtSlot(BasePage.java:1794)
      at org.apache.derby.impl.store.raw.data.StoredPage.restorePortionLongColumn(StoredPage.java:5816)
      at org.apache.derby.impl.store.raw.data.OverflowInputStream.fillByteHolder(OverflowInputStream.java:151)
      at org.apache.derby.impl.store.raw.data.BufferedByteHolderInputStream.read(BufferedByteHolderInputStream.java:44)
      at java.io.DataInputStream.read(DataInputStream.java:132)
      at org.apache.derby.impl.jdbc.PositionedStoreStream.read(PositionedStoreStream.java:106)
      at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
      at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
      at org.apache.derby.iapi.util.UTF8Util.internalSkip(UTF8Util.java:111)
      at org.apache.derby.iapi.util.UTF8Util.skipUntilEOF(UTF8Util.java:59)
      at org.apache.derby.impl.jdbc.StoreStreamClob.getCharLength(StoreStreamClob.java:167)
      ... 4 more
      1217602878848 :: <<UpdateThread>> Rolling back!

      Is the Java program valid, and should this work?

      1. ClobStabilityTest.java
        5 kB
        Kristian Waagan
      2. derby-3811-1a-LOBLocksTest.diff
        25 kB
        Kristian Waagan
      3. LOBLocksTest.html
        65 kB
        Kristian Waagan

        Issue Links

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              Kristian Waagan
            • Votes:
              1 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development