Hi Minto > Some questions: > - Is this something that is different between your latest fast lane > changes and the version before that?
Only since a couple of days queries sent to TcManager are in some case actually fastlaned. So no fastlane was actually in use before. > > - Is there someway I can shortcut things to ensure using fastlane? Since > most of my queries involve multiple graphs. We are having serious > performance problems that might be related to slow-lane. That is why I > started messing around fuseki in the first place (to do some performance > analysis to determine clerezza overhead). You could send the query directly to the TcProvider. Using this method you don't have security, probably not even after resolution of CLEREZZA-801. Adding this possibility to TcManager would be a bit difficult as the clients don't see the underlying TcProviders. What we could do is to have: public Object executeSparqlQuery(String query, UriRef defaultGraphName, boolean forceFastlane) if forceFastlane is true the query is fastlaned to the provider of defaultGraphName even if the query targets other graphs as well. A slightly weird behaviour would occur if the provider of defaultGraphName also provides a graph that is shadowed by another provider with a higher weight. In this rare case you could access graphs that are otherwise not accessible. But this seems to be a seldom corner case. > > - Also I see that for every graphs an osgi service is registered by > TcManager. This seems just fine for a limited number of graphs. However > in my case, with a huge number of graphs, I would like to disable this > feature. How best to approach this? We could add a service property to TcManager that allows to enable/disable this feature. Cheers, Reto > > Regards, > > Minto > > > Op 12-7-2013 14:55, Reto Bachmann-Gmür schreef: >> Hi Minto >> >> >From the stacktrace we see that the query is not fastlaned (this is >> because it is directed against all graphs). I'm not sure what's going >> wrong. Maybe something in JenaGraphAdaptor.java. Would be ineteresting >> to see if and how the value got from jena in JenaGraph.java:88 >> differst from the value returned to jena in JenaGraphAdaptor.java:115 >> After all all that happens is a wrapping to clerezza and wrapping back >> to jena. We could add some optimization here but it should work >> nevertheless. >> >> Cheers, >> Reto >> >> On Fri, Jul 12, 2013 at 2:34 PM, Minto van der Sluis <[email protected]> wrote: >>> Hi Folks, >>> >>> I ran into some odd behaviour when doing a simple query (counting the >>> number of graphs). This is the query I used: >>> >>> SELECT (COUNT(DISTINCT ?graphName) as ?nrOfGraphs) >>> WHERE { >>> GRAPH ?graphName { >>> ?s ?p ?o >>> } >>> } >>> >>> Running this query while using Clerezza gives me a "Quad: object cannot >>> be null" (see stack trace below). However the exact same query using >>> Jena Fuseki result in a proper answer. Both Clerezza and Fuseki are >>> configured to use the exact same TDB storage on disk. Fuseki gives the >>> following response: >>> >>> -------------- >>> | nrOfGraphs | >>> ============== >>> | 20538 | >>> -------------- >>> >>> >>> Using Clerezza from a while ago seems to run the query just fine >>> (although it takes way to long to respond). >>> >>> Now I wonder whether this behaviour is cause by recent Clerezza changes, >>> but I am not sure about this. Maybe there is another cause. >>> >>> Anyone a clue? >>> >>> Regards, >>> >>> Minto >>> >>> Stacktrace: >>> ========= >>> 2013-07-12 12:39:49,093 | ERROR | qtp2144814644-44 | >>> RestAnnotationService | us.rest.dm.RestAnnotationService 165 >>> | 213 - tmvplus-remote - 0.6.3.SNAPSHOT | Quad: object cannot be null >>> java.lang.UnsupportedOperationException: Quad: object cannot be null >>> at com.hp.hpl.jena.sparql.core.Quad.<init>(Quad.java:63) >>> at com.hp.hpl.jena.tdb.lib.TupleLib.quad(TupleLib.java:162) >>> at com.hp.hpl.jena.tdb.lib.TupleLib.quad(TupleLib.java:153) >>> at com.hp.hpl.jena.tdb.lib.TupleLib.access$100(TupleLib.java:45) >>> at com.hp.hpl.jena.tdb.lib.TupleLib$4.convert(TupleLib.java:87) >>> at com.hp.hpl.jena.tdb.lib.TupleLib$4.convert(TupleLib.java:83) >>> at org.apache.jena.atlas.iterator.Iter$4.next(Iter.java:301) >>> at >>> com.hp.hpl.jena.tdb.store.GraphTDBBase$ProjectQuadsToTriples.next(GraphTDBBase.java:175) >>> at >>> com.hp.hpl.jena.tdb.store.GraphTDBBase$ProjectQuadsToTriples.next(GraphTDBBase.java:163) >>> at >>> com.hp.hpl.jena.util.iterator.WrappedIterator.next(WrappedIterator.java:94) >>> at >>> org.apache.clerezza.rdf.jena.storage.JenaGraphAdaptor$1.next(JenaGraphAdaptor.java:115) >>> at >>> org.apache.clerezza.rdf.jena.storage.JenaGraphAdaptor$1.next(JenaGraphAdaptor.java:96) >>> at >>> org.apache.clerezza.rdf.core.impl.AbstractTripleCollection$1.next(AbstractTripleCollection.java:83)[ >>> 181:org.apache.clerezza.rdf.core:0.13.0.SNAPSHOT] >>> at >>> org.apache.clerezza.rdf.core.impl.AbstractTripleCollection$1.next(AbstractTripleCollection.java:72)[ >>> 181:org.apache.clerezza.rdf.core:0.13.0.SNAPSHOT] >>> at >>> org.apache.clerezza.rdf.jena.facade.JenaGraph$1.next(JenaGraph.java:99) >>> at >>> org.apache.clerezza.rdf.jena.facade.JenaGraph$1.next(JenaGraph.java:88) >>> at >>> com.hp.hpl.jena.util.iterator.WrappedIterator.next(WrappedIterator.java:94) >>> at >>> com.hp.hpl.jena.mem.TrackingTripleIterator.next(TrackingTripleIterator.java:47) >>> at >>> com.hp.hpl.jena.mem.TrackingTripleIterator.next(TrackingTripleIterator.java:31) >>> at >>> com.hp.hpl.jena.sparql.engine.iterator.QueryIterTriplePattern$TripleMapper.hasNextBinding(QueryIterTriplePattern.java:153) >>> at >>> com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:112) >>> at >>> com.hp.hpl.jena.sparql.engine.iterator.QueryIterRepeatApply.hasNextBinding(QueryIterRepeatApply.java:81) >>> at >>> com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:112) >>> at >>> com.hp.hpl.jena.sparql.engine.iterator.QueryIterBlockTriples.hasNextBinding(QueryIterBlockTriples.java:64) >>> at >>> com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:112) >>> at >>> com.hp.hpl.jena.sparql.engine.iterator.QueryIterProcessBinding.hasNextBinding(QueryIterProcessBinding.java:60) >>> at >>> com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:112) >>> at >>> com.hp.hpl.jena.sparql.engine.main.iterator.QueryIterGraph$QueryIterGraphInner.hasNextBinding(QueryIterGraph.java:123) >>> at >>> com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:112) >>> at >>> com.hp.hpl.jena.sparql.engine.iterator.QueryIterRepeatApply.hasNextBinding(QueryIterRepeatApply.java:81) >>> at >>> com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:112) >>> at >>> com.hp.hpl.jena.sparql.engine.iterator.QueryIterGroup$1.initializeIterator(QueryIterGroup.java:85) >>> at >>> org.apache.jena.atlas.iterator.IteratorDelayedInitialization.init(IteratorDelayedInitialization.java:37) >>> at >>> org.apache.jena.atlas.iterator.IteratorDelayedInitialization.hasNext(IteratorDelayedInitialization.java:47) >>> at >>> com.hp.hpl.jena.sparql.engine.iterator.QueryIterPlainWrapper.hasNextBinding(QueryIterPlainWrapper.java:54) >>> at >>> com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:112) >>> at >>> com.hp.hpl.jena.sparql.engine.iterator.QueryIterProcessBinding.hasNextBinding(QueryIterProcessBinding.java:60) >>> at >>> com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:112) >>> at >>> com.hp.hpl.jena.sparql.engine.iterator.QueryIterConvert.hasNextBinding(QueryIterConvert.java:59) >>> at >>> com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:112) >>> at >>> com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:40) >>> at >>> com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:112) >>> at >>> com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:40) >>> at >>> com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:112) >>> at >>> com.hp.hpl.jena.sparql.engine.ResultSetStream.hasNext(ResultSetStream.java:72) >>> at >>> org.apache.clerezza.rdf.jena.sparql.ResultSetWrapper.<init>(ResultSetWrapper.java:40) >>> at >>> org.apache.clerezza.rdf.jena.sparql.JenaSparqlEngine.execute(JenaSparqlEngine.java:115) >>> at >>> org.apache.clerezza.rdf.core.access.TcManager.executeSparqlQuery(TcManager.java:294) >>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native >>> Method)[:1.7.0_25] >>> at >>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)[:1.7.0_25] >>> at >>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.7.0_25] >>> at java.lang.reflect.Method.invoke(Method.java:606)[:1.7.0_25] >>> at >>> org.apache.aries.proxy.impl.ProxyHandler$1.invoke(ProxyHandler.java:54) >>> at >>> org.apache.aries.proxy.impl.ProxyHandler.invoke(ProxyHandler.java:119) >>> at >>> org.apache.clerezza.rdf.core.access.$TcManager552685843.executeSparqlQuery(Unknown >>> Source) >>> at >>> nl.overheid.stelsel.digimelding.astore.storage.clerezza.ClerezzaStorageProvider.query(ClerezzaStorageProvider.java:250) >>> ... >>> >> > > > -- > ir. ing. Minto van der Sluis > Software innovator / renovator > Xup BV > > Mobiel: +31 (0) 626 014541 >
