You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by David Jordan <Da...@sas.com> on 2013/04/24 19:06:07 UTC

TDB exception

I got this while running code with an ontology that has worked many times before, on both SDB and TDB.
Any guess as to why? Now any calls to get a named model are dying.
Have I corrupted my TDB database? Is there something wrong in my class Database provided below?
I see that I had not done a TDB.sync(dataset), could that be the problem?


     [java] Exception in thread "main" com.hp.hpl.jena.tdb.base.file.FileException: ObjectFileStorage.read[prefixes.dat](659)[filesize=713][file.size()=713]: Impossibly large object : 1914830848 bytes > filesize-(loc+SizeOfInt)=50
     [java]     at com.hp.hpl.jena.tdb.base.objectfile.ObjectFileStorage.read(ObjectFileStorage.java:346)
     [java]     at com.hp.hpl.jena.tdb.lib.NodeLib.fetchDecode(NodeLib.java:78)
     [java]     at com.hp.hpl.jena.tdb.nodetable.NodeTableNative.readNodeFromTable(NodeTableNative.java:178)
     [java]     at com.hp.hpl.jena.tdb.nodetable.NodeTableNative._retrieveNodeByNodeId(NodeTableNative.java:103)
     [java]     at com.hp.hpl.jena.tdb.nodetable.NodeTableNative.getNodeForNodeId(NodeTableNative.java:74)
     [java]     at com.hp.hpl.jena.tdb.nodetable.NodeTableWrapper.getNodeForNodeId(NodeTableWrapper.java:55)
     [java]     at com.hp.hpl.jena.tdb.nodetable.NodeTableInline.getNodeForNodeId(NodeTableInline.java:67)
     [java]     at com.hp.hpl.jena.tdb.lib.TupleLib.tupleNodes(TupleLib.java:97)
     [java]     at com.hp.hpl.jena.tdb.lib.TupleLib$1.convert(TupleLib.java:53)
     [java]     at com.hp.hpl.jena.tdb.lib.TupleLib$1.convert(TupleLib.java:49)
     [java]     at org.apache.jena.atlas.iterator.Iter$4.next(Iter.java:301)
     [java]     at com.hp.hpl.jena.tdb.sys.DatasetControlMRSW$IteratorCheckNotConcurrent.next(DatasetControlMRSW.java:130)
     [java]     at com.hp.hpl.jena.tdb.store.DatasetPrefixesTDB.readPrefixMap(DatasetPrefixesTDB.java:173)
     [java]     at com.hp.hpl.jena.sparql.graph.GraphPrefixesProjection.getNsPrefixMap(GraphPrefixesProjection.java:62)
     [java]     at com.hp.hpl.jena.tdb.store.DatasetPrefixesTDB.getPrefixMapping(DatasetPrefixesTDB.java:223)
     [java]     at com.hp.hpl.jena.tdb.store.GraphNamedTDB.createPrefixMapping(GraphNamedTDB.java:66)
     [java]     at com.hp.hpl.jena.graph.impl.GraphBase.getPrefixMapping(GraphBase.java:186)
     [java]     at com.hp.hpl.jena.rdf.model.impl.ModelCom.getPrefixMapping(ModelCom.java:959)
     [java]     at com.hp.hpl.jena.rdf.model.impl.ModelCom.withDefaultMappings(ModelCom.java:1003)
     [java]     at com.hp.hpl.jena.rdf.model.impl.ModelCom.<init>(ModelCom.java:74)
     [java]     at com.hp.hpl.jena.rdf.model.impl.ModelCom.<init>(ModelCom.java:70)
     [java]     at com.hp.hpl.jena.rdf.model.ModelFactory.createModelForGraph(ModelFactory.java:176)
     [java]     at com.hp.hpl.jena.sparql.core.DatasetImpl.graph2model(DatasetImpl.java:269)
     [java]     at com.hp.hpl.jena.sparql.core.DatasetImpl.getNamedModel(DatasetImpl.java:174)
     [java]     at com.sas.ta.om.Database.getModel(Database.java:60)
     [java]     at com.sas.ta.om.CreateInferredModel.create(CreateInferredModel.java:29)
     [java]     at com.sas.ta.om.CreateInferredModel.main(CreateInferredModel.java:18)

Right before I ran this, I had deleted all the data for a model with the following:

Model model = Database.getModel(modelName);
model.begin();
model.removeAll();
model.commit();
model.close();
Database.close();

Here is my Database class:

