[
https://issues.apache.org/jira/browse/DERBY-3811?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12727670#action_12727670
]
Kathey Marsden commented on DERBY-3811:
---------------------------------------
A user reported an error similar to this selecting from a CLOB column, but in
their case the row is actually corrupt. If I select from their table with ij I
get:
java.lang.ArrayIndexOutOfBoundsException: -1
at
org.apache.derby.impl.store.raw.data.BasePage.getHeaderAtSlot(BasePage.java:2013)
at
org.apache.derby.impl.store.raw.data.StoredPage.restorePortionLongColumn(StoredPage.java:5806)
at
org.apache.derby.impl.store.raw.data.OverflowInputStream.fillByteHolder(OverflowInputStream.java:82)
at
org.apache.derby.impl.store.raw.data.OverflowInputStream.<init>(OverflowInputStream.java:64)
at
org.apache.derby.impl.store.raw.data.StoredPage.readRecordFromArray(StoredPage.java:5555)
at
org.apache.derby.impl.store.raw.data.StoredPage.restoreRecordFromSlot(StoredPage.java:1499)
at
org.apache.derby.impl.store.raw.data.BasePage.fetchFromSlot(BasePage.java:498)
at
org.apache.derby.impl.store.access.conglomerate.GenericScanController.fetchRows(GenericScanController.java:768)
at
org.apache.derby.impl.store.access.heap.HeapScan.fetchNextGroup(HeapScan.java:338)
at
org.apache.derby.impl.sql.execute.BulkTableScanResultSet.reloadArray(BulkTableScanResultSet.java:329)
at
org.apache.derby.impl.sql.execute.BulkTableScanResultSet.getNextRowCore(BulkTableScanResultSet.java:284)
at
org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.getNextRow(BasicNoPutResultSetImpl.java:475)
at
org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(EmbedResultSet.java:448)
at
org.apache.derby.impl.jdbc.EmbedResultSet.next(EmbedResultSet.java:392)
at
org.apache.derby.tools.JDBCDisplayUtil.indent_DisplayResults(JDBCDisplayUtil.java:382)
at
org.apache.derby.tools.JDBCDisplayUtil.indent_DisplayResults(JDBCDisplayUtil.java:338)
at
org.apache.derby.tools.JDBCDisplayUtil.indent_DisplayResults(JDBCDisplayUtil.java:241)
at
org.apache.derby.tools.JDBCDisplayUtil.DisplayResults(JDBCDisplayUtil.java:229)
at
org.apache.derby.impl.tools.ij.utilMain.displayResult(utilMain.java:456)
at org.apache.derby.impl.tools.ij.utilMain.doCatch(utilMain.java:530)
at
org.apache.derby.impl.tools.ij.utilMain.runScriptGuts(utilMain.java:371)
at org.apache.derby.impl.tools.ij.utilMain.go(utilMain.java:269)
at org.apache.derby.impl.tools.ij.Main.go(Main.java:204)
at org.apache.derby.impl.tools.ij.Main.mainCore(Main.java:170)
at org.apache.derby.impl.tools.ij.Main14.main(Main14.java:56)
at org.apache.derby.tools.ij.main(ij.java:71)
I do not yet have a description of what they were doing that led up to the
corruption, but apparently they have seen this type of corruption before with
this application. Any ideas what could cause it? This is actually occurring
with 10.2. Does it look related to this issue or look like something else?
> 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
>
>
> 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.