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

Reply via email to