public class Database {
      private static final String TDB_TYPE = "TDB";
      private static final String SDB_TYPE = "SDB";
      private static final String SDB_ASSEMBLER_FILE = "sdb.ttl";
      private static final String TDB_ASSEMBLER_FILE = "tdb.ttl";
      private static final String JENA_DBTYPE = System.getProperty("JENA_DBTYPE");
      private static final boolean isTDB = TDB_TYPE.equals(JENA_DBTYPE);
      static {
            if( isTDB ) TDB.setOptimizerWarningFlag(false);
      }

      private static Store store = null;
      private static Dataset dataset = null;

      public static final String getDBType(){
            return JENA_DBTYPE;
      }

      public static void close(){
            if( isTDB && dataset != null ){
                  dataset.close();
            } else {
                  if( store != null ) store.close();
            }
      }

      public static void begin(Model model, ReadWrite mode){
            if( isTDB ){
                  if( dataset == null )
                        dataset = TDBFactory.assembleDataset(TDB_ASSEMBLER_FILE);
                  dataset.begin(mode);
            } else {
                  model.begin();
            }
      }

      public static void commit(Model model){
            model.commit();
      }

      public static void sync(){
            if( dataset != null ) TDB.sync(dataset);
      }

      public static Model getModel(String name){
            if( TDB_TYPE.equals(JENA_DBTYPE) ){
                  if( dataset == null )
                        dataset = TDBFactory.assembleDataset(TDB_ASSEMBLER_FILE);
                  return dataset.getNamedModel(name);
            } else {
                  if( store == null )
                        store = StoreFactory.create(SDB_ASSEMBLER_FILE);
                  return SDBFactory.connectNamedModel(store, name);
            }
      }
}


David Jordan
Senior Software Developer
SAS Institute Inc.
Health & Life Sciences, Research & Development
Bldg R ▪ Office 4467
600 Research Drive ▪ Cary, NC 27513
Tel: 919 531 1233 ▪ david.jordan@sas.com<ma...@sas.com>
www.sas.com<http://www.sas.com/>
SAS® … THE POWER TO KNOW®


Re: TDB exception

Posted by Andy Seaborne <an...@apache.org>.
 > Model model = Database.getModel(modelName);
 > model.begin();
 > model.removeAll();
 > model.commit();
 > model.close();
 > Database.close();

The dataset transaction mechanism for TB is separate from the Model one. 
  While it tries to do it's best, it isn't perfect (and can't be - the 
old style begin() means you don't know if it's a read or write 
transaction which is a big efficiency issue).

http://jena.apache.org/documentation/tdb/tdb_transactions.html

 > Have I corrupted my TDB database?

Yes - sorry.  Looks like in the past, TDB.sync was called before shutdown.

	Andy

