[
https://issues.apache.org/jira/browse/TINKERPOP-2005?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16563476#comment-16563476
]
ASF GitHub Bot commented on TINKERPOP-2005:
-------------------------------------------
Github user spmallette commented on a diff in the pull request:
https://github.com/apache/tinkerpop/pull/899#discussion_r206485952
--- Diff:
gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractOpProcessor.java
---
@@ -72,8 +73,19 @@ protected AbstractOpProcessor(final boolean
manageTransactions) {
* @param context The Gremlin Server {@link Context} object containing
settings, request message, etc.
* @param itty The result to iterator
* @throws TimeoutException if the time taken to serialize the entire
result set exceeds the allowable time.
+ * @see #handleIterator(ResponseHandlerContext, Iterator)
*/
protected void handleIterator(final Context context, final Iterator
itty) throws TimeoutException, InterruptedException {
+ handleIterator(new ResponseHandlerContext(context), itty);
+ }
+
+ /**
+ * A variant of {@link #handleIterator(Context, Iterator)} that is
suitable for use in situations when multiple
+ * threads may produce {@link ResponseStatusCode#isFinalResponse()
final} response messages concurrently.
+ * @see #handleIterator(Context, Iterator)
+ */
+ protected void handleIterator(final ResponseHandlerContext rhc, final
Iterator itty) throws TimeoutException, InterruptedException {
--- End diff --
same question here as on `evalOpInternal()` - is it reasonable for someone
to directly call this method? or is it more likely that they would continue to
call the original method which would let us control creation of the
`ResponseHandlerContext` ourselves?
> Intermittent NullPointerException in response handling
> ------------------------------------------------------
>
> Key: TINKERPOP-2005
> URL: https://issues.apache.org/jira/browse/TINKERPOP-2005
> Project: TinkerPop
> Issue Type: Improvement
> Components: driver
> Affects Versions: 3.2.9
> Reporter: stephen mallette
> Priority: Minor
>
> This stacktrace was reported to me:
> {code}
> 06:11:01 2018-07-05 13:11:01,706 ERROR 13:11:01,618 Could not process the
> response
> 06:11:01 java.lang.NullPointerException: null
> 06:11:01 at
> org.apache.tinkerpop.gremlin.driver.Handler$GremlinResponseHandler.lambda$channelRead0$39(Handler.java:220)
> 06:11:01 at java.util.ArrayList.forEach(ArrayList.java:1257)
> 06:11:01 at
> org.apache.tinkerpop.gremlin.driver.Handler$GremlinResponseHandler.channelRead0(Handler.java:220)
> 06:11:01 at
> org.apache.tinkerpop.gremlin.driver.Handler$GremlinResponseHandler.channelRead0(Handler.java:197)
> 06:11:01 at
> io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
> 06:11:01 at
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
> 06:11:01 at
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
> 06:11:01 at
> io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
> 06:11:01 at
> org.apache.tinkerpop.gremlin.driver.Handler$GremlinSaslAuthenticationHandler.channelRead0(Handler.java:123)
> 06:11:01 at
> org.apache.tinkerpop.gremlin.driver.Handler$GremlinSaslAuthenticationHandler.channelRead0(Handler.java:67)
> 06:11:01 at
> io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
> 06:11:01 at
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
> 06:11:01 at
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
> 06:11:01 at
> io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
> 06:11:01 at
> io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
> 06:11:01 at
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
> 06:11:01 at
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
> 06:11:01 at
> io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
> 06:11:01 at
> org.apache.tinkerpop.gremlin.driver.handler.WebSocketClientHandler.channelRead0(WebSocketClientHandler.java:94)
> 06:11:01 at
> io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
> 06:11:01 at
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
> 06:11:01 at
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
> 06:11:01 at
> io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
> 06:11:01 at
> io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:310)
> 06:11:01 at
> io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:284)
> 06:11:01 at
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
> 06:11:01 at
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
> 06:11:01 at
> io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
> 06:11:01 at
> io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334)
> 06:11:01 at
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
> 06:11:01 at
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
> 06:11:01 at
> io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926)
> 06:11:01 at
> io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:134)
> 06:11:01 at
> io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:644)
> 06:11:01 at
> io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:579)
> 06:11:01 at
> io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:496)
> 06:11:01 at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:458)
> 06:11:01 at
> io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
> 06:11:01 at java.lang.Thread.run(Thread.java:748)
> {code}
> Some initial investigation seems to indicate that it is intermittent and
> likely some form of timing issue. Will probably be hard to recreate. Hesitant
> to just make the problem go away without understanding why it is happening.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)