我正在使用 Gremlin 3.0.2 和 Titan 1.0.0。
我发送到 Gremlin 服务器的请求将返回节点列表及其属性。实际上,它是一个项目列表,如下所示:
[coverurl:[https://lh3.googleusercontent.com/RYb-duneinq8ClWVLVKknkIx1jOKm64LjreziFApEnkKME8j9tHNDRi9NMA6PK4PTXO7], appname:[Slack], pkgid:[com.Slack]]
在一种情况下,一个请求将返回 38 个与上述类似的项目,一切都很好。在另一种情况下,列表将包含 56 个这样的项目,我得到以下异常:
WARN org.apache.tinkerpop.gremlin.driver.MessageSerializer - Response [PooledUnsafeDirectByteBuf(ridx: 0, widx: 0, cap: 0)] could not be deserialized by org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0.
ERROR org.apache.tinkerpop.gremlin.driver.Handler$GremlinResponseHandler - Could not process the response
io.netty.handler.codec.DecoderException: org.apache.tinkerpop.gremlin.driver.ser.SerializationException: org.apache.tinkerpop.shaded.kryo.KryoException: Buffer too small: capacity: 0, required: 1
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:99)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
这个问题去年已经在这里讨论过了。但是,对于不同版本的 Titan 以及将数据写入 Titan,而不是像这里那样读取。
我没有看到任何编程方式来调整(反)序列化器的缓冲区大小,那么处理这个问题的首选方法是什么?此外,将一些限制(哪个?,在哪里?)设置为更高的值只能是一个临时解决方案,因为我永远不知道请求将返回多少数据。
无论如何 - 我收到的数据量相当小(可能比 8500 字节多一点)。我很惊讶这个异常被抛出了?