On 24/04/13 18:06, David Jordan wrote:
>
> I got this while running code with an ontology that has worked many times before, on both SDB and TDB.
> Any guess as to why? Now any calls to get a named model are dying.
> Have I corrupted my TDB database? Is there something wrong in my class Database provided below?
> I see that I had not done a TDB.sync(dataset), could that be the problem?
>
>
>       [java] Exception in thread "main" com.hp.hpl.jena.tdb.base.file.FileException: ObjectFileStorage.read[prefixes.dat](659)[filesize=713][file.size()=713]: Impossibly large object : 1914830848 bytes > filesize-(loc+SizeOfInt)=50
>       [java]     at com.hp.hpl.jena.tdb.base.objectfile.ObjectFileStorage.read(ObjectFileStorage.java:346)
>       [java]     at com.hp.hpl.jena.tdb.lib.NodeLib.fetchDecode(NodeLib.java:78)
>       [java]     at com.hp.hpl.jena.tdb.nodetable.NodeTableNative.readNodeFromTable(NodeTableNative.java:178)
>       [java]     at com.hp.hpl.jena.tdb.nodetable.NodeTableNative._retrieveNodeByNodeId(NodeTableNative.java:103)
>       [java]     at com.hp.hpl.jena.tdb.nodetable.NodeTableNative.getNodeForNodeId(NodeTableNative.java:74)
>       [java]     at com.hp.hpl.jena.tdb.nodetable.NodeTableWrapper.getNodeForNodeId(NodeTableWrapper.java:55)
>       [java]     at com.hp.hpl.jena.tdb.nodetable.NodeTableInline.getNodeForNodeId(NodeTableInline.java:67)
>       [java]     at com.hp.hpl.jena.tdb.lib.TupleLib.tupleNodes(TupleLib.java:97)
>       [java]     at com.hp.hpl.jena.tdb.lib.TupleLib$1.convert(TupleLib.java:53)
>       [java]     at com.hp.hpl.jena.tdb.lib.TupleLib$1.convert(TupleLib.java:49)
>       [java]     at org.apache.jena.atlas.iterator.Iter$4.next(Iter.java:301)
>       [java]     at com.hp.hpl.jena.tdb.sys.DatasetControlMRSW$IteratorCheckNotConcurrent.next(DatasetControlMRSW.java:130)
>       [java]     at com.hp.hpl.jena.tdb.store.DatasetPrefixesTDB.readPrefixMap(DatasetPrefixesTDB.java:173)
>       [java]     at com.hp.hpl.jena.sparql.graph.GraphPrefixesProjection.getNsPrefixMap(GraphPrefixesProjection.java:62)
>       [java]     at com.hp.hpl.jena.tdb.store.DatasetPrefixesTDB.getPrefixMapping(DatasetPrefixesTDB.java:223)
>       [java]     at com.hp.hpl.jena.tdb.store.GraphNamedTDB.createPrefixMapping(GraphNamedTDB.java:66)
>       [java]     at com.hp.hpl.jena.graph.impl.GraphBase.getPrefixMapping(GraphBase.java:186)
>       [java]     at com.hp.hpl.jena.rdf.model.impl.ModelCom.getPrefixMapping(ModelCom.java:959)
>       [java]     at com.hp.hpl.jena.rdf.model.impl.ModelCom.withDefaultMappings(ModelCom.java:1003)
>       [java]     at com.hp.hpl.jena.rdf.model.impl.ModelCom.<init>(ModelCom.java:74)
>       [java]     at com.hp.hpl.jena.rdf.model.impl.ModelCom.<init>(ModelCom.java:70)
>       [java]     at com.hp.hpl.jena.rdf.model.ModelFactory.createModelForGraph(ModelFactory.java:176)
>       [java]     at com.hp.hpl.jena.sparql.core.DatasetImpl.graph2model(DatasetImpl.java:269)
>       [java]     at com.hp.hpl.jena.sparql.core.DatasetImpl.getNamedModel(DatasetImpl.java:174)
>       [java]     at com.sas.ta.om.Database.getModel(Database.java:60)
>       [java]     at com.sas.ta.om.CreateInferredModel.create(CreateInferredModel.java:29)
>       [java]     at com.sas.ta.om.CreateInferredModel.main(CreateInferredModel.java:18)
>
> Right before I ran this, I had deleted all the data for a model with the following:
>
> Model model = Database.getModel(modelName);
> model.begin();
> model.removeAll();
> model.commit();
> model.close();
> Database.close();
>
> Here is my Database class:
>
> public class Database {
>        private static final String TDB_TYPE = "TDB";
>        private static final String SDB_TYPE = "SDB";
>        private static final String SDB_ASSEMBLER_FILE = "sdb.ttl";
>        private static final String TDB_ASSEMBLER_FILE = "tdb.ttl";
>        private static final String JENA_DBTYPE = System.getProperty("JENA_DBTYPE");
>        private static final boolean isTDB = TDB_TYPE.equals(JENA_DBTYPE);
>        static {
>              if( isTDB ) TDB.setOptimizerWarningFlag(false);
>        }
>
>        private static Store store = null;
>        private static Dataset dataset = null;
>
>        public static final String getDBType(){
>              return JENA_DBTYPE;
>        }
>
>        public static void close(){
>              if( isTDB && dataset != null ){
>                    dataset.close();
>              } else {
>                    if( store != null ) store.close();
>              }
>        }
>
>        public static void begin(Model model, ReadWrite mode){
>              if( isTDB ){
>                    if( dataset == null )
>                          dataset = TDBFactory.assembleDataset(TDB_ASSEMBLER_FILE);
>                    dataset.begin(mode);
>              } else {
>                    model.begin();
>              }
>        }
>
>        public static void commit(Model model){
>              model.commit();
>        }
>
>        public static void sync(){
>              if( dataset != null ) TDB.sync(dataset);
>        }
>
>        public static Model getModel(String name){
>              if( TDB_TYPE.equals(JENA_DBTYPE) ){
>                    if( dataset == null )
>                          dataset = TDBFactory.assembleDataset(TDB_ASSEMBLER_FILE);
>                    return dataset.getNamedModel(name);
>              } else {
>                    if( store == null )
>                          store = StoreFactory.create(SDB_ASSEMBLER_FILE);
>                    return SDBFactory.connectNamedModel(store, name);
>              }
>        }
> }
>
>
> David Jordan
> Senior Software Developer
> SAS Institute Inc.
> Health & Life Sciences, Research & Development
> Bldg R ▪ Office 4467
> 600 Research Drive ▪ Cary, NC 27513
> Tel: 919 531 1233 ▪ david.jordan@sas.com<ma...@sas.com>
> www.sas.com<http://www.sas.com/>
> SAS® … THE POWER TO KNOW®
>