[ 
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


Reply via email to