[ http://issues.apache.org/jira/browse/JDO-72?page=all ] Andy Jefferson resolved JDO-72: -------------------------------
Resolution: Fixed Assign To: Andy Jefferson (was: Erik Bengtson) Fixed in JPOX CVS - builds dated 29/12/2005 or later. Now returns 3 nested exceptions, and the test passes :-) > Test api.persistencemanager.OptimisticFailure hangs > --------------------------------------------------- > > Key: JDO-72 > URL: http://issues.apache.org/jira/browse/JDO-72 > Project: JDO > Type: Bug > Components: tck20 > Environment: JPOX, Derby > Reporter: Craig Russell > Assignee: Andy Jefferson > > This test is designed to create conflicts in the database from two different > JDO transactions. The changes in the cache must not be visible in the > datastore or timeouts will occur. The exception here occurs when the second > optimistic JDO transaction attempts to read a row that has been changed in > the cache by the first optimistic JDO transaction. > private void runTestOptimistic(PersistenceManager pm1, > PersistenceManager pm2, > PersistenceManager pm3) { > if (!isOptimisticSupported()) { > if (debug) > logger.debug("OptimisticFailure tests not run; Optimistic not > supported"); > return; > } > Transaction tx1 = pm1.currentTransaction(); > Transaction tx2 = pm2.currentTransaction(); > Transaction tx3 = pm3.currentTransaction(); > try { > tx1.setOptimistic(true); > tx2.setOptimistic(true); > > // create four instances to test > tx1.begin(); > pm1.makePersistent(p1); > pm1.makePersistent(p2); > pm1.makePersistent(p3); > pm1.makePersistent(p4); > pm1.makePersistent(p5); > p1oid = pm1.getObjectId(p1); > p2oid = pm1.getObjectId(p2); > p3oid = pm1.getObjectId(p3); > p4oid = pm1.getObjectId(p4); > p5oid = pm1.getObjectId(p5); > tx1.commit(); > > // update/delete the instances in tx1 > tx1.begin(); > PCPoint p1tx1 = (PCPoint)pm1.getObjectById(p1oid, true); > PCPoint p2tx1 = (PCPoint)pm1.getObjectById(p2oid, true); > PCPoint p3tx1 = (PCPoint)pm1.getObjectById(p3oid, true); > PCPoint p4tx1 = (PCPoint)pm1.getObjectById(p4oid, true); > p1tx1.setX(101); > p2tx1.setX(201); > pm1.deletePersistent(p3tx1); > pm1.deletePersistent(p4tx1); > > // update/delete the instances in tx2 > tx2.begin(); > *** PCPoint p1tx2 = (PCPoint)pm2.getObjectById(p1oid, true); *** this is > where the test hangs *** > PCPoint p2tx2 = (PCPoint)pm2.getObjectById(p2oid, true); > PCPoint p3tx2 = (PCPoint)pm2.getObjectById(p3oid, true); > PCPoint p4tx2 = (PCPoint)pm2.getObjectById(p4oid, true); > PCPoint p5tx2 = (PCPoint)pm2.getObjectById(p5oid, true); > p1tx2.setX(102); > // pm2.deletePersistent(p2tx2); // this should fail but succeeds > due to an RI bug > p3tx2.setX(202); > pm2.deletePersistent(p4tx2); > p5tx2.setX(502); // this change should not be committed > Set expectedFailedObjects = new HashSet(); > expectedFailedObjects.add(p1tx2); > // expectedFailedObjects.add(p2tx2); > expectedFailedObjects.add(p3tx2); > expectedFailedObjects.add(p4tx2); > > // commit tx1 (should succeed) > tx1.commit(); > tx1 = null; > > // commit tx2 (should fail) > try { > tx2.commit(); > fail(ASSERTION_FAILED, "concurrent commit not detected"); > } > catch (JDOOptimisticVerificationException ex) { > // verify the correct information in the exception > RUN OptimisticFailure.test[INFO] tck - Exception during setUp or runtest: > <javax.jdo.JDODataStoreException: Fetch request failed: SELECT > PCPOINT.X,PCPOINT.Y,PCPOINT.ID FROM PCPOINT WHERE (PCPOINT.ID = ?) > [java] NestedThrowables: > [java] SQL Exception: A lock could not be obtained within the time > requested>javax.jdo.JDODataStoreException: Fetch request failed: SELECT > PCPOINT.X,PCPOINT.Y,PCPOINT.ID FROM PCPOINT WHERE (PCPOINT.ID = ?) > [java] at > org.jpox.store.rdbms.request.FetchRequest.execute(FetchRequest.java:195) > [java] at > org.jpox.store.rdbms.table.ClassTable.fetch(ClassTable.java:1739) > [java] at org.jpox.store.StoreManager.fetch(StoreManager.java:665) > [java] at > org.jpox.state.StateManagerImpl.loadDFGFields(StateManagerImpl.java:1573) > [java] at > org.jpox.state.StateManagerImpl.loadDefaultFetchGroup(StateManagerImpl.java:1666) > [java] at > org.jpox.state.StateManagerImpl.validate(StateManagerImpl.java:3456) > [java] at > org.jpox.AbstractPersistenceManager.getObjectById(AbstractPersistenceManager.java:2204) > [java] at > org.jpox.AbstractPersistenceManager.getObjectById(AbstractPersistenceManager.java:2107) > [java] at > org.apache.jdo.tck.api.persistencemanager.OptimisticFailure.runTestOptimistic(OptimisticFailure.java:139) > [java] at > org.apache.jdo.tck.api.persistencemanager.OptimisticFailure.test(OptimisticFailure.java:83) > [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > [java] at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > [java] at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > [java] at java.lang.reflect.Method.invoke(Method.java:324) > [java] at junit.framework.TestCase.runTest(TestCase.java:154) > [java] at org.apache.jdo.tck.JDO_Test.runBare(JDO_Test.java:181) > [java] at junit.framework.TestResult$1.protect(TestResult.java:106) > [java] at > junit.framework.TestResult.runProtected(TestResult.java:124) > [java] at junit.framework.TestResult.run(TestResult.java:109) > [java] at junit.framework.TestCase.run(TestCase.java:118) > [java] at junit.framework.TestSuite.runTest(TestSuite.java:208) > [java] at junit.framework.TestSuite.run(TestSuite.java:203) > [java] at junit.framework.TestSuite.runTest(TestSuite.java:208) > [java] at junit.framework.TestSuite.run(TestSuite.java:203) > [java] at junit.textui.TestRunner.doRun(TestRunner.java:116) > [java] at junit.textui.TestRunner.doRun(TestRunner.java:109) > [java] at > org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:128) > [java] at > org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:106) > [java] NestedThrowablesStackTrace: > [java] ERROR 40XL1: A lock could not be obtained within the time requested > [java] at > org.apache.derby.iapi.error.StandardException.newException(StandardException.java) > [java] at > org.apache.derby.impl.services.locks.LockSet.lockObject(LockSet.java) > [java] at > org.apache.derby.impl.services.locks.SinglePool.lockAnObject(SinglePool.java) > [java] at > org.apache.derby.impl.services.locks.SinglePool.lockObject(SinglePool.java) > [java] at > org.apache.derby.impl.store.raw.xact.RowLocking2.lockRecordForRead(RowLocking2.java) > [java] at > org.apache.derby.impl.store.access.heap.HeapController.lockRow(HeapController.java) > [java] at > org.apache.derby.impl.store.access.heap.HeapController.lockRow(HeapController.java) > [java] at > org.apache.derby.impl.store.access.btree.index.B2IRowLocking3.lockRowOnPage(B2IRowLocking3.java) > [java] at > org.apache.derby.impl.store.access.btree.index.B2IRowLocking3._lockScanRow(B2IRowLocking3.java) > [java] at > org.apache.derby.impl.store.access.btree.index.B2IRowLockingRR.lockScanRow(B2IRowLockingRR.java) > [java] at > org.apache.derby.impl.store.access.btree.BTreeForwardScan.fetchRows(BTreeForwardScan.java) > [java] at > org.apache.derby.impl.store.access.btree.BTreeScan.fetchNext(BTreeScan.java) > [java] at > org.apache.derby.impl.sql.execute.TableScanResultSet.getNextRowCore(TableScanResultSet.java) > [java] at > org.apache.derby.impl.sql.execute.IndexRowToBaseRowResultSet.getNextRowCore(IndexRowToBaseRowResultSet.java) > [java] at > org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.getNextRowCore(ProjectRestrictResultSet.java) > [java] at > org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.getNextRow(BasicNoPutResultSetImpl.java) > [java] at > org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(EmbedResultSet.java) > [java] at > org.apache.derby.impl.jdbc.EmbedResultSet.next(EmbedResultSet.java) > [java] at > org.jpox.store.rdbms.request.FetchRequest.execute(FetchRequest.java:157) > [java] at > org.jpox.store.rdbms.table.ClassTable.fetch(ClassTable.java:1739) > [java] at org.jpox.store.StoreManager.fetch(StoreManager.java:665) > [java] at > org.jpox.state.StateManagerImpl.loadDFGFields(StateManagerImpl.java:1573) > [java] at > org.jpox.state.StateManagerImpl.loadDefaultFetchGroup(StateManagerImpl.java:1666) > [java] at > org.jpox.state.StateManagerImpl.validate(StateManagerImpl.java:3456) > [java] at > org.jpox.AbstractPersistenceManager.getObjectById(AbstractPersistenceManager.java:2204) > [java] at > org.jpox.AbstractPersistenceManager.getObjectById(AbstractPersistenceManager.java:2107) > [java] at > org.apache.jdo.tck.api.persistencemanager.OptimisticFailure.runTestOptimistic(OptimisticFailure.java:139) > [java] at > org.apache.jdo.tck.api.persistencemanager.OptimisticFailure.test(OptimisticFailure.java:83) > [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > [java] at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > [java] at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > [java] at java.lang.reflect.Method.invoke(Method.java:324) > [java] at junit.framework.TestCase.runTest(TestCase.java:154) > [java] at org.apache.jdo.tck.JDO_Test.runBare(JDO_Test.java:181) > [java] at junit.framework.TestResult$1.protect(TestResult.java:106) > [java] at > junit.framework.TestResult.runProtected(TestResult.java:124) > [java] at junit.framework.TestResult.run(TestResult.java:109) > [java] at junit.framework.TestCase.run(TestCase.java:118) > [java] at junit.framework.TestSuite.runTest(TestSuite.java:208) > [java] at junit.framework.TestSuite.run(TestSuite.java:203) > [java] at junit.framework.TestSuite.runTest(TestSuite.java:208) > [java] at junit.framework.TestSuite.run(TestSuite.java:203) > [java] at junit.textui.TestRunner.doRun(TestRunner.java:116) > [java] at junit.textui.TestRunner.doRun(TestRunner.java:109) > [java] at > org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:128) > [java] at > org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:106) -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira