On Wed, Nov 6, 2013 at 2:57 PM, Andy Seaborne <[email protected]> wrote:
> On 06/11/13 09:33, Reto Bachmann-Gmür wrote: > >> Hello, >> >> I've been encountering the following exception. I think it happened after >> the instance was killed. WHat does it mean? How to fix it? >> >> org.apache.jena.atlas.lib.InternalErrorException: Invalid id node for >> object (null node): ([000000000000025E], [000000000000019C], >> [0000000000000321]) >> at com.hp.hpl.jena.tdb.lib.TupleLib.triple(TupleLib.java:139) >> at com.hp.hpl.jena.tdb.lib.TupleLib.triple(TupleLib.java:114) >> at com.hp.hpl.jena.tdb.lib.TupleLib.access$000(TupleLib.java:45) >> at com.hp.hpl.jena.tdb.lib.TupleLib$3.convert(TupleLib.java:76) >> at com.hp.hpl.jena.tdb.lib.TupleLib$3.convert(TupleLib.java:72) >> at org.apache.jena.atlas.iterator.Iter$4.next(Iter.java:317) >> at org.apache.jena.atlas.iterator.Iter$4.next(Iter.java:317) >> at org.apache.jena.atlas.iterator.Iter$4.next(Iter.java:317) >> at org.apache.jena.atlas.iterator.Iter.next(Iter.java:915) >> at >> com.hp.hpl.jena.util.iterator.WrappedIterator.next( >> WrappedIterator.java:94) >> >> Cheers, >> Reto >> >> > (version?) > 2.1.1 (core+arq), 1.0.0 (tdb +iri) > > There are two possible causes I can think of - I can't tell which it is; > it may be something else. > > 1/ No transactions. There were un-synced updates and you were unlucky. > What the framework is supposed to ensure is that no two add/deletes happen at the same time (on the same dataset). Also no add/delete happens at the same time as a read. It does not guarantee that some code uses an iterator without proper locking, so the case where one is likely to get a concurrentModificationException. Would this be enough to keep that triplestore safe? > > This is not most common exception that occurs in that situation; more > common is complaints from the node table. > > Were you deleting stuff around the time of the instance death? There is a > triple/quad in the index where there is no RDF term for the object in the > NodeTable. > > Bad news: The database is damaged on disk. > Any rescue tools/path? When I try to serialize a graph (as n-triples) it stops somewhere in the middle ot a triple. Not always at the same point. Cheers, Reto > > 2/ An iterator has been passed across a transaction boundary (e.g. from > one thread to another). I would hope that passing it across a transaction > boundary in the same thread would have been signalled but you may have > found another devious way to do that. > > The database is not damaged on disk. > > But as you said the instance was killed, (1) looks more likely. Sorry. > > Andy >
