[ 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