
|
If you were logged in you would be able to see more operations.
|
|
|
| Resolution Date: |
28/Dec/05 06:47 PM
|
|
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)
|
|
Description
|
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)
|
Show » |
| No work has yet been logged on this issue.
|
|