[ 
https://issues.apache.org/jira/browse/JENA-1529?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alex Kourijoki updated JENA-1529:
---------------------------------
    Description: 
After upgrading Fuseki to 3.7.0 and switching from TDB1 to TDB2 I noticed that 
Fuseki was busy generating colossal log files. Digging a bit deeper, I found 
the root cause to be that this query
{code:java}
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?conc ?label ?lang
WHERE {
    ?conc a skos:Concept .
    ?conc skos:prefLabel ?label .
    #BIND ("anything" as ?anything) # interestingly, uncommenting this line 
prevents stack trace from appearing in tdb2
    VALUES (?lang) {  ('en') ('de') }
    FILTER (langMatches(lang(?label), ?lang))
}
LIMIT 3
{code}
against this example .ttl file
{code:java}
@base <http://example.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
<#example1> a skos:Concept ;
    skos:prefLabel "test1 with 'en' langcode"@en,
        "test1 with 'de' langcode"@de,
        "test1 with no langcode" .

<#example2> a skos:Concept ;
    skos:prefLabel "test2 with 'en' langcode"@en,
        "test2 with 'de' langcode"@de,
        "test2 with no langcode" .
{code}
generates the following kind of stack traces:
{code:java}
ERROR BindingTDB           :: get1(?lang)
org.apache.jena.tdb2.TDBException: No node in NodeTable for NodeId 
[DoesNotExist]
    at org.apache.jena.tdb2.solver.BindingTDB.get1(BindingTDB.java:127)
    at 
org.apache.jena.sparql.engine.binding.BindingBase.get(BindingBase.java:104)
    at org.apache.jena.sparql.expr.ExprVar.eval(ExprVar.java:60)
    at org.apache.jena.sparql.expr.ExprVar.eval(ExprVar.java:53)
    at org.apache.jena.sparql.expr.ExprNode.eval(ExprNode.java:93)
    at org.apache.jena.sparql.expr.ExprFunction2.eval(ExprFunction2.java:77)
    at org.apache.jena.sparql.expr.ExprNode.isSatisfied(ExprNode.java:41)
    at 
org.apache.jena.sparql.engine.iterator.QueryIterFilterExpr.accept(QueryIterFilterExpr.java:49)
    at 
org.apache.jena.sparql.engine.iterator.QueryIterProcessBinding.hasNextBinding(QueryIterProcessBinding.java:69)
    at 
org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
    at 
org.apache.jena.sparql.engine.iterator.QueryIterConvert.hasNextBinding(QueryIterConvert.java:58)
    at 
org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
    at 
org.apache.jena.sparql.engine.iterator.QueryIterSlice.hasNextBinding(QueryIterSlice.java:76)
    at 
org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
    at 
org.apache.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:39)
    at 
org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
    at 
org.apache.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:39)
    at 
org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
    at 
org.apache.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:39)
    at 
org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
    at 
org.apache.jena.sparql.engine.ResultSetStream.hasNext(ResultSetStream.java:74)
    at 
org.apache.jena.sparql.engine.ResultSetCheckCondition.hasNext(ResultSetCheckCondition.java:55)
    at 
org.apache.jena.sparql.resultset.ResultSetMem.<init>(ResultSetMem.java:90)
    at 
org.apache.jena.query.ResultSetFactory.makeRewindable(ResultSetFactory.java:357)
    at org.apache.jena.sparql.resultset.TextOutput.write(TextOutput.java:145)
    at org.apache.jena.sparql.resultset.TextOutput.write(TextOutput.java:130)
    at org.apache.jena.sparql.resultset.TextOutput.write(TextOutput.java:118)
    at org.apache.jena.sparql.resultset.TextOutput.format(TextOutput.java:66)
    at org.apache.jena.query.ResultSetFormatter.out(ResultSetFormatter.java:165)
    at 
org.apache.jena.sparql.util.QueryExecUtils.outputResultSet(QueryExecUtils.java:157)
    at 
org.apache.jena.sparql.util.QueryExecUtils.doSelectQuery(QueryExecUtils.java:191)
    at 
