Bump!

Anyone who could help me solve this random issue? Thanks!

Regards,


Michael

On Wed, Oct 24, 2018 at 10:32 PM Michael Fong <mcfong.o...@gmail.com> wrote:

> Hi, all,
>
>
> I was trying to fix  IGNITE-7153 which relates to parsing incomplete REDIS
> packet larger than 8192 bytes. However, I found a random problem  which is
> reproducible on TC as well.
> That said, GridNioServerRead.processRead() :
>   - int cnt = sockCh.read(readBuf);
>
> sometimes does not read the payload fully as the length field in the
> header is larger than the ByteBuffer.limit(). As the result, the
> BufferUnderFlowException will be thrown.
>
> For example, in a erroneous round run with my IDE, a REDIS payload (sent
> by jedis client) looks like the following:
>
> 2a 33 d a 24 33 d a 53 45 54 d a 24 32 d a 62 31 d a 24 {38 31 39 32} d a | 65
> d a ...etc
>
> GridRedisProtocolParser.readBulkStr(buf) invokes elCnt(buf) which gets
> {8192}. However, the limit of buf is 28 which ends at | position. Obviously,
> 8192 < limit(), therefore, the logic throws BufferUnderFlow soon after.
>
> I traced back and found  sockCh.read(readBuf) only read 28 bytes for unknown 
> reason
>
> The problem seems totally random. I wonder if this has anything to do with 
> other NioWorker
> or Selector setting.
>
>
> Any help would be appreciated!
>
>
> Regards,
>
>
> Michael
>
>

Reply via email to