Hi Stéphane, Thanks for the feedback. I haven't had the time to take a deeper look but a 5mn googlefu gave me this which might (or might not) be a lead: https://github.com/EsotericSoftware/kryo/issues/336 If we set a failing test we can maybe see if those changes are relevant or not.
Do you want to give those a try locally and report back? Also if you don't mind creating a JIRA issue for this that would be great. Cheers, Dylan. On Tue, Dec 1, 2015 at 1:58 PM, <[email protected]> wrote: > Hi everybody, > > > > Our company is developing a system based on Gremlin server and we are > facing an issue for which, I think, I have identified the root cause. > > Our problem occurs when requesting a graph that returns beyond a certain > amount of data, actually 4096 bytes, through a websocket connection. > > I think that the issue is located in the serialization mechanism, in the > method *serializeResponseAsBinary*(…) of the > *org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0 > class*. > > > > In this method, we create a local *java.io.ByteArrayOutputStream* object > which is then passed to the constructor of a new instance of an > *org.apache.tinkerpop.shaded.kryo.io.Output*. Subsequent operations > serialize data in this Output object and at the end the > *serializeResponseAsBinary*(…) method returns a newly allocated > *io.netty.buffer.ByteBuf* object containing the bytes accumulated in the > Output instance. This encoded response message is built as this: > > > > ByteBuf encodedMessage = null; > > final OutputStream baos = new ByteArrayOutputStream(); > > final Output output = new Output(baos); > > … > > encodedMessage = allocator.buffer((*int*) output.total()); > > encodedMessage.writeBytes(*output**.toBytes()*); > > … > > return encodedMessage; > > > > The problem is that the *output.toBytes()* method only returns the bytes > contained in an internal recyclable buffer and does not take into account > the bytes that may have been previously flushed into the internal > OutputStream (in our case the ByteArrayOutputStream provided to the > constructor). Thus, at the end, the encoded response message contains > partial data that appear as a corrupted stream to the deserialization > process. > > > > What do you think about this problem ? Is there anyone that already faced > this issue ? Do you think it would be possible to fix it quickly ? > > > > Regards, > > [image: http://www.orange.com/sirius/logos_mail/orange_logo.gif] > <http://www.orange.com/> > > *Stéphane Gobancé * > > *Prestataire externe* > > GyGraph / PnS > > Tél : 04 97 46 05 65 > > *[email protected] <[email protected]>* > > Altran pour Orange > > > > _________________________________________________________________________________________________________________________ > > Ce message et ses pieces jointes peuvent contenir des informations > confidentielles ou privilegiees et ne doivent donc > pas etre diffuses, exploites ou copies sans autorisation. Si vous avez recu > ce message par erreur, veuillez le signaler > a l'expediteur et le detruire ainsi que les pieces jointes. Les messages > electroniques etant susceptibles d'alteration, > France Telecom - Orange decline toute responsabilite si ce message a ete > altere, deforme ou falsifie. Merci > > This message and its attachments may contain confidential or privileged > information that may be protected by law; > they should not be distributed, used or copied without authorization. > If you have received this email in error, please notify the sender and delete > this message and its attachments. > As emails may be altered, France Telecom - Orange shall not be liable if this > message was modified, changed or falsified. > Thank you. > >
