[
https://issues.apache.org/jira/browse/DERBY-5312?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13064540#comment-13064540
]
Dag H. Wanvik commented on DERBY-5312:
--------------------------------------
Thanks for looking at this Mike! I agree that closeContainer should be
synchronized on the container w.r.t handling fileData, since it will be
accessed by other threads during IO which are oblivious to the reopening taking
place. All such use cases are synchronized on "this", or are related to
creation and opening. As far as I can see, closeContainer doesn't touch any
other container state variables. "isStub" is method local (once defined and
used on CREATE_CONTAINER_ACTION, once defined and used in
OPEN_CONTAINER_ACTION), so that should be OK.
As for simplifying to just to just resetting fileData, I'll look into if we
could do that. "file" is also method local.and "fileName" is only set in
OPEN_CONTAINER_ACTION and only ever used as a string when throwing exceptions,
so it should be possible to simplify reopening.
> InterruptResilienceTest failed with ERROR 40XD1: Container was opened in
> read-only mode.
> ----------------------------------------------------------------------------------------
>
> Key: DERBY-5312
> URL: https://issues.apache.org/jira/browse/DERBY-5312
> Project: Derby
> Issue Type: Bug
> Components: Store
> Affects Versions: 10.9.0.0
> Environment: Oracle Solaris 11 Express snv_151a X86
> java version "1.7.0"
> Java(TM) SE Runtime Environment (build 1.7.0-b147)
> Java HotSpot(TM) Server VM (build 21.0-b17, mixed mode)
> Reporter: Knut Anders Hatlen
> Assignee: Dag H. Wanvik
> Attachments: derby-5312a.diff, derby.log, error-stacktrace.out
>
>
> WorkerThread failed with this exception:
> ERROR 40XD1: Container was opened in read-only mode.
> at
> org.apache.derby.iapi.error.StandardException.newException(StandardException.java:276)
> at
> org.apache.derby.impl.store.raw.data.BaseContainer.use(BaseContainer.java:562)
> at
> org.apache.derby.impl.store.raw.data.BaseContainerHandle.useContainer(BaseContainerHandle.java:834)
> at
> org.apache.derby.impl.store.raw.data.BaseDataFileFactory.openContainer(BaseDataFileFactory.java:773)
> at
> org.apache.derby.impl.store.raw.data.BaseDataFileFactory.openContainer(BaseDataFileFactory.java:589)
> at
> org.apache.derby.impl.store.raw.xact.Xact.openContainer(Xact.java:1316)
> at
> org.apache.derby.impl.store.access.btree.OpenBTree.init(OpenBTree.java:382)
> at
> org.apache.derby.impl.store.access.btree.BTreeController.init(BTreeController.java:1225)
> at
> org.apache.derby.impl.store.access.btree.index.B2IController.init(B2IController.java:140)
> at org.apache.derby.impl.store.access.btree.index.B2I.open(B2I.java:824)
> at
> org.apache.derby.impl.store.access.RAMTransaction.openConglomerate(RAMTransaction.java:476)
> at
> org.apache.derby.impl.store.access.RAMTransaction.openCompiledConglomerate(RAMTransaction.java:1293)
> at
> org.apache.derby.impl.sql.execute.IndexChanger.openIndexCC(IndexChanger.java:507)
> at
> org.apache.derby.impl.sql.execute.IndexChanger.insertAndCheckDups(IndexChanger.java:438)
> at
> org.apache.derby.impl.sql.execute.IndexChanger.doInsert(IndexChanger.java:383)
> at
> org.apache.derby.impl.sql.execute.IndexChanger.insert(IndexChanger.java:590)
> at
> org.apache.derby.impl.sql.execute.IndexSetChanger.insert(IndexSetChanger.java:268)
> at
> org.apache.derby.impl.sql.execute.RowChangerImpl.insertRow(RowChangerImpl.java:453)
> at
> org.apache.derby.impl.sql.execute.InsertResultSet.normalInsertCore(InsertResultSet.java:999)
> at
> org.apache.derby.impl.sql.execute.InsertResultSet.open(InsertResultSet.java:519)
> 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:1242)
> at
> org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(EmbedPreparedStatement.java:1686)
> at
> org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeUpdate(EmbedPreparedStatement.java:308)
> at
> org.apache.derbyTesting.functionTests.tests.store.InterruptResilienceTest$WorkerThread.run(InterruptResilienceTest.java:449)
> I was testing a patch for DERBY-4620 (estimate-sizes.diff), but I think the
> failure isn't related to those changes.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira