You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Marco (JIRA)" <ji...@apache.org> on 2014/03/06 06:51:42 UTC

[jira] [Commented] (DERBY-6175) testComparisonAcrossPages failure - java.sql.SQLNonTransientConnectionException: No current connection.

    [ https://issues.apache.org/jira/browse/DERBY-6175?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13922047#comment-13922047 ] 

Marco commented on DERBY-6175:
------------------------------

Hi Knut,

thanks a lot for your reply! And sorry for my late response - I was *extremely* busy during the last weeks.

Well, the "No current connection" exception should not be a direct consequence of the connection getting closed by the first exception, because I'm closing Derby explicitly and re-opening the connection. My code tries this multiple times, but it seems to me that it always fails, if it failed once (though I'm not 100% sure).

Thus, it can only be a consequence of the first exception, if the database is permanently corrupted by the first error or if there is data still lingering in memory that is not cleaned up despite my closing the connection and explicitly garbage-collecting.

It is unfortunately not possible to "reliably reproduce this bug" - this bug is clearly a Heisenbug. You can see this when browsing this build history:

https://codewizards.co/jenkins/job/co.codewizards.cloudstore/

Look for the yellow icons (indicating a test failure). Nearly all test failures are caused by this derby bug. If the error message is >>Schema Transaction threw exception "Add classes to Catalog "", Schema "ROOT""<<, then you'll find the "No current connection" to be the cause. I permanently conserved build 200 showing this error:

https://codewizards.co/jenkins/job/co.codewizards.cloudstore/200/

But as said, this is not the only occurrence of the error - see builds 223, 225, 232, 233 and many more.

As you can also see there, the test failing is always a different one. And despite the bug, many builds succeed. The code failing is always the same:

java.sql.SQLNonTransientConnectionException: No current connection.
	at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.Util.noCurrentConnection(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedConnection.checkIfClosed(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedConnection.getAutoCommit(Unknown Source)
	at org.datanucleus.store.rdbms.datasource.dbcp.DelegatingConnection.getAutoCommit(DelegatingConnection.java:338)
	at org.datanucleus.store.rdbms.datasource.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.getAutoCommit(PoolingDataSource.java:237)
	at org.datanucleus.store.rdbms.AbstractSchemaTransaction.execute(AbstractSchemaTransaction.java:131)
	at org.datanucleus.store.rdbms.RDBMSStoreManager.addClasses(RDBMSStoreManager.java:1605)
	at org.datanucleus.store.AbstractStoreManager.addClass(AbstractStoreManager.java:954)
	at org.datanucleus.store.AbstractStoreManager.getExtent(AbstractStoreManager.java:1061)
	at org.datanucleus.ExecutionContextImpl.getExtent(ExecutionContextImpl.java:5558)
	at org.datanucleus.api.jdo.JDOPersistenceManager.getExtent(JDOPersistenceManager.java:1560)
	at org.datanucleus.api.jdo.JDOPersistenceManager.getExtent(JDOPersistenceManager.java:1581)
	at co.codewizards.cloudstore.core.repo.local.LocalRepoManagerImpl.initPersistenceCapableClasses(LocalRepoManagerImpl.java:362)
	at co.codewizards.cloudstore.core.repo.local.LocalRepoManagerImpl.initPersistenceManagerFactoryAndPersistenceCapableClassesWithRetry(LocalRepoManagerImpl.java:330)
	at co.codewizards.cloudstore.core.repo.local.LocalRepoManagerImpl.initPersistenceManagerFactory(LocalRepoManagerImpl.java:275)
	at co.codewizards.cloudstore.core.repo.local.LocalRepoManagerImpl.<init>(LocalRepoManagerImpl.java:134)
	at co.codewizards.cloudstore.core.repo.local.LocalRepoManagerFactory.createLocalRepoManagerForNewRepository(LocalRepoManagerFactory.java:144)
	at co.codewizards.cloudstore.core.repo.sync.RepoToRepoSyncTest.syncFromRemoteToLocal(RepoToRepoSyncTest.java:80)
	at co.codewizards.cloudstore.core.repo.sync.RepoToRepoSyncTest.syncMovedFile(RepoToRepoSyncTest.java:497)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
	at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
	at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
	at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
	at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)
Caused by: java.sql.SQLException: No current connection.
	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source)
	... 52 more

