Я использую 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)
Эта проблема обсуждалась здесь а> в прошлом году. Однако для разных версий Титана и для записи данных в Титан вместо чтения, как здесь.
Я не вижу никакого программного способа адаптировать размер буфера (де)сериализатора, так как же предпочтительнее решить эту проблему? Кроме того, установка некоторого ограничения (какое?, где?) на более высокое значение может быть только временным решением, поскольку я никогда не знаю, сколько данных вернет запрос.
В любом случае - объем данных, которые я получаю, довольно мал (вероятно, чуть более 8500 байт). Я удивлен, что это исключение вообще выбрасывается?