db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kathey Marsden (JIRA)" <j...@apache.org>
Subject [jira] Updated: (DERBY-4960) Race condition in FileContainer#allocCache when reopening RAFContainer after interrupt
Date Wed, 12 Jan 2011 18:08:48 GMT

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

Kathey Marsden updated DERBY-4960:
----------------------------------

    Fix Version/s: 10.8.0.0

> Race condition in FileContainer#allocCache when reopening RAFContainer after interrupt
> --------------------------------------------------------------------------------------
>
>                 Key: DERBY-4960
>                 URL: https://issues.apache.org/jira/browse/DERBY-4960
>             Project: Derby
>          Issue Type: Bug
>          Components: Store
>    Affects Versions: 10.8.0.0
>            Reporter: Dag H. Wanvik
>            Assignee: Dag H. Wanvik
>             Fix For: 10.8.0.0
>
>         Attachments: derby-4960-1.diff, derby-4960-1.stat, derby-4960-2.diff, derby-4960-2.stat,
InterruptTest.java
>
>
> The symptom is an ArrayIndexOutOfBoundsException:
> java.lang.ArrayIndexOutOfBoundsException: -1
> 	at org.apache.derby.impl.store.raw.data.AllocationCache.validate(AllocationCache.java:581)
> 	at org.apache.derby.impl.store.raw.data.AllocationCache.getLastPageNumber(AllocationCache.java:122)
> 	at org.apache.derby.impl.store.raw.data.FileContainer.pageValid(FileContainer.java:2067)
> 	at org.apache.derby.impl.store.raw.data.FileContainer.getUserPage(FileContainer.java:2522)
> 	at org.apache.derby.impl.store.raw.data.FileContainer.getInsertablePage(FileContainer.java:2867)
> 	at org.apache.derby.impl.store.raw.data.FileContainer.getPageForInsert(FileContainer.java:3017)
> 	at org.apache.derby.impl.store.raw.data.BaseContainerHandle.getPageForInsert(BaseContainerHandle.java:372)
> 	at org.apache.derby.impl.store.access.heap.HeapController.doInsert(HeapController.java:244)
> 	at org.apache.derby.impl.store.access.heap.HeapController.insertAndFetchLocation(HeapController.java:599)
> 	at org.apache.derby.impl.sql.execute.RowChangerImpl.insertRow(RowChangerImpl.java:452)
> 	at org.apache.derby.impl.sql.execute.InsertResultSet.normalInsertCore(InsertResultSet.java:1028)
> 	at org.apache.derby.impl.sql.execute.InsertResultSet.open(InsertResultSet.java:505)
> 	at org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java:436)
> 	at org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:317)
> 	at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1241)
> 	at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(EmbedPreparedStatement.java:1686)
> 	at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeUpdate(EmbedPreparedStatement.java:308)
> 	at InterruptTest$WorkerThread.run(InterruptTest.java:261
> This can only happen if another thread has called allocCache.reset while the thread above
is in the loop in validate, so as to set numExtents to 0.
> The synchronization of allocCache is documented in the Javadoc of the FileContainer class:
all accesses to allocCache should synchronize.
> This is omitted when we reopen: FileContainer#openContainer calls readHeader -> readHeaderFromArray
-> allocCache.reset

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message