I did not count how often exactly this code succeeds and how often it fails, but I can give you a rough estimation: CloudStore has currently about 50 tests. Roughly 45 of these tests run through this code location twice, thus said code location is invoked ca. 90 times (in total) per build. Most builds having the problem encounter it only once (very few 2 or 3 times). As you can see in the build history, between 5% and 10% of the builds fail (with the "No current connection" exception). That makes a probability of the bug of roughly 0.5% to 1%.

How often the bug occurs seems to depend primarily on the hardware being used. On my development machine, being much faster and having more RAM than the build server, the error occurs far more often. I did not count, but I've the impression that here about 1 in 3 builds fails, resulting in a bug probability of roughly 3%.

Given the low probability of the bug, it seems impossible to provide "a test case that *reliably* reproduces this bug". However, the test suite of CloudStore produces this bug with a pretty high probability and is easy to obtain + run (git clone + maven clean install).

See: http://cloudstore.codewizards.co/0.9.1/documentation/development.html

I hope that this is helpful. Maybe you find some more information in the (public) build logs on our jenkins: https://codewizards.co/jenkins/job/co.codewizards.cloudstore/

Please let me know, if there's sth. more I can do to assist you in tracking down this bug.

Best regards, Marco :-)

> testComparisonAcrossPages failure - java.sql.SQLNonTransientConnectionException: No current connection.
> -------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-6175
>                 URL: https://issues.apache.org/jira/browse/DERBY-6175
>             Project: Derby
>          Issue Type: Bug
>          Components: Test
>    Affects Versions: 10.10.1.4
>            Reporter: Mamta A. Satoor
>
> Failure on 10.10.1.2(1466316) windows machine with IBM 1.7
> http://people.apache.org/~myrnavl/derby_test_results/v10_10/windows/testlog/ibm17/1466316-suites.All_diff.txt
> 1) testComparisonAcrossPages(org.apache.derbyTesting.functionTests.tests.lang.NullableUniqueConstraintTest)java.sql.SQLNonTransientConnectionException: No current connection.
> 	at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
> 	at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
> 	at org.apache.derby.client.am.PreparedStatement.setString(Unknown Source)
> 	at org.apache.derbyTesting.functionTests.tests.lang.NullableUniqueConstraintTest.testComparisonAcrossPages(NullableUniqueConstraintTest.java:393)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:88)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
> 	at org.apache.derbyTesting.junit.BaseTestCase.runBare(BaseTestCase.java:117)
> 	at org.apache.derbyTesting.junit.BaseJDBCTestCase.runBareOverridable(BaseJDBCTestCase.java:442)
> 	at org.apache.derbyTesting.junit.BaseJDBCTestCase.runBare(BaseJDBCTestCase.java:459)
> 	at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
> 	at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
> 	at junit.extensions.TestSetup.run(TestSetup.java:25)
> 	at org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:57)
> 	at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
> 	at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
> 	at junit.extensions.TestSetup.run(TestSetup.java:25)
> 	at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
> 	at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
> 	at junit.extensions.TestSetup.run(TestSetup.java:25)
> 	at org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:57)
> Caused by: org.apache.derby.client.am.SqlException: No current connection.
> 	at org.apache.derby.client.am.Statement.checkForClosedStatement(Unknown Source)
> 	at org.apache.derby.client.am.PreparedStatement.getColumnMetaDataX(Unknown Source)
> 	... 46 more



--
This message was sent by Atlassian JIRA
(v6.2#6252)