Hi Yakov,

Thanks for your reply. :)

Please allow me to explain the whole situation and how to reproduce
the problem:

In the PR of IGNITE-7153, I added a test case under
RedisProtocolConnectSelfTest, sending some binary data via Jedis client,
large enough (> 8192 bytes) to reproduce the original problem of
IGNITE-7153 from my understanding.
Later on, I found another problem which I explain in the previous email
that payload is sometimes not fully read via
GridNioServer.processRead(). This,
however, does not seem to be a Redis protocol parsing problem.
Unfortunately, the only way that I found to reproduce this NioServer
packet-reading problem is to add a for-loop in the new test case. I would
say 95% of time, it will occur, i.e.

for(int i = 0; i < 100; i ++) {

     String randomString1 = RandomStringUtils.random(8 << 10, true,
true); //8192

     try (Jedis jedis = pool.getResource()) {
          jedis.set("b1".getBytes(), randomString1.getBytes());
          Assert.assertEquals(randomString1, jedis.get("b1"));

          Thread.sleep(100);
     }

}


For troubleshooting, I simply print out the content of ByteBuffer along the
data flow, and that is how I got packet in the previous email. I could try
to emulate the erroneous packet then add the added in another test case via
pure socket connection per your request. Thanks!

Regards,

Michael


On Tue, Oct 30, 2018 at 6:00 PM Yakov Zhdanov <yzhda...@apache.org> wrote:

> Michael, can you please share a reproducer? Is it possible to snapshot a
> packet that causes the error and just emulate packet send with manually
> opened socket bypassing Redis client lib?
>
> --Yakov
>

Reply via email to