Ok concatenating looks like the easiest solution for me. Is the update
rate limit related to speed only - would just adding some delay between
insertions solve the issue too?
-Mikael
On 11.8.2016 15:55, Andy Seaborne wrote:
On 11/08/16 09:36, Mikael Pesonen wrote:
Hi Andy,
I did some long lasting queries at Fuseki at same time, but dont
remember if that was exactly at the time of error.
Are there some rules whats allowed and not with simultaneous reads and
writes?
Rules is too strong but the system has to have moments when it can
consolidate commits that are only in the journal and not in the main
database.
Part of that is keeping the wrapper layer around, which is what leads
to the massive stack in extreme cases (it hasn't been reported much
before).
For the design, the update rate exceeds capacity and ideally some sort
of control on this would be good. i.e. make the writer force the
system into a quiet state and flush the journal if the journal exceed
some threshold like 100 (your stack trace is 336 layers).
At that point the system is going to judder - all incoming requests
held up, including readers. let the current readers finish then flush
the journal then go back to the normal multiple-reader and single
writer mode.
https://issues.apache.org/jira/browse/JENA-1224
For your application, for the released version:
>>> Im inserting in a loop max 100 triplets at a time with bin/s-update
Could you instead accumulate them into large units? This effect is on
the number of transactions, not their size. Otherwise, control the
long running queries.
Either a large update or concatenate the SPARQL operations into a
large request? Operations are separated by ";"
INSERT DATA { .... }
;
# You can set PREFIXes here.
INSERT DATA { .... }
;
...
Andy
For people looking at the future possibilities:
TDB2 does not have this issue. Writers write their changes and that's
it. TDB2 is more like a journal-only system - it uses 2 append-only
files per B+Tree, and a small state file (24 bytes: tree root, 2
limits on the blocks used).
-Mikael
On 10.8.2016 20:02, Andy Seaborne wrote:
Hi Mikael,
It looks like the write transactions aren't able to trigger wring the
journal back to the database. It needs a point in time where there are
no other transactions happening.
Is there a long running read transaction? Or many small ones? going on
at the same time? Or is one write transaction happening at the same
time as another?
Andy
On 10/08/16 14:57, Mikael Pesonen wrote:
Hi,
I'm inserting data to jena store and got this exception. Server is:
/usr/bin/java -Xmx3600M -jar
/home/text/tools/apache-jena-fuseki-2.3.1/fuseki-server.jar --update
--port 3030
Im inserting in a loop max 100 triplets at a time with bin/s-update.
Error occured after a few 1000 insertions.
[2016-08-10 16:29:41] Fuseki INFO [78957] POST
http://semantic-dev.lingsoft.fi:3030/ds/update
[2016-08-10 16:29:41] Fuseki INFO [78957] POST /ds :: 'update' ::
[application/sparql-update] ?
java.lang.StackOverflowError
org.apache.jena.tdb.transaction.NodeTableTrans.getNodeIdForNode(NodeTableTrans.java:98)
at
org.apache.jena.tdb.store.nodetable.NodeTableWrapper.getNodeIdForNode(NodeTableWrapper.java:48)
at
org.apache.jena.tdb.store.nodetable.NodeTableInline.getNodeIdForNode(NodeTableInline.java:59)
at
org.apache.jena.tdb.transaction.NodeTableTrans.getNodeIdForNode(NodeTableTrans.java:98)
at
org.apache.jena.tdb.store.nodetable.NodeTableWrapper.getNodeIdForNode(NodeTableWrapper.java:48)
at
org.apache.jena.tdb.store.nodetable.NodeTableInline.getNodeIdForNode(NodeTableInline.java:59)
at
org.apache.jena.tdb.transaction.NodeTableTrans.getNodeIdForNode(NodeTableTrans.java:98)
at
org.apache.jena.tdb.store.nodetable.NodeTableWrapper.getNodeIdForNode(NodeTableWrapper.java:48)
[2016-08-10 16:29:41] Fuseki INFO [78957] 500 Server Error (33
ms)
Br,
Mikael
--
www.lingsoft.fi
Speech Applications - Language Management - Translation - Reader's and Writer's
Tools - Text Tools - E-books and M-books
Mikael Pesonen
System Engineer
e-mail: [email protected]
Tel. +358 2 279 3300
Time zone: GMT+2
Helsinki Office
Eteläranta 10
FI-00130 Helsinki
FINLAND
Turku Office
Linnankatu 10 A
FI-20100 Turku
FINLAND