[ 
https://issues.apache.org/jira/browse/DERBY-3811?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Kristian Waagan updated DERBY-3811:
-----------------------------------

    Attachment: derby-3811-1a-LOBLocksTest.diff
                LOBLocksTest.html

Attaching a basic LOB locking test as patch 1a.
I'm also attaching the JavaDoc as HTML for easier reading (reading the overall 
test description may help).

I'm seeing failures with when running this test. It would be nice if someone 
could verify if the test is doing the right things.
You can expect to see eight or nine errors when running the tests.
For the record, I think the test exposes more than one problem.


Test ready for review.

> ArrayIndexOutOfBoundsException in BasePage.getHeaderAtSlot accessing modified 
> Clob with READ_UNCOMMITTED isolation
> ------------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-3811
>                 URL: https://issues.apache.org/jira/browse/DERBY-3811
>             Project: Derby
>          Issue Type: Bug
>          Components: Store
>    Affects Versions: 10.5.1.1
>            Reporter: Kristian Waagan
>         Attachments: ClobStabilityTest.java, derby-3811-1a-LOBLocksTest.diff, 
> LOBLocksTest.html
>
>
> 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?

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