You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Ashu Pachauri (Jira)" <ji...@apache.org> on 2020/05/16 16:54:00 UTC

[jira] [Commented] (IGNITE-7153) Redis: BufferUnderflowException at GridRedisProtocolParser.readBulkStr for values > 8kb

    [ https://issues.apache.org/jira/browse/IGNITE-7153?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17109136#comment-17109136 ] 

Ashu Pachauri commented on IGNITE-7153:
---------------------------------------

[~dpavlov] [~palnabarun] I have rebased the pull request created by [~mcfongtw] on top of latest master and created another pull request.  I am assuming the CI run will happen automatically. 

> Redis: BufferUnderflowException at GridRedisProtocolParser.readBulkStr for values > 8kb
> ---------------------------------------------------------------------------------------
>
>                 Key: IGNITE-7153
>                 URL: https://issues.apache.org/jira/browse/IGNITE-7153
>             Project: Ignite
>          Issue Type: Bug
>          Components: general
>    Affects Versions: 2.3
>         Environment: Win, PHP 7, php_redis-3.1.1-7.0
>            Reporter: Alexey Popov
>            Assignee: Michael Fong
>            Priority: Major
>              Labels: redis
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> Exception:
> {noformat}
> [15:03:23,690][SEVERE][grid-nio-worker-tcp-rest-0-#36][GridTcpRestProtocol] Failed to process selector key [ses=GridSelectorNioSessionImpl [worker=ByteBufferNioClientWorker [readBuf=java.nio.HeapByteBuffer[pos=28 lim=8192 cap=8192], super=AbstractNioClientWorker [idx=0, bytesRcvd=0, bytesSent=0, bytesRcvd0=0, bytesSent0=0, select=true, super=GridWorker [name=grid-nio-worker-tcp-rest-0, igniteInstanceName=null, finished=false, hashCode=396395638, interrupted=false, runner=grid-nio-worker-tcp-rest-0-#36]]], writeBuf=null, readBuf=null, inRecovery=null, outRecovery=null, super=GridNioSessionImpl [locAddr=/127.0.0.1:6380, rmtAddr=/127.0.0.1:51794, createTime=1512734602674, closeTime=0, bytesSent=0, bytesRcvd=8192, bytesSent0=0, bytesRcvd0=8192, sndSchedTime=1512734602674, lastSndTime=1512734602674, lastRcvTime=1512734602674, readsPaused=false, filterChain=FilterChain[filters=[GridNioCodecFilter [parser=GridTcpRestParser [jdkMarshaller=JdkMarshaller [], routerClient=false], directMode=false]], accepted=true]]]
> java.nio.BufferUnderflowException
> 	at java.nio.HeapByteBuffer.get(HeapByteBuffer.java:151)
> 	at org.apache.ignite.internal.processors.rest.protocols.tcp.redis.GridRedisProtocolParser.readBulkStr(GridRedisProtocolParser.java:107)
> 	at org.apache.ignite.internal.processors.rest.protocols.tcp.redis.GridRedisProtocolParser.readArray(GridRedisProtocolParser.java:86)
> 	at org.apache.ignite.internal.processors.rest.protocols.tcp.GridTcpRestParser.decode(GridTcpRestParser.java:150)
> 	at org.apache.ignite.internal.processors.rest.protocols.tcp.GridTcpRestParser.decode(GridTcpRestParser.java:70)
> 	at org.apache.ignite.internal.util.nio.GridNioCodecFilter.onMessageReceived(GridNioCodecFilter.java:114)
> 	at org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:109)
> 	at org.apache.ignite.internal.util.nio.GridNioServer$HeadFilter.onMessageReceived(GridNioServer.java:3392)
> 	at org.apache.ignite.internal.util.nio.GridNioFilterChain.onMessageReceived(GridNioFilterChain.java:175)
> 	at org.apache.ignite.internal.util.nio.GridNioServer$ByteBufferNioClientWorker.processRead(GridNioServer.java:1096)
> 	at org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.processSelectedKeysOptimized(GridNioServer.java:2272)
> 	at org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.bodyInternal(GridNioServer.java:2048)
> 	at org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.body(GridNioServer.java:1717)
> 	at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
> 	at java.lang.Thread.run(Thread.java:748)
> [15:03:23,691][SEVERE][grid-nio-worker-tcp-rest-0-#36][GridTcpRestProtocol] Closing NIO session because of unhandled exception.
> class org.apache.ignite.internal.util.nio.GridNioException: null
> 	at org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.processSelectedKeysOptimized(GridNioServer.java:2296)
> 	at org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.bodyInternal(GridNioServer.java:2048)
> 	at org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.body(GridNioServer.java:1717)
> 	at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
> 	at java.lang.Thread.run(Thread.java:748)
> Caused by: java.nio.BufferUnderflowException
> 	at java.nio.HeapByteBuffer.get(HeapByteBuffer.java:151)
> 	at org.apache.ignite.internal.processors.rest.protocols.tcp.redis.GridRedisProtocolParser.readBulkStr(GridRedisProtocolParser.java:107)
> 	at org.apache.ignite.internal.processors.rest.protocols.tcp.redis.GridRedisProtocolParser.readArray(GridRedisProtocolParser.java:86)
> 	at org.apache.ignite.internal.processors.rest.protocols.tcp.GridTcpRestParser.decode(GridTcpRestParser.java:150)
> 	at org.apache.ignite.internal.processors.rest.protocols.tcp.GridTcpRestParser.decode(GridTcpRestParser.java:70)
> 	at org.apache.ignite.internal.util.nio.GridNioCodecFilter.onMessageReceived(GridNioCodecFilter.java:114)
> 	at org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:109)
> 	at org.apache.ignite.internal.util.nio.GridNioServer$HeadFilter.onMessageReceived(GridNioServer.java:3392)
> 	at org.apache.ignite.internal.util.nio.GridNioFilterChain.onMessageReceived(GridNioFilterChain.java:175)
> 	at org.apache.ignite.internal.util.nio.GridNioServer$ByteBufferNioClientWorker.processRead(GridNioServer.java:1096)
> 	at org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.processSelectedKeysOptimized(GridNioServer.java:2272)
> 	... 4 more
> {noformat}
> Simple PHP reproducer with Redis client:
> {code:php}
> <?php
> $redis = new Redis();
> $redis->connect('localhost', 6380);
> $valueSize = 10000;
> $key = 'x';
> $value = str_repeat($key, $valueSize);
> $result = $redis->set($key, $value);
> printf("%s%s", $result === true ? "Setting key was successful" : "Setting key failed", PHP_EOL);
> $retrievedResult = $redis->get($key);
> if ($retrievedResult === false) {
>     echo "Fetching key failed" . PHP_EOL;
> } else {
>     printf('Key successfully retrieved, length: %d%s', strlen($retrievedResult), PHP_EOL);
> }
> {code}
> It seems that the client set tcp socket buffer size > 8k. That is why unit test works fine with default (8k) tcp socket size.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)