[ 
https://issues.apache.org/jira/browse/DERBY-4973?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12984365#action_12984365
 ] 

Kathey Marsden commented on DERBY-4973:
---------------------------------------

I think then that I won't make it volatile and will add the tempxc code to make 
sure it is just read once and is stable for the duration of the getContextId() 
call.  

Note: To pop the bug more reliably, I changed the code to have a sleep between 
the check and the dereference:
public final String getContextId() 
        {
                //return (xc == null) ? null : xc.getIdName();
            if (xc == null)
                return null;
            else {
                try {
                Thread.currentThread().sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
                return xc.getIdName();
            }
        }

With this change I see the NullPointerException on SR8 as well as Sun JDK 1.6, 
so I think this is definitely a Derby bug and not a JVM issue as I first 
thought.  There may be SR9 changes so that they don't use a thread local copy 
where they can, but I don't think that they are required to do so, they just 
have that option.



> 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