On 10.12.2012 19:21, Pavel Bortnovskiy wrote:
> I upgraded to 10.9.1.0 and rerun with debug libraries (please disregard my
> previous message).
>
> Mon Dec 10 13:19:44 EST 2012 Thread[DatabasePublisher[BOND_WRITER],5,main]
> (XID = 289), (SESSIONID = 5), (DATABASE = memory:test), (DRDAID = null),
> Failed Statement is: select * from READER
> java.lang.NullPointerException
> at
> org.apache.derby.impl.store.access.conglomerate.GenericScanController.reopenAfterEndTransaction(GenericScanController.java:1048)
> at
It looks like "container" is null, cf. the line 1048:
case SCAN_HOLD_INIT:
***> reusableRecordIdSequenceNumber =
container.getReusableRecordIdSequenceNumber();
i.e. has been closed, cf the assignment just above:
ContainerHandle container = open_conglom.reopen();
The call to reopen just returns null if OpenConglomerate has been closed
somehow.
Smells like a race condition of sorts, maybe some missing
synchronization in the Derby code.
If you are able to post a self contained repro program, although this
might be tricky if this is indeed a race, this would increase your
chances of having this fixed soon..
Thanks,
Dag
In any case the NullPointerException shoudln't be seen by the
application code, so this is a bug.
> org.apache.derby.impl.store.access.conglomerate.GenericScanController.fetchRows(GenericScanController.java:622)
> at
> org.apache.derby.impl.store.access.heap.HeapScan.fetchNextGroup(HeapScan.java:322)
> at
> org.apache.derby.impl.sql.execute.BulkTableScanResultSet.reloadArray(BulkTableScanResultSet.java:353)
> at
> org.apache.derby.impl.sql.execute.BulkTableScanResultSet.getNextRowCore(BulkTableScanResultSet.java:308)
> at
> org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.getNextRowCore(ProjectRestrictResultSet.java:261)
> at
> org.apache.derby.impl.sql.execute.ScrollInsensitiveResultSet.getNextRowFromSource(ScrollInsensitiveResultSet.java:801)
> at
> org.apache.derby.impl.sql.execute.ScrollInsensitiveResultSet.getNextRowCore(ScrollInsensitiveResultSet.java:518)
> at
> org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.getNextRow(BasicNoPutResultSetImpl.java:478)
> at
> org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(EmbedResultSet.java:432)
> at
> org.apache.derby.impl.jdbc.EmbedResultSet.next(EmbedResultSet.java:376)
> at QueryResults$1.hasNext(QueryResults.java:268)
> at DatabasePublisher.process(DatabasePublisher.java:318)
> at java.lang.Thread.run(Thread.java:662)
>
> -----Original Message-----
> From: Rick Hillegas [mailto:[email protected]]
> Sent: Monday, December 10, 2012 1:05 PM
> To: [email protected]
> Subject: Re: NPE
>
> Hi Pavel,
>
> Can you reproduce this problem with the debug version of Derby? That would
> give us line numbers in the stack trace.
>
> Thanks,
> -Rick
>
> On 12/10/12 9:23 AM, Pavel Bortnovskiy wrote:
>> Hello:
>>
>> While testing my application, which uses Derby in memory-only mode, I
>> get NPE inside Derby under "mysterious" circumstances.
>>
>> At this point, I can't even figure out what's triggering it and where
>> this could happen, but let me preempt my troubleshooting with some
>> stack traces. Perhaps someone, with good knowledge of Derby's code,
>> may offer some explanation. Here are some stack traces:
>>
>> Mon Dec 10 12:12:36 EST 2012 Thread[DatabasePublisher[WRITER],5,main]
>> (XID = 235), (SESSIONID = 5), (DATABASE = memory:test), (DRDAID =
>> null), Failed Statement is: select * from READER
>>
>> java.lang.NullPointerException
>>
>> at
>> org.apache.derby.impl.store.access.conglomerate.GenericScanController.
>> reopenAfterEndTransaction(Unknown
>> Source)
>>
>> at
>> org.apache.derby.impl.store.access.conglomerate.GenericScanController.
>> fetchRows(Unknown
>> Source)
>>
>> at
>> org.apache.derby.impl.store.access.heap.HeapScan.fetchNextGroup(Unknow
>> n Source)
>>
>> at
>> org.apache.derby.impl.sql.execute.BulkTableScanResultSet.reloadArray(U
>> nknown
>> Source)
>>
>> at
>> org.apache.derby.impl.sql.execute.BulkTableScanResultSet.getNextRowCor
>> e(Unknown
>> Source)
>>
>> at
>> org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.getNextRowC
>> ore(Unknown
>> Source)
>>
>> at
>> org.apache.derby.impl.sql.execute.ScrollInsensitiveResultSet.getNextRo
>> wFromSource(Unknown
>> Source)
>>
>> at
>> org.apache.derby.impl.sql.execute.ScrollInsensitiveResultSet.getNextRo
>> wCore(Unknown
>> Source)
>>
>> at
>> org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.getNextRow(U
>> nknown
>> Source)
>>
>> at org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(Unknown
>> Source)
>>
>> at org.apache.derby.impl.jdbc.EmbedResultSet.next(Unknown Source)
>>
>> at QueryResults$1.hasNext(QueryResults.java:268)
>>
>> at DatabasePublisher.process(DatabasePublisher.java:318)
>>
>> at java.lang.Thread.run(Thread.java:662)
>>
>> or
>>
>> 2012-12-10 12:12:36,537 [DatabasePublisher[WRITER]] ERROR QueryResults
>> - Unable to execute ResultSet.next() for Statement ""select * from
>> READER" [DERBY]"
>>
>> java.sql.SQLException: Java exception: ': java.lang.NullPointerException'.
>>
>> at
>> org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unkno
>> wn
>> 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(Unk
>> nown
>> Source)
>>
>> at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown
>> Source)
>>
>> at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown
>> Source)
>>
>> at
>> org.apache.derby.impl.jdbc.EmbedResultSet.closeOnTransactionError(Unkn
>> own
>> Source)
>>
>> at org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(Unknown
>> Source)
>>
>> at org.apache.derby.impl.jdbc.EmbedResultSet.next(Unknown Source)
>>
>> at QueryResults$1.hasNext(QueryResults.java:268)
>>
>> at DatabasePublisher.process(DatabasePublisher.java:318)
>>
>> at java.lang.Thread.run(Thread.java:662)
>>
>> 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.wrapArgsForTransportA
>> crossDRDA(Unknown
>> Source)
>>
>> ... 14 more
>>
>> Caused by: java.lang.NullPointerException
>>
>> at
>> org.apache.derby.impl.store.access.conglomerate.GenericScanController.
>> reopenAfterEndTransaction(Unknown
>> Source)
>>
>> at
>> org.apache.derby.impl.store.access.conglomerate.GenericScanController.
>> fetchRows(Unknown
>> Source)
>>
>> at
>> org.apache.derby.impl.store.access.heap.HeapScan.fetchNextGroup(Unknow
>> n Source)
>>
>> at
>> org.apache.derby.impl.sql.execute.BulkTableScanResultSet.reloadArray(U
>> nknown
>> Source)
>>
>> at
>> org.apache.derby.impl.sql.execute.BulkTableScanResultSet.getNextRowCor
>> e(Unknown
>> Source)
>>
>> at
>> org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.getNextRowC
>> ore(Unknown
>> Source)
>>
>> at
>> org.apache.derby.impl.sql.execute.ScrollInsensitiveResultSet.getNextRo
>> wFromSource(Unknown
>> Source)
>>
>> at
>> org.apache.derby.impl.sql.execute.ScrollInsensitiveResultSet.getNextRo
>> wCore(Unknown
>> Source)
>>
>> at
>> org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.getNextRow(U
>> nknown
>> Source)
>>
>> ... 6 more
>>
>> One more thing I can share is that this seems to also be a timing
>> problem - if the code is executed slowly, line-by-line in the
>> debugger, then this problem doesn't occur. But if run at full speed,
>> then these exceptions are thrown. The problem is not intermittent and
>> easily reproduced 100% of the time on my end.
>>
>> Any thoughts would be greatly appreciated.
>>
>> Pavel.
>>
>>
>>
>> Jefferies archives and monitors outgoing and incoming
>> e-mail. The contents of this email, including any
>> attachments, are confidential to the ordinary user of the
>> email address to which it was addressed. If you are not
>> the addressee of this email you may not copy, forward,
>> disclose or otherwise use it or any part of it in any form
>> whatsoever. This email may be produced at the request of
>> regulators or in connection with civil litigation.
>> Jefferies accepts no liability for any errors or omissions
>> arising as a result of transmission. Use by other than
>> intended recipients is prohibited. In the United Kingdom,
>> Jefferies operates as Jefferies International Limited;
>> registered in England: no. 1978621; registered office:
>> Vintners Place, 68 Upper Thames Street, London EC4V 3BJ.
>> Jefferies International Limited is authorised and
>> regulated by the Financial Services Authority.
>>
>
> Jefferies archives and monitors outgoing and incoming e-mail. The contents of
> this email, including any attachments, are confidential to the ordinary user
> of the email address to which it was addressed. If you are not the addressee
> of this email you may not copy, forward, disclose or otherwise use it or any
> part of it in any form whatsoever. This email may be produced at the request
> of regulators or in connection with civil litigation. Jefferies accepts no
> liability for any errors or omissions arising as a result of transmission.
> Use by other than intended recipients is prohibited. In the United Kingdom,
> Jefferies operates as Jefferies International Limited; registered in England:
> no. 1978621; registered office: Vintners Place, 68 Upper Thames Street,
> London EC4V 3BJ. Jefferies International Limited is authorised and regulated
> by the Financial Services Authority.