org.apache.jena.sparql.util.QueryExecUtils.executeQuery(QueryExecUtils.java:78)
    at arq.query.lambda$queryExec$0(query.java:224)
    at org.apache.jena.system.Txn.exec(Txn.java:81)
    at org.apache.jena.system.Txn.executeRead(Txn.java:123)
    at arq.query.queryExec(query.java:221)
    at arq.query.exec(query.java:153)
    at jena.cmd.CmdMain.mainMethod(CmdMain.java:93)
    at jena.cmd.CmdMain.mainRun(CmdMain.java:58)
    at jena.cmd.CmdMain.mainRun(CmdMain.java:45)
    at tdb2.tdbquery.main(tdbquery.java:30)
{code}
Finally, a correct answer is provided:
{code:java}
-------------------------------------------------------------------------
| conc                           | label                         | lang |
=========================================================================
| <http://example.org/#example1> | "test1 with 'en' langcode"@en | "en" |
| <http://example.org/#example2> | "test2 with 'en' langcode"@en | "en" |
| <http://example.org/#example1> | "test1 with 'de' langcode"@de | "de" |
-------------------------------------------------------------------------
{code}
This seemed not to happen with apache-jena-3.7.0/bin/tdbquery against a TDB1 
store with the same query. Interestingly, having a bind of any kind in the 
query seemed to resolve the issue for tdb2.tdbquery.

 

  was:
After upgrading Fuseki to 3.7.0 and switching from TDB1 to TDB2 I noticed that 
Fuseki was busy generating colossal log files. Digging a bit deeper, I found 
the root cause to be that this query
{code:java}
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?conc ?label ?lang
WHERE {
    ?conc a skos:Concept .
    ?conc skos:prefLabel ?label .
    #BIND ("anything" as ?anything) # interestingly, uncommenting this line 
prevents stack trace from appearing in tdb2
    VALUES (?lang) {  ('en') ('de') }
    FILTER (langMatches(lang(?label), ?lang))
}
LIMIT 3
{code}
against this example .ttl file
{code:java}
@base <http://example.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
<#example1> a skos:Concept ;
    skos:prefLabel "test1 with 'en' langcode"@en,
        "test1 with 'de' langcode"@de,
        "test1 with no langcode" .

<#example2> a skos:Concept ;
    skos:prefLabel "test2 with 'en' langcode"@en,
        "test2 with 'de' langcode"@de,
        "test2 with no langcode" .
{code}
generates the following kind of stack traces:

 

 
{code:java}
ERROR BindingTDB           :: get1(?lang)
org.apache.jena.tdb2.TDBException: No node in NodeTable for NodeId 
[DoesNotExist]
    at org.apache.jena.tdb2.solver.BindingTDB.get1(BindingTDB.java:127)
    at 
org.apache.jena.sparql.engine.binding.BindingBase.get(BindingBase.java:104)
    at org.apache.jena.sparql.expr.ExprVar.eval(ExprVar.java:60)
    at org.apache.jena.sparql.expr.ExprVar.eval(ExprVar.java:53)
    at org.apache.jena.sparql.expr.ExprNode.eval(ExprNode.java:93)
    at org.apache.jena.sparql.expr.ExprFunction2.eval(ExprFunction2.java:77)
    at org.apache.jena.sparql.expr.ExprNode.isSatisfied(ExprNode.java:41)
    at 
org.apache.jena.sparql.engine.iterator.QueryIterFilterExpr.accept(QueryIterFilterExpr.java:49)
    at 
org.apache.jena.sparql.engine.iterator.QueryIterProcessBinding.hasNextBinding(QueryIterProcessBinding.java:69)
    at 
org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
    at 
org.apache.jena.sparql.engine.iterator.QueryIterConvert.hasNextBinding(QueryIterConvert.java:58)
    at 
org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
    at 
org.apache.jena.sparql.engine.iterator.QueryIterSlice.hasNextBinding(QueryIterSlice.java:76)
    at 
org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
    at 
org.apache.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:39)
    at 
org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
    at 
org.apache.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:39)
    at 
org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
    at 
org.apache.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:39)
    at 
org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
    at 
org.apache.jena.sparql.engine.ResultSetStream.hasNext(ResultSetStream.java:74)
    at 
org.apache.jena.sparql.engine.ResultSetCheckCondition.hasNext(ResultSetCheckCondition.java:55)
    at 
org.apache.jena.sparql.resultset.ResultSetMem.<init>(ResultSetMem.java:90)
    at 
