You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Catalina Wei (JIRA)" <ji...@apache.org> on 2010/08/20 02:30:16 UTC
[jira] Resolved: (OPENJPA-1752) TestPessimisticLocks JUNIT test
produced inconsistent behavior with various backends
[ https://issues.apache.org/jira/browse/OPENJPA-1752?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Catalina Wei resolved OPENJPA-1752.
-----------------------------------
Assignee: Catalina Wei
Fix Version/s: 2.1.0
Resolution: Fixed
Fixed testcase
> TestPessimisticLocks JUNIT test produced inconsistent behavior with various backends
> ------------------------------------------------------------------------------------
>
> Key: OPENJPA-1752
> URL: https://issues.apache.org/jira/browse/OPENJPA-1752
> Project: OpenJPA
> Issue Type: Bug
> Components: jpa
> Affects Versions: 2.0.1, 2.1.0
> Reporter: Catalina Wei
> Assignee: Catalina Wei
> Fix For: 2.1.0
>
>
> TestPessimisticLocks JUNIT tests pass all assertions for Derby backend, but failures are seen on DB2, MySQL, Oracle.
> It is likely that failures may also occur on other backends.
> There could be some problem in OpenJPA code in handling pessimistic lock requests.
> There is also inconsistency in reporting exceptions - lock timout or query timeout should be non-fatal; but with Derby the PessimisticLockException is reported which is considered fatal. It is also possible that the test scenarios are problematic.
> TestPessisimiticLocks has 5 test cases, the last test case worked for all backend. Problem test cases are listed as below:
> 1. testFindAfterQueryWithPessimisticLocks()
> 2. testFindAfterQueryOrderByWithPessimisticLocks()
> 3. testQueryAfterFindWithPessimisticLocks()
> 4. testQueryOrderByAfterFindWithPessimisticLocks()
> The failure symptoms are summarized below - Each test contains 2 variations.
> The dot notation, for example, 1.1 is the first scenario in testFindAfterQueryWithPessimisticLocks()
> Each test scenario is either expecting an exception or No exception; if no exception is reported, the SELECT sql got results from database.
>
> Tests Derby DB2V9.7 Oracle10gXE 10.2.0.1.0 MySQL 5.1.39/JDBC 5.1.7
> ====================================================================================================================================
> 1.1 PessimisticLockException LockTimeoutException LockTimeoutException LockTimeoutException
> 1.2 No exception No exception No exception No exception
> 2.1 PessimisticLockException LockTimeoutException LockTimeoutException LockTimeoutException
> 2.2 No exception LockTimeoutException No exception LockTimeoutException
> 3.1 No exception QueryTimeoutException process hang PersistenceException: Server shutdown [code=1053, state=08S01]
> 3.2 PessimisticLockException QueryTimeoutException process hang PersistenceException: Server shutdown [code=1053, state=08S01]
> 4.1 No exception QueryTimeoutException No exception QueryTimeoutException
> 4.2 PessimisticLockException QueryTimeoutException process hang QueryTimeoutException
> NOTE: for Oracle, many test scenarios caused process to hang (test 3.1, 3.2, and 4.2) - ie. test never run to completion
> for MySQL, Server shutdown (test 3.1 and 3.2)
> here is the stack trace:
> org.apache.openjpa.persistence.PersistenceException:Server shutdown in progress {prepstmnt 33525219 SELECT t1.id, t1.name FROM Employee t0 LEFT OUTER JOIN Department t1 ON t0.FK_DEPT = t1.id WHERE (t0.id < ?) LIMIT ?, ? FOR UPDATE [params=?, ?, ?]} [code=1053, state=08S01]
> <openjpa-2.1.0-SNAPSHOT-rexported fatal general error> org.apache.openjpa.persistence.PersistenceException: Server shutdown in progress {prepstmnt 33525219 SELECT t1.id, t1.name FROM Employee t0 LEFT OUTER JOIN Department t1 ON t0.FK_DEPT = t1.id WHERE (t0.id < ?) LIMIT ?, ? FOR UPDATE [params=?, ?, ?]} [code=1053, state=08S01]
> FailedObject: select e.department from Employee e where e.id < 10 [java.lang.String]
> at org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4855)
> at org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4815)
> at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:137)
> at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:118)
> at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:70)
> at org.apache.openjpa.jdbc.kernel.SelectResultObjectProvider.handleCheckedException(SelectResultObjectProvider.java:155)
> at org.apache.openjpa.kernel.QueryImpl$PackingResultObjectProvider.handleCheckedException(QueryImpl.java:2109)
> at org.apache.openjpa.lib.rop.EagerResultList.<init>(EagerResultList.java:40)
> at org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1246)
> at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1005)
> at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:861)
> at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:792)
> at org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:542)
> at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:288)
> at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:302)
> at org.apache.openjpa.persistence.lockmgr.TestPessimisticLocks.testQueryAfterFindWithPessimisticLocks(TestPessimisticLocks.java:271)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> at java.lang.reflect.Method.invoke(Unknown Source)
> at junit.framework.TestCase.runTest(TestCase.java:154)
> at org.apache.openjpa.persistence.test.AbstractPersistenceTestCase.runTest(AbstractPersistenceTestCase.java:516)
> at junit.framework.TestCase.runBare(TestCase.java:127)
> at org.apache.openjpa.persistence.test.AbstractPersistenceTestCase.runBare(AbstractPersistenceTestCase.java:503)
> at org.apache.openjpa.persistence.test.AbstractPersistenceTestCase.runBare(AbstractPersistenceTestCase.java:479)
> at junit.framework.TestResult$1.protect(TestResult.java:106)
> at junit.framework.TestResult.runProtected(TestResult.java:124)
> at junit.framework.TestResult.run(TestResult.java:109)
> at junit.framework.TestCase.run(TestCase.java:118)
> at org.apache.openjpa.persistence.test.AbstractPersistenceTestCase.run(AbstractPersistenceTestCase.java:179)
> at junit.framework.TestSuite.runTest(TestSuite.java:208)
> at junit.framework.TestSuite.run(TestSuite.java:203)
> at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
> at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
> Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: Server shutdown in progress {prepstmnt 33525219 SELECT t1.id, t1.name FROM Employee t0 LEFT OUTER JOIN Department t1 ON t0.FK_DEPT = t1.id WHERE (t0.id < ?) LIMIT ?, ? FOR UPDATE [params=?, ?, ?]} [code=1053, state=08S01]
> at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:274)
> at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:258)
> at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$3(LoggingConnectionDecorator.java:257)
> at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeQuery(LoggingConnectionDecorator.java:1176)
> at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:278)
> at org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeQuery(JDBCStoreManager.java:1773)
> at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:268)
> at org.apache.openjpa.jdbc.sql.SelectImpl.executeQuery(SelectImpl.java:499)
> at org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:424)
> at org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:382)
> at org.apache.openjpa.jdbc.kernel.SelectResultObjectProvider.open(SelectResultObjectProvider.java:94)
> at org.apache.openjpa.kernel.QueryImpl$PackingResultObjectProvider.open(QueryImpl.java:2068)
> at org.apache.openjpa.lib.rop.EagerResultList.<init>(EagerResultList.java:34)
> ... 30 more
> NestedThrowables:
> com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Server shutdown in progress
> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
> at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
> at java.lang.reflect.Constructor.newInstance(Unknown Source)
> at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
> at com.mysql.jdbc.Util.getInstance(Util.java:381)
> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3515)
> at com.mysql.jdbc.MysqlIO.nextRowFast(MysqlIO.java:1545)
> at com.mysql.jdbc.MysqlIO.nextRow(MysqlIO.java:1401)
> at com.mysql.jdbc.MysqlIO.readSingleRowSet(MysqlIO.java:2829)
> at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:468)
> at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:2534)
> at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:1749)
> at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2159)
> at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2554)
> at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1761)
> at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1912)
> at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)
> at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:280)
> at org.apache.openjpa.lib.jdbc.JDBCEventConnectionDecorator$EventPreparedStatement.executeQuery(JDBCEventConnectionDecorator.java:270)
> at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:278)
> at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeQuery(LoggingConnectionDecorator.java:1174)
> at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:278)
> at org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeQuery(JDBCStoreManager.java:1773)
> at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:268)
> at org.apache.openjpa.jdbc.sql.SelectImpl.executeQuery(SelectImpl.java:499)
> at org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:424)
> at org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:382)
> at org.apache.openjpa.jdbc.kernel.SelectResultObjectProvider.open(SelectResultObjectProvider.java:94)
> at org.apache.openjpa.kernel.QueryImpl$PackingResultObjectProvider.open(QueryImpl.java:2068)
> at org.apache.openjpa.lib.rop.EagerResultList.<init>(EagerResultList.java:34)
> at org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1246)
> at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1005)
> at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:861)
> at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:792)
> at org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:542)
> at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:288)
> at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:302)
> at org.apache.openjpa.persistence.lockmgr.TestPessimisticLocks.testQueryAfterFindWithPessimisticLocks(TestPessimisticLocks.java:271)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> at java.lang.reflect.Method.invoke(Unknown Source)
> at junit.framework.TestCase.runTest(TestCase.java:154)
> at org.apache.openjpa.persistence.test.AbstractPersistenceTestCase.runTest(AbstractPersistenceTestCase.java:516)
> at junit.framework.TestCase.runBare(TestCase.java:127)
> at org.apache.openjpa.persistence.test.AbstractPersistenceTestCase.runBare(AbstractPersistenceTestCase.java:503)
> at org.apache.openjpa.persistence.test.AbstractPersistenceTestCase.runBare(AbstractPersistenceTestCase.java:479)
> at junit.framework.TestResult$1.protect(TestResult.java:106)
> at junit.framework.TestResult.runProtected(TestResult.java:124)
> at junit.framework.TestResult.run(TestResult.java:109)
> at junit.framework.TestCase.run(TestCase.java:118)
> at org.apache.openjpa.persistence.test.AbstractPersistenceTestCase.run(AbstractPersistenceTestCase.java:179)
> at junit.framework.TestSuite.runTest(TestSuite.java:208)
> at junit.framework.TestSuite.run(TestSuite.java:203)
> at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
> at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.