Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
3.0.1-incubating
-
None
Description
Serialization of large responses in Gryo is not done correctly. It looks like there is some sort of framing or fragmentation issue. I haven't tracked it down the the root cause. It can be reproduced by sending the query "x" * 4066 whereas "x" * 4065 works.
With debug logging turned on, the server indicates that it is writing the correct response message but when it is serialized it comes out only as the single byte 0x01.
The error on the client is, in this case,
io.netty.handler.codec.DecoderException: org.apache.tinkerpop.gremlin.driver.ser.SerializationException: org.apache.tinkerpop.shaded.kryo.KryoException: Buffer too small: capacity: 1, required: 8
but different response sizes give different errors, for example, "x" * 10000 gives
io.netty.handler.codec.DecoderException: org.apache.tinkerpop.gremlin.driver.ser.SerializationException: java.lang.IndexOutOfBoundsException: Index: 118, Size: 0
Attachments
Issue Links
- is related to
-
TINKERPOP-814 ConnectionPool can fill with dead Connections
- Closed
Provided a bufferSize configuration option to the gryo serializer. The kryo buffer size was defaulted to 4096 and would those throw that "Buffer too small" exception. So....if you have large individual results you can bump this value to resolve this problem.
https://github.com/apache/incubator-tinkerpop/commit/6a333d7f7c0e3d5e9c800cd4ae71a46771b8c296