[
https://issues.apache.org/jira/browse/DERBY-5422?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Mamta A. Satoor updated DERBY-5422:
-----------------------------------
Attachment: DERBY5422_diff_patch1.txt
IndexOutOfBoundException is raised during the clean up of the StandardException
raised by SequenceUpdate.clearIdentity. The clearIdentity method has a try
catch block and the catch block, calls ContextManager.cleanupOnError to handle
the StandardException it received. But ContextManager.cleanupOnError will NOT
log the passed StandardException only if the passed exception's reporting value
is set to StandardException.REPORT_NEVER or if it's reporting value is set to
StandardException.REPORT_DEFAULT but it's severity level is not high enough. We
found in this jira that this can make us loose information about the
StandardException if ContextManager.cleanupOnError itself runs into a Runtime
Exception like IndexOutOfBoundsException. To avoid such a situation, we will
log the StandardException in SeuqneceUpdate if ContextManager.cleanupOnError is
not going to log it. It will be good to run the nstest again hoping that we
will run IndexOutOfBoundException but this time around, we will know the root
cause of the problem in clearIdentity.
There might be other ways of handling this problem. Would love to know what
community thinks. It will also be interesting to know why
ContextManager,cleanupOnError does not log all kinds of StandardExceptions. It
will definitely be very useful to have the information for debugging purposes.
> IndexOutOfBoundsException followed by NullPointerException in cleanup during
> system.nstest
> -------------------------------------------------------------------------------------------
>
> Key: DERBY-5422
> URL: https://issues.apache.org/jira/browse/DERBY-5422
> Project: Derby
> Issue Type: Bug
> Affects Versions: 10.8.2.2
> Environment: Windows XP, with ibm 1.6 SR9 FP1
> Reporter: Myrna van Lunteren
> Attachments: DERBY5422_diff_patch1.txt, run2.jar, run7.jar
>
>
> During the embedded NsTest system test on windows XP I saw the following in
> derby.log:
> Tue Sep 13 16:25:03 PDT 2011:
> Booting Derby version The Apache Software Foundation - Apache Derby -
> 10.8.2.1 - (1170221): instance b779ce27-0132-6516-81e1-000000312348
> on database directory D:\10.8.2.1\tst\restoredir\nstestdb with class loader
> sun.misc.Launcher$AppClassLoader@40504050
> Loaded from file:/D:/10.8.2.1/jars/derby.jar
> java.vendor=IBM Corporation
> java.runtime.version=jvmwi3260sr9-20110203_74623
> java.fullversion=JRE 1.6.0 IBM J9 2.4 Windows Server 2003 x86-32
> jvmwi3260sr9-20110203_74623 (JIT enabled, AOT enabled)
> J9VM - 20110203_074623
> JIT - r9_20101028_17488ifx3
> GC - 20101027_AA
> user.dir=D:\10.8.2.1\tst
> derby.system.home=null
> New exception raised during cleanup Index: -1, Size: 15
> java.lang.IndexOutOfBoundsException: Index: -1, Size: 15
> at java.util.ArrayList.remove(ArrayList.java:552)
> at
> org.apache.derby.iapi.services.context.ContextManager.popContext(Unknown
> Source)
> at org.apache.derby.iapi.services.context.ContextImpl.popMe(Unknown
> Source)
> at org.apache.derby.impl.store.access.RAMTransaction.destroy(Unknown
> Source)
> at
> org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.doRollback(Unknown
> Source)
> at
> org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.internalRollback(Unknown
> Source)
> at
> org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.cleanupOnError(Unknown
> Source)
> at
> org.apache.derby.iapi.services.context.ContextManager.cleanupOnError(Unknown
> Source)
> at
> org.apache.derby.impl.sql.catalog.SequenceUpdater.clearIdentity(Unknown
> Source)
> at
> org.apache.derby.impl.services.cache.ConcurrentCache.removeEntry(Unknown
> Source)
> at org.apache.derby.impl.services.cache.ConcurrentCache.ageOut(Unknown
> Source)
> at
> org.apache.derby.impl.sql.catalog.DataDictionaryImpl.clearSequenceCaches(Unknown
> Source)
> at
> org.apache.derby.impl.sql.catalog.DataDictionaryImpl.clearCaches(Unknown
> Source)
> at
> org.apache.derby.impl.sql.catalog.DataDictionaryImpl.doneReading(Unknown
> Source)
> at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
> at org.apache.derby.impl.sql.GenericStatement.prepareStorable(Unknown
> Source)
> at
> org.apache.derby.iapi.sql.dictionary.SPSDescriptor.compileStatement(Unknown
> Source)
> at
> org.apache.derby.iapi.sql.dictionary.SPSDescriptor.prepareAndRelease(Unknown
> Source)
> at
> org.apache.derby.iapi.sql.dictionary.SPSDescriptor.getPreparedStatement(Unknown
> Source)
> at
> org.apache.derby.iapi.sql.dictionary.SPSDescriptor.getPreparedStatement(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.GenericTriggerExecutor.executeSPS(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.RowTriggerExecutor.fireTrigger(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.TriggerEventActivator.notifyEvent(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.DeleteResultSet.fireAfterTriggers(Unknown
> Source)
> at org.apache.derby.impl.sql.execute.DeleteResultSet.open(Unknown
> Source)
> at
> org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(Unknown Source)
> at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown
> Source)
> at
> org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown
> Source)
> at
> org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeUpdate(Unknown
> Source)
> at
> org.apache.derbyTesting.system.nstest.utils.DbUtil.delete_one_row(DbUtil.java:452)
> at
> org.apache.derbyTesting.system.nstest.tester.TesterObject.doIUDOperation(TesterObject.java:175)
> at
> org.apache.derbyTesting.system.nstest.tester.Tester1.startTesting(Tester1.java:118)
> at org.apache.derbyTesting.system.nstest.NsTest.run(NsTest.java:551)
> Cleanup action completed
> New exception raised during cleanup null
> java.lang.NullPointerException
> at
> org.apache.derby.impl.sql.compile.CompilerContextImpl.initRequiredPriv(Unknown
> Source)
> at
> org.apache.derby.impl.sql.compile.CompilerContextImpl.resetContext(Unknown
> Source)
> at
> org.apache.derby.impl.sql.compile.CompilerContextImpl.cleanupOnError(Unknown
> Source)
> at
> org.apache.derby.iapi.services.context.ContextManager.cleanupOnError(Unknown
> Source)
> at
> org.apache.derby.impl.jdbc.TransactionResourceImpl.cleanupOnError(Unknown
> Source)
> at
> org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown
> Source)
> at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown
> Source)
> at
> org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown
> Source)
> at
> org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeUpdate(Unknown
> Source)
> at
> org.apache.derbyTesting.system.nstest.utils.DbUtil.delete_one_row(DbUtil.java:452)
> at
> org.apache.derbyTesting.system.nstest.tester.TesterObject.doIUDOperation(TesterObject.java:175)
> at
> org.apache.derbyTesting.system.nstest.tester.Tester1.startTesting(Tester1.java:118)
> at org.apache.derbyTesting.system.nstest.NsTest.run(NsTest.java:551)
> Tue Sep 13 16:25:12 PDT 2011 Thread[Thread 1,5,main] Equally severe exception
> raised during cleanup (ignored) null
> java.lang.NullPointerException
> at
> org.apache.derby.impl.sql.compile.CompilerContextImpl.initRequiredPriv(Unknown
> Source)
> at
> org.apache.derby.impl.sql.compile.CompilerContextImpl.resetContext(Unknown
> Source)
> at
> org.apache.derby.impl.sql.compile.CompilerContextImpl.cleanupOnError(Unknown
> Source)
> at
> org.apache.derby.iapi.services.context.ContextManager.cleanupOnError(Unknown
> Source)
> at
> org.apache.derby.impl.jdbc.TransactionResourceImpl.cleanupOnError(Unknown
> Source)
> at
> org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown
> Source)
> at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown
> Source)
> at
> org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown
> Source)
> at
> org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeUpdate(Unknown
> Source)
> at
> org.apache.derbyTesting.system.nstest.utils.DbUtil.delete_one_row(DbUtil.java:452)
> at
> org.apache.derbyTesting.system.nstest.tester.TesterObject.doIUDOperation(TesterObject.java:175)
> at
> org.apache.derbyTesting.system.nstest.tester.Tester1.startTesting(Tester1.java:118)
> at org.apache.derbyTesting.system.nstest.NsTest.run(NsTest.java:551)
> Cleanup action completed
> It appears this caused the Tester1 thread to loose the connection:
> ---------------------
> Tester1Thread 1 dbUtil ----> During failure to execute delete stmt, exception
> thrown was : java.sql.SQLTransactionRollbackException: An internal error was
> identified by RawStore module.
> TObj -->At this point - executing delete_one_row(), exception thrown was : No
> current connection.
> 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.setupContextStack(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown
> Source)
> at
> org.apache.derbyTesting.system.nstest.utils.DbUtil.add_one_row(DbUtil.java:96)
> at
> org.apache.derbyTesting.system.nstest.tester.TesterObject.doIUDOperation(TesterObject.java:148)
> at
> org.apache.derbyTesting.system.nstest.tester.Tester1.startTesting(Tester1.java:118)
> at org.apache.derbyTesting.system.nstest.NsTest.run(NsTest.java:551)
> 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)
> ... 12 more
> -------------------------------
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira