I tried to get an example but it does not fail on my linux box. Are there any known problem with Mac? I'll try it on the Mac next week when I get back to work.
Claude On Mon, May 26, 2014 at 7:22 PM, Andy Seaborne <[email protected]> wrote: > On 26/05/14 18:57, Claude Warren wrote: > >> I was looking at how I could get a minimal set but the data is business >> confidential and I am not certian that changing it would produce the same >> issue. I will see what I can do about a minimal set -- though I expect >> that will still be large. >> >> Claude >> > > I would be surprised if there were no effects except at scale although > where it's going to show first is not clear to me. > > If you want to try something amusing possibly with side effects ... but > SPARQL query on the model would by the general engine in Node space (it > can't see that the graoh is TDB-backed). > > Graph g = GraphView.createDefaultGraph(ds.asDatasetGraph()) ; > model = ModelFactory.createModelForGraph(g) ; > > which inverts the stack to put the view over the top of the switching > datasetgraph. > > Getting the named model for the union may work but uses more RAM to get > set semantics. > > Andy > > > >> >> On Mon, May 26, 2014 at 5:55 PM, Andy Seaborne <[email protected]> wrote: >> >> On 26/05/14 15:54, Claude Warren wrote: >>> >>> Look like I needed to add a model=dataset.getDefaultModel() statement >>>> to >>>> the commit block os that it reads: >>>> >>>> >>>> if (cnt % 500 == 0) { >>>> >>>> System.out.println( cnt ); >>>> >>>> dataset.commit(); >>>> >>>> dataset.begin( ReadWrite.WRITE ); >>>> >>>> model=dataset.getDefaultModel(); >>>> >>>> } >>>> >>>> Why? I would expect that the model would track the transaction set on >>>> the >>>> dataset. >>>> >>>> >>> Should be possible but it's hard to balance compatibility >>> (non-transactional use) with being about to mix TDB graphs into general >>> purpose dataset and also get efficiency (get SPARQL processing to be >>> handled by TDB, code that calls .getDefaultModel and not assigning to a >>> local variable). >>> >>> Come Jena3, this could be improved with changes to the application >>> contract for the more corner cases (single thread overlapping >>> transactions >>> for example). Maybe drop the direct SPARQL execution of TDB graphs in >>> general purpose, mixed datasets and resort to general SPARQL execution. >>> >>> It's not just Models - Resources have an implicit graph. >>> >>> What would be really helpful is to have an example test case that >>> illustrated some aspect of the problem which was compact and standalone. >>> >>> Andy >>> >>> >>> >>>> Claude >>>> >>>> >>>> On Mon, May 26, 2014 at 3:48 PM, Claude Warren <[email protected]> >>>> wrote: >>>> >>>> I have code that uses Jena-Libs 2.11.1 and executes the following >>>> block: >>>> >>>>> (edited for brevity) >>>>> >>>>> dataset.begin( ReadWrite.WRITE); >>>>> >>>>> try { >>>>> >>>>> Model model = dataset.getDefaultModel(); >>>>> >>>>> Property[] props = ( create an array of properties in Model) >>>>> >>>>> String dcsId = "someStringValue"; >>>>> >>>>> int cnt = 0; >>>>> ..... (get an iterator on a set of rows from a db table) >>>>> >>>>> while (rIter.hasNext()) >>>>> >>>>> { >>>>> >>>>> cnt++; >>>>> >>>>> Row r = rIter.next(); >>>>> >>>>> Resource eventR = model.createResource( makeURI( eventUri, >>>>> r.getColumn(dcsId).toString()), typeURI); >>>>> >>>>> for (int i=0;i<cols.size();i++) >>>>> >>>>> { >>>>> >>>>> Object o = r.getColumn(i); >>>>> >>>>> if (props[i] != null && o != null) >>>>> >>>>> { >>>>> >>>>> String val = o.toString(); >>>>> >>>>> if (val.length()>0) >>>>> >>>>> { >>>>> >>>>> eventR.addProperty( props[i], val); // <-- line 134 as >>>>> noted >>>>> in call stack below >>>>> >>>>> } >>>>> >>>>> } >>>>> >>>>> } >>>>> >>>>> // commit every 500 entries >>>>> >>>>> if (cnt % 500 == 0) { >>>>> >>>>> System.out.println( cnt ); >>>>> >>>>> dataset.commit(); >>>>> >>>>> dataset.begin( ReadWrite.WRITE ); >>>>> >>>>> } >>>>> >>>>> } >>>>> >>>>> } >>>>> >>>>> } >>>>> >>>>> } >>>>> >>>>> finally { >>>>> >>>>> dataset.commit(); >>>>> >>>>> } >>>>> >>>>> >>>>> The table I am reading from contains several 10's of thousands of rows. >>>>> I >>>>> am basically converting from relational table to RDF graph. >>>>> >>>>> However, after the first 500 subjects are committed (5000 +/- triples) >>>>> I >>>>> run into the following problem while adding the 6th property to subject >>>>> 502. >>>>> >>>>> >>>>> DEBUG [main] (MySQLTableDef.java:261) - Query String: SELECT ... <-- >>>>> Initial debugging statement >>>>> >>>>> 500 <-- output from commit block in code above >>>>> >>>>> ERROR [main] (Log.java:94) - Not active: 1 >>>>> >>>>> ERROR [main] (Log.java:94) - **** Not active: 1 >>>>> >>>>> >>>>> Now, I know this is a transaction error. But I think I have a >>>>> transaction, as I restart one right after the commit after the 500th >>>>> record. Log is made in the BlockMgrJournal.checkActive() and the call >>>>> stack appears as follows: >>>>> BlockMgrJournal.checkActive() line: 306 >>>>> BlockMgrJournal._promote(Block) line: 220 >>>>> BlockMgrJournal.promote(Block) line: 215 >>>>> BPTreeRecordsMgr(PageBlockMgr<T>).promote(Page) line: 110 >>>>> BPTreeRecords.promote() line: 119 >>>>> BPTreeRecords.internalInsert(Record) line: 131 >>>>> BPTreeNode.internalInsert(Record) line: 468 >>>>> BPTreeNode.internalInsert(Record) line: 468 >>>>> BPTreeNode.insert(BPTreeNode, Record) line: 212 >>>>> BPlusTree.addAndReturnOld(Record) line: 328 >>>>> BPlusTree.add(Record) line: 320 >>>>> TupleIndexRecord.performAdd(Tuple<NodeId>) line: 60 >>>>> TupleIndexRecord(TupleIndexBase).add(Tuple<NodeId>) line: 64 >>>>> TupleTable.add(Tuple<NodeId>) line: 96 >>>>> NodeTupleTableConcrete.addRow(Node...) line: 87 >>>>> TripleTable.add(Node, Node, Node) line: 58 >>>>> DatasetGraphTDB.addToDftGraph(Node, Node, Node) line: 100 >>>>> DatasetGraphTDB(DatasetGraphTriplesQuads).add(Node, Node, Node, Node) >>>>> line: 47 >>>>> GraphTDB(GraphView).performAdd(Triple) line: 140 >>>>> GraphTDB.performAdd(Triple) line: 87 >>>>> GraphTDB(GraphBase).add(Triple) line: 202 >>>>> ModelCom.add(Resource, Property, RDFNode) line: 1159 >>>>> ModelCom.add(Resource, Property, String, String, boolean) line: 161 >>>>> ModelCom.add(Resource, Property, String) line: 149 >>>>> ResourceImpl.addProperty(Property, String) line: 241 >>>>> JenaSink.updateTable(UpdateBlock) line: 134 >>>>> >>>>> >>>>> Any help fixing this problem would be appreciated. >>>>> >>>>> Claude >>>>> -- >>>>> I like: Like Like - The likeliest place on the web< >>>>> http://like-like.xenei.com> >>>>> LinkedIn: http://www.linkedin.com/in/claudewarren >>>>> >>>>> >>>>> >>>> >>>> >>>> >>> >> >> > -- I like: Like Like - The likeliest place on the web <http://like-like.xenei.com> LinkedIn: http://www.linkedin.com/in/claudewarren
