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

James Alan Shepherd commented on DERBY-3216:
--------------------------------------------

Possibly I have a resulting NPE in Derby 10.3.2.1  (10.3.1.4 does not show this 
behaviour)

FATAL 38406 [Main] (Start.java:153) - Start FAILED
org.springframework.transaction.TransactionSystemException: Could not commit 
JDBC transaction; nested exception is java.sql.SQLException: Java exception: ': 
java.lang.NullPointerException'.
Caused by: 
java.sql.SQLException: Java exception: ': java.lang.NullPointerException'.
        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.javaException(Unknown Source)
        at 
org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(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.EmbedConnection.commit(Unknown Source)
        at 
org.apache.commons.dbcp.DelegatingConnection.commit(DelegatingConnection.java:238)
        at 
org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.commit(PoolingDataSource.java:199)
        at 
org.springframework.jdbc.datasource.DataSourceTransactionManager.doCommit(DataSourceTransactionManager.java:245)
        at 
org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:651)
        at 
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:621)
        at 
org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:146)
        at com.aaa.bbb.cccFactory$ddd.add(cccFactory.java:324)
        at com.aaa.eee.fff.ggg.reload(ggg.java:44)
        at com.aaa.eee.fff.ggg.startup(ggg.java:57)
        at com.aaa.eee.fff.Start.startupEee(Start.java:170)
        at com.aaa.eee.fff.Start.startup(Start.java:146)
        at com.aaa.start.Starter.startup(Starter.java:264)
        at com.aaa.start.Main.startup(Main.java:270)
        at com.aaa.start.Main.main(Main.java:199)
Caused by: java.sql.SQLException: Java exception: ': 
java.lang.NullPointerException'.
        at 
org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
        at 
org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown
 Source)
        ... 21 more
Caused by: java.lang.NullPointerException
        at 
org.apache.derby.impl.store.access.btree.ControlRow.getControlRowForPage(Unknown
 Source)
        at org.apache.derby.impl.store.access.btree.ControlRow.get(Unknown 
Source)
        at org.apache.derby.impl.store.access.btree.ControlRow.get(Unknown 
Source)
        at 
org.apache.derby.impl.store.access.btree.BTreePostCommit.purgeRowLevelCommittedDeletes(Unknown
 Source)
        at 
org.apache.derby.impl.store.access.btree.BTreePostCommit.performWork(Unknown 
Source)
        at org.apache.derby.impl.store.raw.xact.Xact.postTermination(Unknown 
Source)
        at org.apache.derby.impl.store.raw.xact.Xact.completeCommit(Unknown 
Source)
        at org.apache.derby.impl.store.raw.xact.Xact.commit(Unknown Source)
        at org.apache.derby.impl.store.raw.xact.Xact.commit(Unknown Source)
        at org.apache.derby.impl.store.access.RAMTransaction.commit(Unknown 
Source)
        at 
org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.doCommit(Unknown
 Source)
        at 
org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.userCommit(Unknown
 Source)
        at org.apache.derby.impl.jdbc.TransactionResourceImpl.commit(Unknown 
Source)
        ... 15 more

and derby.log:

2008-01-28 08:26:36.148 GMT Thread[Main,5,main] (XID = 1888), (SESSIONID = 2), 
(DATABASE = directory:myDB), (DRDAID = null), Executing prepared statement: 
SELECT COUNT(*) FROM ZZZ WHERE nID IS NULL :End prepared statement
2008-01-28 08:26:36.150 GMT Thread[Main,5,main] (XID = 1888), (SESSIONID = 2), 
(DATABASE = directory:myDB), (DRDAID = null), Committing
2008-01-28 08:26:36.188 GMT Thread[Main,5,main] (XID = 1888), (SESSIONID = 2), 
(DATABASE = directory:myDB), (DRDAID = null), Cleanup action starting
2008-01-28 08:26:36.188 GMT Thread[Main,5,main] (XID = 1888), (SESSIONID = 2), 
(DATABASE = directory:myDB), (DRDAID = null), Failed Statement is: null with 2 
parameters begin parameter #1: 1 :end parameter begin parameter #2: 1 :end param
eter 
java.lang.NullPointerException
        at 
