db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rick Hillegas (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (DERBY-5389) SequenceGeneratorTest failures with weme 6.2 sane build ASSERT FAILED Identity being changed on a live cacheable
Date Mon, 12 Sep 2011 16:28:09 GMT

     [ https://issues.apache.org/jira/browse/DERBY-5389?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Rick Hillegas updated DERBY-5389:
---------------------------------

    Attachment: derby-5389-01-aa-nullIdentity.diff

Attaching derby-5389-01-aa-nullIdentity.diff. This adds some defensive logic to the identity
setting method of SequenceUpdater. Without the defensive logic, a SequenceUpdater can be in
an ambiguous state if there is an error instantiating a SequenceGenerator. I am running the
full regression tests now.

On an insane build and on Java 5 or higher, the ambiguous state appears to be harmless. The
SequenceUpdater recovers from the ambiguity and correctly sets its state the next time that
it actually becomes usable. However, if you are running on JDK 1.4 or CDC/FP 1.1, then Derby
uses a different cache module (Clock instead of ConcurrentCache). The path through ConcurrentCache
ends up cleaning the SequenceUpdater after the instantiation error, setting it to an unambiguously
clean state.. The path through Clock does not clean the SequenceUpdater and this causes the
Assertion to be raised the next time you try to set the identity of the ambiguous SequenceUpdater.

The fix is to have the SequenceUpdater set its key to null if it can't instantiate a SequenceGenerator.
This makes its internal state consistent and prevents us from raising the Assertion.

With the fix, the repro runs cleanly on sane builds on JDK 1.4 and phoneME. In addition, the
SequenceGenerator test runs cleanly for me on Java 6 and JDK 1.4. The test also gets further
than it used to on phoneME. However, the test hangs at one point.  So there might be another
problem behind this one.

Kathey, could you test-drive the patch on a sane build on weme 6.2?


Touches the following file:

M      java/engine/org/apache/derby/impl/sql/catalog/SequenceUpdater.java


> SequenceGeneratorTest failures with weme 6.2 sane build ASSERT FAILED Identity being
changed on a live cacheable
> ----------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-5389
>                 URL: https://issues.apache.org/jira/browse/DERBY-5389
>             Project: Derby
>          Issue Type: Bug
>         Environment: weme 6.2
> java.runtime.version=2.4
> java.fullversion=IBM J9 2.4 Windows XP x86-32  (JIT enabled, AOT enabled)
> J9VM - 20080919_023055_lHdFGQ
> JIT  - r9.weme62_20080724_2131
> GC   - 20080609_AA
>            Reporter: Kathey Marsden
>         Attachments: DERBY_5389.java, derby-5389-01-aa-nullIdentity.diff
>
>
> I noticed these failures on trunk  10.9.0.0  1160489 with weme 6.2 and a sane build.
They may have been around for some time as the nightlies only do an insane run with weme 6.2
and developers don't run weme tests with sane build frequently.
> 2) test_09_defaultRangeSize(org.apache.derbyTesting.functionTests.tests.lang.SequenceGeneratorTest)java.sql.SQLException:
The exception 'org.apache.de
> rby.shared.common.sanity.AssertFailure: ASSERT FAILED Identity being changed on a live
cacheable. Old uuidString = ff45762e-0131-f3dc-5f35-ffff92a7798
> d' was thrown while evaluating an expression.
>         at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:45)
>         at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Util.java:142)
>         at org.apache.derby.impl.jdbc.Util.seeNextException(Util.java:278)
>         at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:407)
>         at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java:348)
>         at org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java:2290)
>         at org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java:82)
>         at org.apache.derby.impl.jdbc.EmbedResultSet.closeOnTransactionError(EmbedResultSet.java:4409)
>         at org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(EmbedResultSet.java:472)
>         at org.apache.derby.impl.jdbc.EmbedResultSet.next(EmbedResultSet.java:376)
>         at org.apache.derbyTesting.functionTests.tests.lang.SequenceGeneratorTest.getScalarInteger(SequenceGeneratorTest.java:686)
>         at org.apache.derbyTesting.functionTests.tests.lang.SequenceGeneratorTest.vetBumping(SequenceGeneratorTest.java:175)
>         at org.apache.derbyTesting.functionTests.tests.lang.SequenceGeneratorTest.test_09_defaultRangeSize(SequenceGeneratorTest.java:608)
>         at java.lang.reflect.AccessibleObject.invokeV(AccessibleObject.java:195)
>         at org.apache.derbyTesting.junit.BaseTestCase.runBare(BaseTestCase.java:113)
>         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 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)
>         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)
> Caused by: java.sql.SQLException: Java exception: 'ASSERT FAILED Identity being changed
on a live cacheable. Old uuidString = ff45762e-0131-f3dc-5f35-
> ffff92a7798d: org.apache.derby.shared.common.sanity.AssertFailure'.
>         at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:45)
>         at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Util.java:142)
>         at org.apache.derby.impl.jdbc.Util.javaException(Util.java:299)
>         at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:412)
>         ... 62 more
> Caused by: org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED Identity
being changed on a live cacheable. Old uuidString = ff45762e-01
> 31-f3dc-5f35-ffff92a7798d
>         at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162)
>         at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147)
>         at org.apache.derby.impl.sql.catalog.SequenceUpdater.setIdentity(SequenceUpdater.java:255)
>         at org.apache.derby.impl.services.cache.CachedItem.takeOnIdentity(CachedItem.java:222)
>         at org.apache.derby.impl.services.cache.Clock.addEntry(Clock.java:800)
>         at org.apache.derby.impl.services.cache.Clock.find(Clock.java:303)
>         at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getCurrentValueAndAdvance(DataDictionaryImpl.java:10335)
>         at org.apache.derby.impl.sql.execute.BaseActivation.getCurrentValueAndAdvance(BaseActivation.java:689)
>         at org.apache.derby.exe.ac5135f637x0131xf3dcx5f35xffff92a7798d1.e0(Unknown Source)
>         at org.apache.derby.impl.services.reflect.DirectCall.invoke(ReflectGeneratedClass.java:139)
>         at org.apache.derby.impl.sql.execute.RowResultSet.getNextRowCore(RowResultSet.java:148)
>         at org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.getNextRow(BasicNoPutResultSetImpl.java:478)
>         at org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(EmbedResultSet.java:432)
>         ... 56 more
> There was 1 failure:
> 1) test_08_userWrittenAllocators(org.apache.derbyTesting.functionTests.tests.lang.SequenceGeneratorTest)junit.framework.ComparisonFailure:
Unexpected
> SQL state. expected:<X[0Y85]> but was:<X[J001]>
>         at java.lang.Throwable.<init>(Throwable.java:67)
>         at junit.framework.AssertionFailedError.<init>(AssertionFailedError.java:13)
>         at junit.framework.ComparisonFailure.<init>(ComparisonFailure.java:22)
>         at org.apache.derbyTesting.junit.BaseJDBCTestCase.assertSQLState(BaseJDBCTestCase.java:791)
>         at org.apache.derbyTesting.junit.BaseJDBCTestCase.assertSQLState(BaseJDBCTestCase.java:826)
>         at org.apache.derbyTesting.junit.BaseJDBCTestCase.assertSQLState(BaseJDBCTestCase.java:840)
>         at org.apache.derbyTesting.junit.BaseJDBCTestCase.assertStatementError(BaseJDBCTestCase.java:1143)
>         at org.apache.derbyTesting.functionTests.tests.lang.GeneratedColumnsHelper.expectExecutionError(GeneratedColumnsHelper.java:220)
>         at org.apache.derbyTesting.functionTests.tests.lang.SequenceGeneratorTest.test_08_userWrittenAllocators(SequenceGeneratorTest.java:574)
>         at java.lang.reflect.AccessibleObject.invokeV(AccessibleObject.java:195)
>         at org.apache.derbyTesting.junit.BaseTestCase.runBare(BaseTestCase.java:113)
>         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 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)
>         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)
> Caused by: java.sql.SQLException: Java exception: 'ASSERT FAILED Identity being changed
on a live cacheable. Old uuidString = ff45762e-0131-f3dc-5f35-
> ffff92a7798d: org.apache.derby.shared.common.sanity.AssertFailure'.
>         at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:45)
>         at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Util.java:142)
>         at org.apache.derby.impl.jdbc.Util.javaException(Util.java:299)
>         at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:412)
>         at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:407)
>         at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java:348)
>         at org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java:2290)
>         at org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java:82)
>         at org.apache.derby.impl.jdbc.EmbedResultSet.closeOnTransactionError(EmbedResultSet.java:4409)
>         at org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(EmbedResultSet.java:472)
>         at org.apache.derby.impl.jdbc.EmbedResultSet.next(EmbedResultSet.java:376)
>         at org.apache.derbyTesting.junit.JDBC.assertDrainResults(JDBC.java:686)
>         at org.apache.derbyTesting.junit.BaseJDBCTestCase.fetchAndDiscardAllResults(BaseJDBCTestCase.java:1279)
>         at org.apache.derbyTesting.junit.BaseJDBCTestCase.assertStatementError(BaseJDBCTestCase.java:1139)
>         ... 54 more
> Caused by: org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED Identity
being changed on a live cacheable. Old uuidString = ff45762e-01
> 31-f3dc-5f35-ffff92a7798d
>         at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162)
>         at org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147)
>         at org.apache.derby.impl.sql.catalog.SequenceUpdater.setIdentity(SequenceUpdater.java:255)
>         at org.apache.derby.impl.services.cache.CachedItem.takeOnIdentity(CachedItem.java:222)
>         at org.apache.derby.impl.services.cache.Clock.addEntry(Clock.java:800)
>         at org.apache.derby.impl.services.cache.Clock.find(Clock.java:303)
>         at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getCurrentValueAndAdvance(DataDictionaryImpl.java:10335)
>         at org.apache.derby.impl.sql.execute.BaseActivation.getCurrentValueAndAdvance(BaseActivation.java:689)
>         at org.apache.derby.exe.ac942f362cx0131xf3dcx5f35xffff92a7798d1.e0(Unknown Source)
>         at org.apache.derby.impl.services.reflect.DirectCall.invoke(ReflectGeneratedClass.java:139)
>         at org.apache.derby.impl.sql.execute.RowResultSet.getNextRowCore(RowResultSet.java:148)
>         at org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.getNextRow(BasicNoPutResultSetImpl.java:478)
>         at org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(EmbedResultSet.java:432)
>         ... 58 more 

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message