[
https://issues.apache.org/jira/browse/JENA-1302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15906335#comment-15906335
]
Andy Seaborne commented on JENA-1302:
-------------------------------------
The issue is that in {{DatasetGraphText.commit}}, a write transation does:
{noformat}
textIndex.prepareCommit
dataset commit
textIndex.commit
{noformat}
As soon as the {{dataset commit}} occurs, another writer can be admitted
and may commit, calling {{textIndex.prepareCommit}} before the first
thread has completed the {{textIndex.commit}} action.
{noformat}
T1: begin
T1: textIndex.prepareCommit
T1: dataset commit
T2: begin
T2: textIndex.prepareCommit
**** Problem ****
T1: textIndex.commit
T2: dataset commit
T2: textIndex.commit
{noformat}
Two {{prepareCommit}} happen which is not correct behaviour for Lucene causing:
{{...: prepareCommit was already called with no corresponding call to commit}}
Solution:
A lock over {{DatasetGraphText.commit}} to make it atomic. This is only
needed for a writer. {{DatasetGraphText.abort}} needs the same.
> Intermittent Lucene prepareCommit exception during heavy read/write load
> ------------------------------------------------------------------------
>
> Key: JENA-1302
> URL: https://issues.apache.org/jira/browse/JENA-1302
> Project: Apache Jena
> Issue Type: Bug
> Components: Fuseki, TDB, Text
> Affects Versions: Jena 3.3.0
> Environment: CentOS 7.3 inside VM, 2 cores, OpenJDK 1.8.0_121
> (64-bit), 1GB JVM heap, Fuseki running as service
> Reporter: Vilnis Termanis (Iotic Labs)
> Assignee: Andy Seaborne
> Attachments: prepareCommit_error.tgz
>
>
> (*Note*: Could not add Fuseki 2.6.0 as affected version although I assume
> this is a TDB/text rather than Fuseki-related issue.)
> *Steps:*
> # Start with plain Fuseki + given configuration (TDB store + lucene text
> indexing)
> # Import 1k.ttl
> # Run lockup.py (same host, mix of multiple parallel updates & single select)
> *Result:*
> Every now and again one of the update queries fails with a 500 server error
> which is logged as:
> {{DatasetGraphText ERROR Exception in prepareCommit: prepareCommit was
> already called with no corresponding call to commit}}
> *Notes:*
> - Not reproducible without fix for JENA-1296 (and discovered during fix
> verification for said issue)
> - Run with
> [apache-jena-fuseki-2.6.0-20170228.233930-10.tar.gz|https://repository.apache.org/content/repositories/snapshots/org/apache/jena/apache-jena-fuseki/2.6.0-SNAPSHOT/apache-jena-fuseki-2.6.0-20170228.233930-10.tar.gz]
> - From cold-start of Fuseki, occurs within 30s of script run
> - Supplied test script required Python 3, {{rdflib>=4.2.2}} &
> {{SPARQLWrapper>=1.8.0}}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)