I would prefer the assembler option as that is only fixing the cause of
the specific bug and it in my mind fixes the assembler API semantics to
what I mentally expect

Rob

On 18/01/2016 14:09, "Brian McBride" <[email protected]> wrote:

>
>
>On 22/12/15 18:22, Andy Seaborne wrote:
>> JENA-1104 suggests there is a ordering/timing issue and that it is not
>> Fuseki1/Fuseki2 expect that things happen in a different order.
>I have investigated this further and I think I understand what is
>happening.
>
>If we have a configuration with the same dataset+text-index shared
>between two services, then when the first service is built,
>TextIndexLuceneAssembler is called to create  TextIndexLucene object.
>When the second service is built, TextIndexLuceneAssembler is called
>again and creates another TextIndexLucene object.
>
>Both of these TextIndexLucene objects create a Lucene IndexWriter object
>on the same directory.  That doesn't work because they both try to grab
>the same lock and one fails.
>
>I am happy to offer pull request to change this behaviour.  There are
>broadly two strategies that I can see, and I'm wondering if there is a
>preferred approach from the Jena team.
>
>The first approach is to make a change the way the assemblers work to
>only create one TextIndexLucene object per node in the configuration
>graph.
>
>A second approach is to modify the TextIndexLucene so that two or more
>objects can operate on the same directory.
>
>My default approach would be to make the change in the assembler code.
>
>Brian
>>
>> I'm not sure that a shared index across two different datasets will
>> work if updates are involved.  Maybe someone else can help with that.
>The configuration I'm looking at is not an index shared across two data
>sets - there is one index+tdb-dataset pair in the configuration.
>>
>> What's fuseki:allowTimeoutOverride?  Is this a local build with the
>> code for that uncommented out?
>>
>>     Andy
>>
>> On 21/12/15 14:53, Brian McBride wrote:
>>> The fuseki configuration below sets up two services with a shared
>>> dataset.  The dataset has a lucene text index.
>>>
>>> This configuration works on Fuseki 1.3.1.  Fuseki 2.3.1 fails to start.
>>> The log output is shown below.  Looks like the lucene index may be
>>> trying to grab a lock for the dataset twice.
>>>
>>> If I change the second fuseki:dataset line to:
>>>
>>> [[
>>>      fuseki:dataset                        <#ds> ;
>>> ]]
>>>
>>> then it works on Fuseki 2.3.1 and  Unexpectedly both services have
>>> access to the text index, which doesn't seem right, thought suits me
>>>for
>>> the moment as I need both services to have access to the index.
>>>
>>> Is there some configuration change I need to make between Fuseki 1 and
>>> Fuseki 2?
>>>
>>> Brian
>>>
>>>
>>>
>>> Fuseki 2.3.1 log output
>>>
>>> [[
>>> 2015-12-21 14:42:20.940 WARN  Config               :: Fuseki v2:
>>> Management functions are always on the same port as the server.
>>> --mgtPort ignored.
>>> 2015-12-21 14:42:21.062 INFO  Server               :: Fuseki 2.3.1
>>> 2015-12-08T09:24:07+0000
>>> 2015-12-21 14:42:21.229 INFO  Config               ::
>>> FUSEKI_HOME=/usr/share/fuseki
>>> 2015-12-21 14:42:21.230 INFO  Config               ::
>>> FUSEKI_BASE=/etc/fuseki
>>> 2015-12-21 14:42:21.233 INFO  Servlet              :: Initializing
>>>Shiro
>>> environment
>>> 2015-12-21 14:42:21.233 INFO  EnvironmentLoader    :: Starting Shiro
>>> environment initialization.
>>> 2015-12-21 14:42:21.242 INFO  Config               :: Shiro file:
>>> file:///etc/fuseki/shiro.ini
>>> 2015-12-21 14:42:21.415 INFO  EnvironmentLoader    :: Shiro environment
>>> initialized in 181 ms.
>>> 2015-12-21 14:42:21.415 INFO  Config               :: Configuration
>>> file: /etc/fuseki/config.ttl
>>> 2015-12-21 14:42:22.193 WARN  AssemblerHelp        :: ja:loadClass:
>>> Migration to Jena3: Converting com.hp.hpl.jena.tdb.TDB to
>>> org.apache.jena.tdb.TDB
>>> 2015-12-21 14:42:23.557 ERROR Server               :: Exception in
>>> initialization: caught:
>>> org.apache.lucene.store.LockObtainFailedException: Lock obtain timed
>>> out: NativeFSLock@/var/lib/fuseki/databases/ds-lucene/write.lock
>>> 2015-12-21 14:42:23.577 INFO  Server               :: Started
>>>2015/12/21
>>> 14:42:23 UTC on port 3030
>>>
>>> ]]
>>>
>>>
>>>
>>> Fuseki configuration.
>>>
>>> [[
>>>
>>> # Licensed under the terms of
>>>http://www.apache.org/licenses/LICENSE-2.0
>>>
>>> @prefix :        <#> .
>>> @prefix fuseki:  <http://jena.apache.org/fuseki#> .
>>> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
>>> @prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
>>> @prefix tdb:     <http://jena.hpl.hp.com/2008/tdb#> .
>>> @prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
>>>
>>> [] rdf:type fuseki:Server ;
>>>
>>>     fuseki:services (
>>>       <#service_ds>
>>>       <#service_ds_timeout_override>
>>>     ) .
>>>
>>> # TDB
>>> [] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
>>> tdb:DatasetTDB  rdfs:subClassOf  ja:RDFDataset .
>>> tdb:GraphTDB    rdfs:subClassOf  ja:Model .
>>>
>>>
>>>
>>> <#service_ds> rdf:type fuseki:Service ;
>>>      rdfs:label                             "TDB Service (RW)" ;
>>>      fuseki:name                            "ds" ;
>>>      fuseki:serviceQuery                    "query" ;
>>>      fuseki:dataset <#ds-with-lucene> ;
>>>      .
>>>
>>> <#service_ds_timeout_override>
>>>      rdfs:label                            "TDB Service Query with
>>> timeout override" ;
>>>      fuseki:name                           "ds_to" ;
>>>      fuseki:allowTimeoutOverride           true;
>>>      fuseki:serviceQuery                   "query" ;
>>>      fuseki:dataset <#ds-with-lucene> ;
>>>      .
>>>
>>> <#ds> rdf:type      tdb:DatasetTDB ;
>>>                        tdb:location "/var/lib/fuseki/databases/ds" ;
>>>       .
>>>
>>>
>>> @prefix text:    <http://jena.apache.org/text#> .
>>>
>>> [] ja:loadClass       "org.apache.jena.query.text.TextQuery" .
>>> text:TextDataset      rdfs:subClassOf   ja:RDFDataset .
>>> text:TextIndexLucene  rdfs:subClassOf   text:TextIndex .
>>>
>>>
>>> <#ds-with-lucene>
>>>      rdf:type     text:TextDataset;
>>>      text:dataset   <#ds> ;
>>>      text:index     <#indexLucene> ;
>>>      .
>>>
>>> <#indexLucene> a text:TextIndexLucene ;
>>>      text:directory <file:///var/lib/fuseki/databases/ds-lucene>;
>>>      text:entityMap <#entMap> ;
>>>      .
>>>
>>> <#entMap> a text:EntityMap ;
>>>      text:entityField      "uri" ;
>>>      text:defaultField     "text" ;
>>>      text:map (
>>>           [
>>>             text:field "text" ;
>>>             text:predicate rdfs:label ;
>>>           ]
>>>           ) .
>>> ]]
>>>
>>
>
>-- 
>Epimorphics Ltd, http://www.epimorphics.com
>Registered address: Court Lodge, 105 High Street, Portishead, Bristol
>BS20 6PT
>Epimorphics Ltd. is a limited company registered in England (number
>7016688)
>




Reply via email to