DataFabricRus / scylla-rdf

An RDF store based on ScyllaDB and Eclipse RDF4J
MIT License
8 stars 1 forks source link

An exception is thrown while querying a subject within a named graph #9

Closed DramaticallyDecayed closed 5 years ago

DramaticallyDecayed commented 5 years ago

The query (a kind of) that leads to the exception:

SELECT ?s
WHERE {
    GRAPH <http://example.com/graphname> { 
      ?s a :ClassName . 
    } 
}

The exception:

org.eclipse.rdf4j.query.QueryEvaluationException: java.util.concurrent.ExecutionException: com.datastax.driver.core.exceptions.InvalidQueryException: Invalid null value for clustering key part subject ``` scylla-rdf_1 | org.eclipse.rdf4j.query.QueryEvaluationException: java.util.concurrent.ExecutionException: com.datastax.driver.core.exceptions.InvalidQueryException: Invalid null value for clustering key part subject scylla-rdf_1 | at org.eclipse.rdf4j.sail.evaluation.SailTripleSource$1.convert(SailTripleSource.java:49) scylla-rdf_1 | at org.eclipse.rdf4j.sail.evaluation.SailTripleSource$1.convert(SailTripleSource.java:45) scylla-rdf_1 | at org.eclipse.rdf4j.common.iteration.ExceptionConvertingIteration.hasNext(ExceptionConvertingIteration.java:69) scylla-rdf_1 | at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:63) scylla-rdf_1 | at org.eclipse.rdf4j.common.iteration.FilterIteration.findNextElement(FilterIteration.java:74) scylla-rdf_1 | at org.eclipse.rdf4j.common.iteration.FilterIteration.hasNext(FilterIteration.java:45) scylla-rdf_1 | at org.eclipse.rdf4j.common.iteration.ConvertingIteration.hasNext(ConvertingIteration.java:62) scylla-rdf_1 | at org.eclipse.rdf4j.common.iteration.ConvertingIteration.hasNext(ConvertingIteration.java:62) scylla-rdf_1 | at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:63) scylla-rdf_1 | at org.eclipse.rdf4j.sail.helpers.SailBaseIteration.hasNext(SailBaseIteration.java:41) scylla-rdf_1 | at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:63) scylla-rdf_1 | at org.eclipse.rdf4j.query.QueryResults.report(QueryResults.java:225) scylla-rdf_1 | at org.eclipse.rdf4j.http.server.repository.TupleQueryResultView.renderInternal(TupleQueryResultView.java:99) scylla-rdf_1 | at org.eclipse.rdf4j.http.server.repository.QueryResultView.render(QueryResultView.java:63) scylla-rdf_1 | at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1371) scylla-rdf_1 | at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1117) scylla-rdf_1 | at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1056) scylla-rdf_1 | at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) scylla-rdf_1 | at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) scylla-rdf_1 | at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908) scylla-rdf_1 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) scylla-rdf_1 | at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) scylla-rdf_1 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) scylla-rdf_1 | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) scylla-rdf_1 | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) scylla-rdf_1 | at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) scylla-rdf_1 | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) scylla-rdf_1 | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) scylla-rdf_1 | at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:109) scylla-rdf_1 | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) scylla-rdf_1 | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) scylla-rdf_1 | at com.github.ziplet.filter.compression.CompressingFilter.doFilter(CompressingFilter.java:300) scylla-rdf_1 | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) scylla-rdf_1 | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) scylla-rdf_1 | at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) scylla-rdf_1 | at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) scylla-rdf_1 | at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) scylla-rdf_1 | at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) scylla-rdf_1 | at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) scylla-rdf_1 | at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678) scylla-rdf_1 | at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) scylla-rdf_1 | at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) scylla-rdf_1 | at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) scylla-rdf_1 | at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) scylla-rdf_1 | at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:853) scylla-rdf_1 | at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1587) scylla-rdf_1 | at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) scylla-rdf_1 | at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) scylla-rdf_1 | at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) scylla-rdf_1 | at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) scylla-rdf_1 | at java.base/java.lang.Thread.run(Thread.java:834) scylla-rdf_1 | Caused by: java.util.concurrent.ExecutionException: com.datastax.driver.core.exceptions.InvalidQueryException: Invalid null value for clustering key part subject scylla-rdf_1 | at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:299) scylla-rdf_1 | at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:286) scylla-rdf_1 | at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:116) scylla-rdf_1 | at cc.datafabric.scyllardf.dao.MultipleResultSetFutureIteration.hasNext(MultipleResultSetFutureIteration.kt:38) scylla-rdf_1 | at cc.datafabric.scyllardf.dao.SPOCIteration.hasNext(SPOCIteration.kt:22) scylla-rdf_1 | at cc.datafabric.scyllardf.coder.CoderFacade$toStatementIteration$1.hasNext(CoderFacade.kt:222) scylla-rdf_1 | at org.eclipse.rdf4j.common.iteration.IterationWrapper.hasNext(IterationWrapper.java:63) scylla-rdf_1 | at org.eclipse.rdf4j.sail.helpers.SailBaseIteration.hasNext(SailBaseIteration.java:41) scylla-rdf_1 | at org.eclipse.rdf4j.common.iteration.ExceptionConvertingIteration.hasNext(ExceptionConvertingIteration.java:63) scylla-rdf_1 | ... 48 common frames omitted scylla-rdf_1 | Caused by: com.datastax.driver.core.exceptions.InvalidQueryException: Invalid null value for clustering key part subject scylla-rdf_1 | at com.datastax.driver.core.Responses$Error.asException(Responses.java:181) scylla-rdf_1 | at com.datastax.driver.core.DefaultResultSetFuture.onSet(DefaultResultSetFuture.java:215) scylla-rdf_1 | at com.datastax.driver.core.RequestHandler.setFinalResult(RequestHandler.java:229) scylla-rdf_1 | at com.datastax.driver.core.RequestHandler.access$2600(RequestHandler.java:63) scylla-rdf_1 | at com.datastax.driver.core.RequestHandler$SpeculativeExecution.setFinalResult(RequestHandler.java:1011) scylla-rdf_1 | at com.datastax.driver.core.RequestHandler$SpeculativeExecution.onSet(RequestHandler.java:814) scylla-rdf_1 | at com.datastax.driver.core.Connection$Dispatcher.channelRead0(Connection.java:1286) scylla-rdf_1 | at com.datastax.driver.core.Connection$Dispatcher.channelRead0(Connection.java:1204) scylla-rdf_1 | at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) scylla-rdf_1 | at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) scylla-rdf_1 | at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) scylla-rdf_1 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) scylla-rdf_1 | at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286) scylla-rdf_1 | at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) scylla-rdf_1 | at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) scylla-rdf_1 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) scylla-rdf_1 | at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102) scylla-rdf_1 | at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) scylla-rdf_1 | at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) scylla-rdf_1 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) scylla-rdf_1 | at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:323) scylla-rdf_1 | at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:297) scylla-rdf_1 | at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) scylla-rdf_1 | at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) scylla-rdf_1 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) scylla-rdf_1 | at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86) scylla-rdf_1 | at com.datastax.driver.core.InboundTrafficMeter.channelRead(InboundTrafficMeter.java:38) scylla-rdf_1 | at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) scylla-rdf_1 | at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) scylla-rdf_1 | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) scylla-rdf_1 | at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1434) scylla-rdf_1 | at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) scylla-rdf_1 | at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) scylla-rdf_1 | at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:965) scylla-rdf_1 | at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163) scylla-rdf_1 | at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:644) scylla-rdf_1 | at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:579) scylla-rdf_1 | at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:496) scylla-rdf_1 | at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:458) scylla-rdf_1 | at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:897) scylla-rdf_1 | at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) scylla-rdf_1 | ... 1 common frames omitted ```
KMax commented 5 years ago

@DramaticallyDecayed What were loaded into the store? Or the exception is reproducible on an empty one?

KMax commented 5 years ago

I've pushed a fix for the case when the store is empty. If it doesn't solve your problem, please, reopen the issue.

DramaticallyDecayed commented 5 years ago

Thank you! It works fine even on the non-empty store. But now a slightly different kind of a query returns a slightly different exception. The queries (on the non-empty store):

SELECT ?s ?o
WHERE {
    GRAPH <http://example.com/graphname> { 
      ?s a ?o . 
    } 
}
SELECT ?s ?o
WHERE {
    GRAPH <http://example.com/graphname> { 
      ?s a/rdfs:subClassOf+ :ClassName . 
    } 
}

return:

org.eclipse.rdf4j.query.QueryEvaluationException: com.datastax.driver.core.exceptions.InvalidQueryException: Invalid null value for clustering key part object

Edit A: add one more query that returns the same error

KMax commented 5 years ago

Now I added an extended unit test which covers all reported and similar cases. Give it a try! :)