[ 
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.

Reply via email to