Я использую Gremlin 3.0.2 вместе с Titan 1.0.0.KryoException: буфер слишком маленький
Запрос, отправляемый на сервер 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)
Эта проблема была обсуждена here в прошлом году. Однако для разных версий Titan и для записи данных в Titan вместо чтения, как это имеет место здесь.
Я не вижу программного способа адаптации размера буфера сериализатора (De), так что это лучший способ справиться с этой проблемой? Кроме того, установка некоторого ограничения (который ?, где?) На некоторое более высокое значение может быть только временным решением, так как я никогда не знаю, сколько данных будет возвращено запросу.
Anyways - количество данных, которое я получаю, довольно мало (вероятно, чуть больше 8500 байт). Я удивлен, что это исключение вообще брошено?
Итак, для полноты, как бы настроить это правильно? В моем коде Kotlin (который легко переводится на Java) у меня есть 'val kryo = GryoMapper.build(). AddRegistry (TitanIoRegistry.INSTANCE) .create(); val ser = GryoMessageSerializerV1d0 (крио); val conf = HashMap(); conf.put (TOKEN_BUFFER_SIZE, serializerBufferSize); ser.configure (conf, null) 'где' var TOKEN_BUFFER_SIZE = "bufferSize" и 'var serializerBufferSize = 8192'. По-видимому, это не имеет никакого эффекта. –
обновил мой ответ –