Andy, Paolo, others,
first, thanks for the info. I obviously was not able to see any of this
from the JIRA work item since the last comments there related to a patch
which apparently was not relevant. So, for the record, yes, my ARQ is
aligned. I use TDB tx-tdb-0.9.0-20110831.124751-10 and the ARQ which was
packaged in the zip, which is arq-2.8.9-20110831.100801-30.
I also agree that the 2nd exception is likely another symptom of the same
problem (although it is not clear to me that one would cause the other) As
always, my test case is in a framework which I cannot easily share with
you, but I can give you more information on the context. The complete
stack trace is below, but the quad NPE happens on a read, not a write or
update. The code which goes into the jena next() statement in the trace
looks like this:
Model timestampModel = this.
dataset.getNamedModel(INDEX_INFO_SUBJECT);
StmtIterator statements =
timestampModel.listStatements();
try {
long timestamp = -1;
float indexVersion = 0; //
0 is the assumed version number for indexes before JFS 1.0.0.1
List<String> uris = new
ArrayList<String>(2);
while
(statements.hasNext()) {
Statement
statement = statements.next();
Line 1509 (as per stack trace below) is exactly the statements.next(). I
suspect the problem happens earlier when *writing* INDEX_INFO_SUBJECT.
Note that throughout our operations we regularly read and write this
particular graph with all sorts of meta-data using the Jena Model API.
Also, as before, I see this problem both when using the transaction API as
well as with old non-transactional API (where we conservatively
exclusively lock any write operation). Moreover, when I use the
transaction API, I keep getting tons of the following messages (without
any details), long before the quad NPE hits:
ERROR com.hp.hpl.jena.tdb.base.block.BlockMgrCache - write: Block in the
read cache
but I think this only happens in direct mode (although I suspect it is all
related to the same problem.
Simon
14:06:42,307
[jazz.jfs.resuming.indexer.jfs_tests_default_consumer_name.triple] ERROR
com.ibm.team.jfs - Originating
Exception:
java.lang.UnsupportedOperationException: Quad: object cannot be null
at com.hp.hpl.jena.sparql.core.Quad.<init>(Quad.java:50)
at com.hp.hpl.jena.tdb.lib.TupleLib.quad(TupleLib.java:127)
at com.hp.hpl.jena.tdb.lib.TupleLib.quad(TupleLib.java:118)
at com.hp.hpl.jena.tdb.lib.TupleLib.access$100(TupleLib.java:32)
at com.hp.hpl.jena.tdb.lib.TupleLib$4.convert(TupleLib.java:76)
at com.hp.hpl.jena.tdb.lib.TupleLib$4.convert(TupleLib.java:72)
at org.openjena.atlas.iterator.Iter$4.next(Iter.java:267)
at
com.hp.hpl.jena.tdb.store.GraphTDBBase$ProjectQuadsToTriples.next(
GraphTDBBase.java:183)
at
com.hp.hpl.jena.tdb.store.GraphTDBBase$ProjectQuadsToTriples.next(
GraphTDBBase.java:171)
at com.hp.hpl.jena.util.iterator.WrappedIterator.next(
WrappedIterator.java:68)
at com.hp.hpl.jena.util.iterator.Map1Iterator.next(
Map1Iterator.java:35)
at com.hp.hpl.jena.util.iterator.WrappedIterator.next(
WrappedIterator.java:68)
at com.hp.hpl.jena.rdf.model.impl.StmtIteratorImpl.next(
StmtIteratorImpl.java:33)
at com.hp.hpl.jena.rdf.model.impl.StmtIteratorImpl.next(
StmtIteratorImpl.java:21)
at
com.ibm.team.jfs.rdf.internal.jenatdbtx.JenaTdbProvider.getLastProcessedTimestamp(
JenaTdbProvider.java:1509)
at
com.ibm.team.jfs.rdf.internal.jenatdbtx.JenaRdfService.findLastProcessedTimestamp(
JenaRdfService.java:180)
at sun.reflect.GeneratedMethodAccessor225.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(
DelegatingMethodAccessorImpl.java:37)
at java.lang.reflect.Method.invoke(Method.java:611)
at
org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.invoke(
ExportProxyServiceRecord.java:370)
at
org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord.access$0(
ExportProxyServiceRecord.java:356)
at
org.eclipse.soda.sat.core.internal.record.ExportProxyServiceRecord$ExportedServiceInvocationHandler.invoke(
ExportProxyServiceRecord.java:56)
at $Proxy307.findLastProcessedTimestamp(Unknown Source)
at
com.ibm.team.jfs.indexing.service.internal.task.TripleIndexAgent.findLastProcessedTimestamp(
TripleIndexAgent.java:282)
at
com.ibm.team.jfs.indexing.service.internal.task.AbstractIndexAgent.restoreTimestamp(
AbstractIndexAgent.java:896)
at
com.ibm.team.jfs.indexing.service.internal.task.AbstractIndexAgent.initialize(
AbstractIndexAgent.java:491)
at
com.ibm.team.jfs.indexing.service.internal.task.LiveIndexAgent.initialize(
LiveIndexAgent.java:400)
at
com.ibm.team.jfs.indexing.service.internal.task.LiveIndexAgent.resume(
LiveIndexAgent.java:1151)
at
com.ibm.team.jfs.indexing.service.internal.IndexingService$2.run(
IndexingService.java:1505)
at java.lang.Thread.run(Thread.java:736)
From:
Andy Seaborne <[email protected]>
To:
[email protected]
Date:
09/13/2011 12:52 PM
Subject:
Re: Jena-91 still an issue (?)
Hi Simon,
On 13/09/11 16:58, Simon Helsen wrote:
> Hi everyone,
>
> after my leave, I spent some time adopting the latest TDB-TX build
(August
> 31) and I noticed I kept seeing the same problems as before. After some
> messing around, I noticed that the patch Paolo attached to Jena-91 was
not
> actually applied to the sources in this latest TDB 0.9.0 snapshot (
> tx-tdb-0.9.0-20110831.124751-10). When I updated the tx-TDB component
from
> SVN and looked NodeTableTrans, it seemed that the patch was not applied
> there either, so perhaps it was not actually delivered ? Paolo, can you
> please verify this?
There is a fix in the Aug 31 build that addressed the Report_JENA91
tests - it's not that patch though. Further investigation found a
deeper problem that the patch perturbed, but did not necessarily fix.
> Anyhow, I manually applied the patch on this build, but I keep running
> into the same problems. The first exception that shows is :
Is your copy of ARQ in step with that TDB build?
>
> java.lang.UnsupportedOperationException: Quad: object cannot be null
> at com.hp.hpl.jena.sparql.core.Quad.<init>(Quad.java:50)
> at com.hp.hpl.jena.tdb.lib.TupleLib.quad(TupleLib.java:127)
> at com.hp.hpl.jena.tdb.lib.TupleLib.quad(TupleLib.java:118)
> at
com.hp.hpl.jena.tdb.lib.TupleLib.access$100(TupleLib.java:32)
> at com.hp.hpl.jena.tdb.lib.TupleLib$4.convert(TupleLib.java:76)
> at com.hp.hpl.jena.tdb.lib.TupleLib$4.convert(TupleLib.java:72)
> at org.openjena.atlas.iterator.Iter$4.next(Iter.java:267)
> at
> com.hp.hpl.jena.tdb.store.GraphTDBBase$ProjectQuadsToTriples.next(
> GraphTDBBase.java:183)
> at
> com.hp.hpl.jena.tdb.store.GraphTDBBase$ProjectQuadsToTriples.next(
> GraphTDBBase.java:171)
> at com.hp.hpl.jena.util.iterator.WrappedIterator.next(
> WrappedIterator.java:68)
> at com.hp.hpl.jena.util.iterator.Map1Iterator.next(
> Map1Iterator.java:35)
> at com.hp.hpl.jena.util.iterator.WrappedIterator.next(
> WrappedIterator.java:68)
> at com.hp.hpl.jena.rdf.model.impl.StmtIteratorImpl.next(
> StmtIteratorImpl.java:33)
> at com.hp.hpl.jena.rdf.model.impl.StmtIteratorImpl.next(
> StmtIteratorImpl.java:21)
>
> and after that I also see
>
> 11:40:43,857 [jazz.jfs.resuming.indexer.internal.triple] ERROR
> com.ibm.team.jfs - Originating
> Exception:
> com.hp.hpl.jena.tdb.base.file.FileException:
> ObjectFile.read(61)[361][361]: Impossibly large object : 1869495647
bytes
> at com.hp.hpl.jena.tdb.base.objectfile.ObjectFileStorage.read(
> ObjectFileStorage.java:282)
> at com.hp.hpl.jena.tdb.lib.NodeLib.fetchDecode(NodeLib.java:60)
> at
> com.hp.hpl.jena.tdb.nodetable.NodeTableNative.readNodeFromTable(
> NodeTableNative.java:164)
> at
> com.hp.hpl.jena.tdb.nodetable.NodeTableNative._retrieveNodeByNodeId(
> NodeTableNative.java:88)
> at
com.hp.hpl.jena.tdb.nodetable.NodeTableNative.getNodeForNodeId(
> NodeTableNative.java:59)
> at
> com.hp.hpl.jena.tdb.nodetable.NodeTableCache._retrieveNodeByNodeId(
> NodeTableCache.java:89)
> at
com.hp.hpl.jena.tdb.nodetable.NodeTableCache.getNodeForNodeId(
> NodeTableCache.java:60)
> at
> com.hp.hpl.jena.tdb.nodetable.NodeTableWrapper.getNodeForNodeId(
> NodeTableWrapper.java:44)
> at
com.hp.hpl.jena.tdb.nodetable.NodeTableInline.getNodeForNodeId(
> NodeTableInline.java:56)
> at com.hp.hpl.jena.tdb.lib.TupleLib.quad(TupleLib.java:125)
> at com.hp.hpl.jena.tdb.lib.TupleLib.quad(TupleLib.java:118)
> at
com.hp.hpl.jena.tdb.lib.TupleLib.access$100(TupleLib.java:32)
> at com.hp.hpl.jena.tdb.lib.TupleLib$4.convert(TupleLib.java:76)
> at com.hp.hpl.jena.tdb.lib.TupleLib$4.convert(TupleLib.java:72)
> at org.openjena.atlas.iterator.Iter$4.next(Iter.java:267)
> at
> com.hp.hpl.jena.tdb.store.GraphTDBBase$ProjectQuadsToTriples.next(
> GraphTDBBase.java:183)
> at
> com.hp.hpl.jena.tdb.store.GraphTDBBase$ProjectQuadsToTriples.next(
> GraphTDBBase.java:171)
> at com.hp.hpl.jena.util.iterator.WrappedIterator.next(
> WrappedIterator.java:68)
> at com.hp.hpl.jena.util.iterator.Map1Iterator.next(
> Map1Iterator.java:35)
> at com.hp.hpl.jena.util.iterator.WrappedIterator.next(
> WrappedIterator.java:68)
> at com.hp.hpl.jena.rdf.model.impl.StmtIteratorImpl.next(
> StmtIteratorImpl.java:33)
> at com.hp.hpl.jena.rdf.model.impl.StmtIteratorImpl.next(
> StmtIteratorImpl.java:21)
>
> This seems to be the same as what I saw before. It is possible I am
still
> messing something up by manually applying the patch, I'll definitely
keep
> looking at that. If I can get a new TDB 0.9.0 build with the patch
> applied, I will definitely check again
Let's break this down into smaller elements.
First exception first (because the second one may be caused by the first).
Do you have a test case for
java.lang.UnsupportedOperationException: Quad: object cannot be null
What's the operation causing it (the stacktrace does nto go back far
enough but I presume a SPARQL Update or something is being done.)
Andy