org.apache.jena.query.ResultSetFactory.makeRewindable(ResultSetFactory.java:357)
    at org.apache.jena.sparql.resultset.TextOutput.write(TextOutput.java:145)
    at org.apache.jena.sparql.resultset.TextOutput.write(TextOutput.java:130)
    at org.apache.jena.sparql.resultset.TextOutput.write(TextOutput.java:118)
    at org.apache.jena.sparql.resultset.TextOutput.format(TextOutput.java:66)
    at org.apache.jena.query.ResultSetFormatter.out(ResultSetFormatter.java:165)
    at 
org.apache.jena.sparql.util.QueryExecUtils.outputResultSet(QueryExecUtils.java:157)
    at 
org.apache.jena.sparql.util.QueryExecUtils.doSelectQuery(QueryExecUtils.java:191)
    at 
org.apache.jena.sparql.util.QueryExecUtils.executeQuery(QueryExecUtils.java:78)
    at arq.query.lambda$queryExec$0(query.java:224)
    at org.apache.jena.system.Txn.exec(Txn.java:81)
    at org.apache.jena.system.Txn.executeRead(Txn.java:123)
    at arq.query.queryExec(query.java:221)
    at arq.query.exec(query.java:153)
    at jena.cmd.CmdMain.mainMethod(CmdMain.java:93)
    at jena.cmd.CmdMain.mainRun(CmdMain.java:58)
    at jena.cmd.CmdMain.mainRun(CmdMain.java:45)
    at tdb2.tdbquery.main(tdbquery.java:30)
{code}
Finally, a correct answer is provided:
{code:java}
-------------------------------------------------------------------------
| conc                           | label                         | lang |
=========================================================================
| <http://example.org/#example1> | "test1 with 'en' langcode"@en | "en" |
| <http://example.org/#example2> | "test2 with 'en' langcode"@en | "en" |
| <http://example.org/#example1> | "test1 with 'de' langcode"@de | "de" |
-------------------------------------------------------------------------
{code}
This seemed not to happen with apache-jena-3.7.0/bin/tdbquery against a TDB1 
store with the same query. Interestingly, having a bind of any kind in the 
query seemed to resolve the issue for tdb2.tdbquery.

 


