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

Knut Anders Hatlen commented on DERBY-5894:
-------------------------------------------

The stack trace says:

        at 
org.apache.derby.impl.store.raw.data.BaseDataFileFactory.stubFileToRemoveAfterCheckPoint(BaseDataFileFactory.java:1613)
        at 
org.apache.derby.impl.store.raw.data.RAFContainer.run(RAFContainer.java:1651)
        at java.security.AccessController.doPrivileged(Native Method)
        at 
org.apache.derby.impl.store.raw.data.RAFContainer.backupContainer(RAFContainer.java:983)
 

However, backupContainer()'s call to doPrivileged() is supposed to end up 
calling privBackupContainer(), not stubFileToRemoveAfterCheckPoint(). I think 
this may happen if backupContainer() is called concurrently with one of the 
other RAFContainer methods that call doPrivileged(). Since backupContainer() is 
not synchronized, a call to one of the other RAFContainer methods (in the case 
reported here: RAFContainer.stubbify()) in another thread may proceed and 
change the value of actionCode while backupContainer() is executing. This makes 
the switch statement in RAFContainer.run() pick the wrong action, and if the 
execution of stubbify() has come so far as to resetting the actionInstant field 
to null before backupContainer() has completed, backupContainer() may fail with 
the reported NullPointerException.

The fix would be to synchronize backupContainer(). All the other methods in 
RAFContainer that call doPrivileged(), are already synchronized.
                
> NPE in OnlineBackupTest1 while backing up in stubFileToRemoveAfterCheckPoint
> ----------------------------------------------------------------------------
>
>                 Key: DERBY-5894
>                 URL: https://issues.apache.org/jira/browse/DERBY-5894
>             Project: Derby
>          Issue Type: Bug
>          Components: Store
>            Reporter: Dag H. Wanvik
>              Labels: derby_triage10_10
>         Attachments: d5894.zip
>
>
> Saw this while running OnlineBackupTest1 trying to repro DERBY-973.
> ERROR 38000: The exception 'java.lang.NullPointerException' was thrown while 
> evaluating an expression.
>         at 
> org.apache.derby.iapi.error.StandardException.newException(StandardException.java:288)
>         at 
> org.apache.derby.iapi.error.StandardException.unexpectedUserException(StandardException.java:575)
>         at 
> org.apache.derby.impl.services.reflect.ReflectMethod.invoke(ReflectMethod.java:63)
>         at 
> org.apache.derby.impl.sql.execute.CallStatementResultSet.open(CallStatementResultSet.java:75)
>         at 
> org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java:443)
>         at 
> org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:324)
>         at 
> org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1242)
>         at 
> org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(EmbedPreparedStatement.java:1715)
>         at 
> org.apache.derby.impl.jdbc.EmbedCallableStatement.executeStatement(EmbedCallableStatement.java:118)
>         at 
> org.apache.derby.impl.jdbc.EmbedPreparedStatement.execute(EmbedPreparedStatement.java:1370)
>         at 
> org.apache.derbyTesting.functionTests.tests.store.OnlineBackup.performBackup(OnlineBackup.java:89)
>         at 
> org.apache.derbyTesting.functionTests.tests.store.OnlineBackup.run(OnlineBackup.java:60)
>         at java.lang.Thread.run(Thread.java:637)
> Caused by: java.lang.NullPointerException
>         at java.util.Hashtable.put(Hashtable.java:401)
>         at 
> org.apache.derby.impl.store.raw.data.BaseDataFileFactory.stubFileToRemoveAfterCheckPoint(BaseDataFileFactory.java:1613)
>         at 
> org.apache.derby.impl.store.raw.data.RAFContainer.run(RAFContainer.java:1651)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at 
> org.apache.derby.impl.store.raw.data.RAFContainer.backupContainer(RAFContainer.java:983)
>         at 
> org.apache.derby.impl.store.raw.data.BaseContainerHandle.backupContainer(BaseContainerHandle.java:1031)
>         at 
> org.apache.derby.impl.store.raw.data.BaseDataFileFactory.backupDataFiles(BaseDataFileFactory.java:2466)
>         at org.apache.derby.impl.store.raw.RawStore.backup(RawStore.java:978)
>         at org.apache.derby.impl.store.raw.RawStore.backup(RawStore.java:649)
>         at 
> org.apache.derby.impl.store.access.RAMAccessManager.backup(RAMAccessManager.java:964)
>         at 
> org.apache.derby.impl.db.BasicDatabase.backup(BasicDatabase.java:430)
>         at 
> org.apache.derby.catalog.SystemProcedures.SYSCS_BACKUP_DATABASE(SystemProcedures.java:961)
>         at 
> org.apache.derby.exe.acf33d40c7x0138x6d7cx6df3x0000720ad17b0.g0(Unknown 
> Source)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:592)
>         at 
> org.apache.derby.impl.services.reflect.ReflectMethod.invoke(ReflectMethod.java:46)
>         ... 10 more

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to