Hi Yakov,

Thanks so much for your analysis.

Parser expects chunks to be complete and has all the data to read entire
> message, but this is not guaranteed and single message can arrive in
> several chunks.

This is indeed the the assumption to my implementation. I have not come up
a another parsing algorithm to handle this rainy day case. Perhaps, it
would require more refactoring on existing code. In addition, I might need
to check how Redis dev implements the parser state machine.

I would be interested to see how current implementation (based on
2.6/master) behaves if we intentionally split the message into chunks as
you suggested for the reproducer.

Regards,

Michael

On Wed, Oct 31, 2018 at 7:08 PM Yakov Zhdanov <yzhda...@apache.org> wrote:

> Hi Mike!
>
> Thanks for reproducer. Now I understand the problem. NIO worker reads
> chunks from the network and notifies the parser on data read. Parser
> expects chunks to be complete and has all the data to read entire message,
> but this is not guaranteed and single message can arrive in several chunks.
> Which is demostrated by your test.
>
> The problem is inside GridRedisProtocolParser. We should add ability to
> store the parsing context if we do not have all the data to complete
> message parsing, as it is done, for example in GridBufferedParser. So, it
> is definitely an issue and should be fixed by adding parsing state. I see
> you attempted to do so in PR
> https://github.com/apache/ignite/pull/5044/files. I did not do a formal
> review, so let's ask community to review your patch.
>
> Couple of comments about your reproducer.
>
> 1. Let's dump a proper Redis message bytes sent by Jedis.
> 2. Let's split this dump into 5 chunks and send them with 100 ms delays.
>
> This should fail before fix is applied, and should pass with proper message
> parsed after we have the issue fixed.
>
> Thanks!
>
> --Yakov
>

Reply via email to