org.apache.derby.impl.store.access.btree.ControlRow.getControlRowForPage(Unknown
 Source)
        at org.apache.derby.impl.store.access.btree.ControlRow.get(Unknown 
Source)
        at org.apache.derby.impl.store.access.btree.ControlRow.get(Unknown 
Source)
        at 
org.apache.derby.impl.store.access.btree.BTreePostCommit.purgeRowLevelCommittedDeletes(Unknown
 Source)
        at 
org.apache.derby.impl.store.access.btree.BTreePostCommit.performWork(Unknown 
Source)
        at org.apache.derby.impl.store.raw.xact.Xact.postTermination(Unknown 
Source)
        at org.apache.derby.impl.store.raw.xact.Xact.completeCommit(Unknown 
Source)
        at org.apache.derby.impl.store.raw.xact.Xact.commit(Unknown Source)
        at org.apache.derby.impl.store.raw.xact.Xact.commit(Unknown Source)
        at org.apache.derby.impl.store.access.RAMTransaction.commit(Unknown 
Source)
        at 
org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.doCommit(Unknown
 Source)
        at 
org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.userCommit(Unknown
 Source)
        at org.apache.derby.impl.jdbc.TransactionResourceImpl.commit(Unknown 
Source)
        at org.apache.derby.impl.jdbc.EmbedConnection.commit(Unknown Source)
        at 
org.apache.commons.dbcp.DelegatingConnection.commit(DelegatingConnection.java:238)
        at 
org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.commit(PoolingDataSource.java:199)
        at 
org.springframework.jdbc.datasource.DataSourceTransactionManager.doCommit(DataSourceTransactionManager.java:245)
        at 
org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:651)
        at 
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:621)
        at 
org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:146)
        at com.aaa.bbb.cccFactory$ddd.add(cccFactory.java:324)
        at com.aaa.eee.fff.ggg.reload(ggg.java:44)
        at com.aaa.eee.fff.ggg.startup(ggg.java:57)
        at com.aaa.eee.fff.Start.startupEee(Start.java:170)
        at com.aaa.eee.fff.Start.startup(Start.java:146)
        at com.aaa.start.Starter.startup(Starter.java:264)
        at com.aaa.start.Main.startup(Main.java:270)
        at com.aaa.start.Main.main(Main.java:199)
Cleanup action completed


This is a long transaction that has suddenly started throwing a NPE.
Nothing strange happens during the transaction, but on closing I get
the NPE.

        If I reorder some of the statements in the transaction (keeping
functional equivalence) the NPE is sometimes not thrown.


(Thanks to Bryan Pendleton on derby-user for pointing me in the direction of 
DERBY-3216)

> do row level lock space reclamation in btree of indiv rows.
> -----------------------------------------------------------
>
>                 Key: DERBY-3216
>                 URL: https://issues.apache.org/jira/browse/DERBY-3216
>             Project: Derby
>          Issue Type: Bug
>          Components: Store
>    Affects Versions: 10.3.1.4
>            Reporter: Mike Matrigali
>            Assignee: Mike Matrigali
>            Priority: Minor
>             Fix For: 10.3.2.1, 10.4.0.0
>
>
> If you can't get a table level lock for btree space recovery in 
> the post commit thread, maybe you should at least reclaim the 
> rows on the page while you are at it.  Use the same algorithm 
> as exists in BTreeController.java.  row level shrink is a different
> issue and won't be resolved by this.
> Note there have been reports of "memory" leaks associated with this issue.  
> This is because
> currently if the work can not be done then we just queue it and move on.  But 
> in a stress situation
> one may never get the required table lock to shrink the tree and thus the 
> queue just keeps growing.
> Note in many of these cases the app doesn't care if the page merge happens as 
> it is just going to
> insert more rows after the merge.  
> Also there is no need for a table level lock for a 1 page index as no merge 
> is actually necessary.

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