Ich benutze Gremlin 3.0.2 zusammen mit Titan 1.0.0.KryoException: Puffer zu klein
Die Anforderung, die ich an den Gremlin Server sende, gibt eine Liste der Knoten und ihrer Eigenschaften zurück. Effektiv, es ist eine Liste der Elemente wie folgt aus:
[coverurl:[https://lh3.googleusercontent.com/RYb-duneinq8ClWVLVKknkIx1jOKm64LjreziFApEnkKME8j9tHNDRi9NMA6PK4PTXO7], appname:[Slack], pkgid:[com.Slack]]
In einem Fall wurde ein Antrag 38 Artikel wie die zurück oben und alles ist in Ordnung. In einem anderen Fall würde die Liste 56 dieser Elemente enthält, und ich bekomme die folgende Ausnahme:
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)
Dieses Problem here im vergangenen Jahr diskutiert wurde. Allerdings für verschiedene Versionen von Titan und zum Schreiben von Daten auf Titan, anstatt zu lesen, wie es hier der Fall ist.
Ich sehe keinen programmatischen Weg, um die Puffergröße des (De) Serialisierers anzupassen, also was ist der bevorzugte Weg, um mit diesem Problem umzugehen? Außerdem kann das Festlegen eines Limits (welches ?, wo?) Auf einen höheren Wert nur eine temporäre Lösung sein, da ich nie weiß, wie viele Daten eine Anfrage zurückgeben wird.
Anyways - Die Menge der Daten, die ich erhalte, ist ziemlich klein (wahrscheinlich etwas mehr als 8500 Bytes). Ich bin überrascht, dass diese Ausnahme überhaupt geworfen wird?
Also, zur Vollständigkeit, wie würde man das richtig konfigurieren? In meinem Kotlin Code (der nahtlos in Java übersetzt) habe ich 'val kryo = GryoMapper.build(). AddRegistry (TitanIoRegistry.INSTANCE) .create(); valser = GryoMessageSerializerV1d0 (kryo); val conf = HashMap(); conf.put (TOKEN_BUFFER_SIZE, serializerBufferSize); ser.configure (conf, null) 'where' var TOKEN_BUFFER_SIZE = "pufferSize" 'und' var serializerBufferSize = 8192'. Offensichtlich hat dies keine Wirkung. –
aktualisierte meine Antwort –