> tdb2.tdbquery prints heavy stack trace whilst querying a TDB2 store
> -------------------------------------------------------------------
>
>                 Key: JENA-1529
>                 URL: https://issues.apache.org/jira/browse/JENA-1529
>             Project: Apache Jena
>          Issue Type: Bug
>    Affects Versions: Jena 3.7.0
>         Environment: $ java -version
> openjdk version "9-internal"
> OpenJDK Runtime Environment (build 9-internal+0-2016-04-14-195246.buildd.src)
> OpenJDK 64-Bit Server VM (build 9-internal+0-2016-04-14-195246.buildd.src, 
> mixed mode)
> Ubuntu 16.04.04 LTS
>            Reporter: Alex Kourijoki
>            Priority: Major
>
> After upgrading Fuseki to 3.7.0 and switching from TDB1 to TDB2 I noticed 
> that Fuseki was busy generating colossal log files. Digging a bit deeper, I 
> found the root cause to be that this query
> {code:java}
> PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
> SELECT ?conc ?label ?lang
> WHERE {
>     ?conc a skos:Concept .
>     ?conc skos:prefLabel ?label .
>     #BIND ("anything" as ?anything) # interestingly, uncommenting this line 
> prevents stack trace from appearing in tdb2
>     VALUES (?lang) {  ('en') ('de') }
>     FILTER (langMatches(lang(?label), ?lang))
> }
> LIMIT 3
> {code}
> against this example .ttl file
> {code:java}
> @base <http://example.org/> .
> @prefix skos: <http://www.w3.org/2004/02/skos/core#> .
> <#example1> a skos:Concept ;
>     skos:prefLabel "test1 with 'en' langcode"@en,
>         "test1 with 'de' langcode"@de,
>         "test1 with no langcode" .
> <#example2> a skos:Concept ;
>     skos:prefLabel "test2 with 'en' langcode"@en,
>         "test2 with 'de' langcode"@de,
>         "test2 with no langcode" .
> {code}
> generates the following kind of stack traces:
> {code:java}
> ERROR BindingTDB           :: get1(?lang)
> org.apache.jena.tdb2.TDBException: No node in NodeTable for NodeId 
> [DoesNotExist]
>     at org.apache.jena.tdb2.solver.BindingTDB.get1(BindingTDB.java:127)
>     at 
> org.apache.jena.sparql.engine.binding.BindingBase.get(BindingBase.java:104)
>     at org.apache.jena.sparql.expr.ExprVar.eval(ExprVar.java:60)
>     at org.apache.jena.sparql.expr.ExprVar.eval(ExprVar.java:53)
>     at org.apache.jena.sparql.expr.ExprNode.eval(ExprNode.java:93)
>     at org.apache.jena.sparql.expr.ExprFunction2.eval(ExprFunction2.java:77)
>     at org.apache.jena.sparql.expr.ExprNode.isSatisfied(ExprNode.java:41)
>     at 
> org.apache.jena.sparql.engine.iterator.QueryIterFilterExpr.accept(QueryIterFilterExpr.java:49)
>     at 
> org.apache.jena.sparql.engine.iterator.QueryIterProcessBinding.hasNextBinding(QueryIterProcessBinding.java:69)
>     at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
>     at 
> org.apache.jena.sparql.engine.iterator.QueryIterConvert.hasNextBinding(QueryIterConvert.java:58)
>     at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
>     at 
> org.apache.jena.sparql.engine.iterator.QueryIterSlice.hasNextBinding(QueryIterSlice.java:76)
>     at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
>     at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:39)
>     at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
>     at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:39)
>     at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
>     at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:39)
>     at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
>     at 
> org.apache.jena.sparql.engine.ResultSetStream.hasNext(ResultSetStream.java:74)
>     at 
> org.apache.jena.sparql.engine.ResultSetCheckCondition.hasNext(ResultSetCheckCondition.java:55)
>     at 
> org.apache.jena.sparql.resultset.ResultSetMem.<init>(ResultSetMem.java:90)
>     at 
> org.apache.jena.query.ResultSetFactory.makeRewindable(ResultSetFactory.java:357)
>     at org.apache.jena.sparql.resultset.TextOutput.write(TextOutput.java:145)
>     at org.apache.jena.sparql.resultset.TextOutput.write(TextOutput.java:130)
>     at org.apache.jena.sparql.resultset.TextOutput.write(TextOutput.java:118)
>     at org.apache.jena.sparql.resultset.TextOutput.format(TextOutput.java:66)
>     at 
> org.apache.jena.query.ResultSetFormatter.out(ResultSetFormatter.java:165)
>     at 
> org.apache.jena.sparql.util.QueryExecUtils.outputResultSet(QueryExecUtils.java:157)
>     at 
> org.apache.jena.sparql.util.QueryExecUtils.doSelectQuery(QueryExecUtils.java:191)
>     at 
> org.apache.jena.sparql.util.QueryExecUtils.executeQuery(QueryExecUtils.java:78)
>     at arq.query.lambda$queryExec$0(query.java:224)
>     at org.apache.jena.system.Txn.exec(Txn.java:81)
>     at org.apache.jena.system.Txn.executeRead(Txn.java:123)
>     at arq.query.queryExec(query.java:221)
>     at arq.query.exec(query.java:153)
>     at jena.cmd.CmdMain.mainMethod(CmdMain.java:93)
>     at jena.cmd.CmdMain.mainRun(CmdMain.java:58)
>     at jena.cmd.CmdMain.mainRun(CmdMain.java:45)
>     at tdb2.tdbquery.main(tdbquery.java:30)
> {code}
> Finally, a correct answer is provided:
> {code:java}
> -------------------------------------------------------------------------
> | conc                           | label                         | lang |
> =========================================================================
> | <http://example.org/#example1> | "test1 with 'en' langcode"@en | "en" |
> | <http://example.org/#example2> | "test2 with 'en' langcode"@en | "en" |
> | <http://example.org/#example1> | "test1 with 'de' langcode"@de | "de" |
> -------------------------------------------------------------------------
> {code}
> This seemed not to happen with apache-jena-3.7.0/bin/tdbquery against a TDB1 
> store with the same query. Interestingly, having a bind of any kind in the 
> query seemed to resolve the issue for tdb2.tdbquery.
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to