[
https://issues.apache.org/jira/browse/DERBY-4973?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12983950#action_12983950
]
Kathey Marsden commented on DERBY-4973:
---------------------------------------
I checked with Mike Matrigali to double check that if it might be possible
that the xc field could be nulled out after the check but before the
dereference in the line
return (xc == null) ? null : xc.getIdName();
The particular case of failure of a locktable query, the query is looking at
the transaction context of other transactions in flux, so that might actually
be possible. I am thinking maybe the reason we see this with the new JVM might
be that perhaps the compiler was changes to do two reads of the field in this
case instead of one. I am going to put in some sleeps to try to expose the
issue and then ultimately per Mike's suggestion, recode the method to avoid the
double read, like:
tempxc = xc;
return (tempxc == null) ? null : tempxc.getIdName();
That way we can avoid adding synchronization to this low level code for the
benefit of the locktable query and ensure just one read.
> NullPointerException in updatelocks.sql encryption tests on IBM 1.6
> --------------------------------------------------------------------
>
> Key: DERBY-4973
> URL: https://issues.apache.org/jira/browse/DERBY-4973
> Project: Derby
> Issue Type: Bug
> Components: Store
> Affects Versions: 10.8.0.0
> Environment: Booting Derby version The Apache Software Foundation -
> Apache Derby - 10.8.0.0 alpha - (1058840): instance
> a816c00e-012d-839a-de59-ffff9cf6fc6d
> on database directory
> C:\jartest\JarResults.2011-01-13\ibm16_derbyall\derbyall\encryptionAll\storemats\storemats\updatelocks\wombat
> with class loader sun.misc.Launcher$AppClassLoader@4bf94bf9
> Loaded from file:/C:/jartest/classes/derby.jar
> java.vendor=IBM Corporation
> java.runtime.version=jvmwi3260sr9-20101124_69295
> java.fullversion=JRE 1.6.0 IBM J9 2.4 Windows XP x86-32
> jvmwi3260sr9-20101124_69295 (JIT enabled, AOT enabled)
> J9VM - 20101124_069295
> JIT - r9_20101028_17488ifx2
> GC - 20101027_AA
> Reporter: Kathey Marsden
> Attachments: updatelocks_results.zip
>
>
> The IBM 1.6 results for Jan 13, 2011 show the following failure for IBM 1.6
> on XP
> *** End: TestEnc jdk1.6.0 DerbyNetClient derbynetclientmats:encodingTests
> 2011-01-14 00:05:38 ***
> ********* Diff file
> derbyall/encryptionAll/storemats/storemats/updatelocks.diff
> *** Start: updatelocks jdk1.6.0 storemats:storemats 2011-01-14 00:18:37 ***
> 19859a19860,19868
> > ERROR 38000: The exception 'java.lang.NullPointerException' was thrown
> > while evaluating an expression.
> > ERROR XJ001: Java exception: ': java.lang.NullPointerException'.
> > ij> next scan_cursor;
> > A |B |C
> >
> > --------------------------------------------------------------------------------------------------------------------------------------------------------
> > -3 |-30 |-three
> >
> > ij> update a set a=3,b=30,c='three' where current of scan_cursor;
> > 1 row inserted/updated/deleted
> > ij> select * from lock_table order by tabname, type desc, mode, cnt,
> > lockname;
> 19861a19871
> > APP |UserTran|TABLE |1 |IX |A |Tablelock |GRANT|ACTIVE
> 19866,19876d19875
> < -3 |-30 |-three
>
> < ij> update a set a=3,b=30,c='three' where current of scan_cursor;
> < 1 row inserted/updated/deleted
> < ij> select * from lock_table order by tabname, type desc, mode, cnt,
> lockname;
> < USERNAME|TRANTYPE|TYPE |CNT |MODE|TABNAME |LOCKNAME |STATE|STATUS
> < ---------------------------------------------------------------------------
> < APP |UserTran|TABLE |1 |IX |A |Tablelock |GRANT|ACTIVE
> < APP |UserTran|TABLE |1 |X |A |Tablelock |GRANT|ACTIVE
> < ij> next scan_cursor;
> < A |B |C
>
> <
> --------------------------------------------------------------------------------------------------------------------------------------------------------
> Test Failed.
> *** End: updatelocks jdk1.6.0 storemats:storemats 2011-01-14 00:19:24 ***
> ------------------------------------------------------
> Stack trace is:
> Fri Jan 14 00:19:08 PST 2011 Thread[main,5,main] (XID = 2648), (SESSIONID =
> 1), (DATABASE = wombat), (DRDAID = null), Failed Statement is: select * from
> lock_table order by tabname, type desc, mode, cnt, lockname
> ERROR 38000: The exception 'java.lang.NullPointerException' was thrown while
> evaluating an expression.
> at org.apache.derby.iapi.error.StandardException.newException(Unknown
> Source)
> at
> org.apache.derby.iapi.error.StandardException.unexpectedUserException(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.VTIResultSet.populateFromResultSet(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.VTIResultSet.getNextRowCore(Unknown Source)
> at
> org.apache.derby.impl.sql.execute.HashTableResultSet.getNextRowFromRowSource(Unknown
> Source)
> at
> org.apache.derby.iapi.store.access.BackingStoreHashtable.getNextRowFromRowSource(Unknown
> Source)
> at
> org.apache.derby.iapi.store.access.BackingStoreHashtable.<init>(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.HashTableResultSet.openCore(Unknown Source)
> at
> org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.openCore(Unknown
> Source)
> at org.apache.derby.impl.sql.execute.JoinResultSet.openRight(Unknown
> Source)
> at org.apache.derby.impl.sql.execute.JoinResultSet.openCore(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.openCore(Unknown
> Source)
> at org.apache.derby.impl.sql.execute.SortResultSet.openCore(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.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.EmbedStatement.execute(Unknown Source)
> at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
> at org.apache.derby.impl.tools.ij.ij.executeImmediate(Unknown Source)
> at org.apache.derby.impl.tools.ij.utilMain.doCatch(Unknown Source)
> at org.apache.derby.impl.tools.ij.utilMain.runScriptGuts(Unknown Source)
> at org.apache.derby.impl.tools.ij.utilMain.go(Unknown Source)
> at org.apache.derby.impl.tools.ij.Main.go(Unknown Source)
> at org.apache.derby.impl.tools.ij.Main.mainCore(Unknown Source)
> at org.apache.derby.impl.tools.ij.Main.main(Unknown Source)
> at org.apache.derby.tools.ij.main(Unknown Source)
> Caused by: java.lang.NullPointerException
> at org.apache.derby.impl.store.raw.xact.Xact.getContextId(Unknown
> Source)
> at
> org.apache.derby.impl.store.raw.xact.TransactionTableEntry.getTransactionTypeString(Unknown
> Source)
> at org.apache.derby.diag.TransactionTable.getString(Unknown Source)
> at org.apache.derby.iapi.types.SQLChar.setValueFromResultSet(Unknown
> Source)
> ... 25 more
> ============= begin nested exception, level (1) ===========
> java.lang.NullPointerException
> at org.apache.derby.impl.store.raw.xact.Xact.getContextId(Unknown
> Source)
> at
> org.apache.derby.impl.store.raw.xact.TransactionTableEntry.getTransactionTypeString(Unknown
> Source)
> at org.apache.derby.diag.TransactionTable.getString(Unknown Source)
> at org.apache.derby.iapi.types.SQLChar.setValueFromResultSet(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.VTIResultSet.populateFromResultSet(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.VTIResultSet.getNextRowCore(Unknown Source)
> at
> org.apache.derby.impl.sql.execute.HashTableResultSet.getNextRowFromRowSource(Unknown
> Source)
> at
> org.apache.derby.iapi.store.access.BackingStoreHashtable.getNextRowFromRowSource(Unknown
> Source)
> at
> org.apache.derby.iapi.store.access.BackingStoreHashtable.<init>(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.HashTableResultSet.openCore(Unknown Source)
> at
> org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.openCore(Unknown
> Source)
> at org.apache.derby.impl.sql.execute.JoinResultSet.openRight(Unknown
> Source)
> at org.apache.derby.impl.sql.execute.JoinResultSet.openCore(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.openCore(Unknown
> Source)
> at org.apache.derby.impl.sql.execute.SortResultSet.openCore(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.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.EmbedStatement.execute(Unknown Source)
> at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
> at org.apache.derby.impl.tools.ij.ij.executeImmediate(Unknown Source)
> at org.apache.derby.impl.tools.ij.utilMain.doCatch(Unknown Source)
> at org.apache.derby.impl.tools.ij.utilMain.runScriptGuts(Unknown Source)
> at org.apache.derby.impl.tools.ij.utilMain.go(Unknown Source)
> at org.apache.derby.impl.tools.ij.Main.go(Unknown Source)
> at org.apache.derby.impl.tools.ij.Main.mainCore(Unknown Source)
> at org.apache.derby.impl.tools.ij.Main.main(Unknown Source)
> at org.apache.derby.tools.ij.main(Unknown Source)
> ============= end nested exception, level (1) ===========
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.