Issue 320 in memcached: increment with initial value using binary protocol always returns 22 bytes value with get

89 views
Skip to first unread message

memc...@googlecode.com

unread,
May 9, 2013, 8:47:46 AM5/9/13
to memc...@googlegroups.com
Status: New
Owner: ----
Labels: Type-Defect Priority-Medium

New issue 320 by ari...@gmail.com: increment with initial value using
binary protocol always returns 22 bytes value with get
http://code.google.com/p/memcached/issues/detail?id=320

* What steps will reproduce the problem?

1. Send a binary incr request for a non-existent "counter" key with delta=1
and initial=0:

Note that this binary request is the same as the example in section 4.5.1
in http://code.google.com/p/memcached/wiki/MemcacheBinaryProtocol

perl -e '$magic="80"; $op="05"; $klen="0007"; $elen="14"; $type="00";
$reserved="0000"; $body="0000001b"; $opaque="00000000";
$cas="0000000000000000"; $delta="0000000000000001";
$initial="0000000000000000"; $exp="00000e10"; $key="636f756e746572"; print
pack("H*",join "",($magic,$op,$klen,$elen,$type,$reserved,$body,$opaque,$cas,$delta,$initial,$exp,$key))'
| nc localhost 11211 | hexdump -C

00000000 81 05 00 00 00 00 00 00 00 00 00 08 00 00 00 00
|................|
00000010 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00
|................|
00000020

(the response correctly returns 0 as an integer)

2. get the counter value:

echo get counter | nc localhost 11211 | hexdump -C

00000000 56 41 4c 55 45 20 63 6f 75 6e 74 65 72 20 30 20 |VALUE counter
0 |
00000010 32 32 0d 0a 30 00 00 00 00 00 00 00 00 00 00 00 |
22..0...........|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 45 4e 44 0d
|............END.|
00000030 0a |.|
00000031

The response returns a 22 bytes value starting with the ascii code for 0
(0x30). In that example the 21 extra bytes are null but if the server
already contains a lot of keys I sometimes get a null byte followed by some
random data instead of everything null after the value.

3. increment counter again, using same command as step 1 (or using the
ascii incr command) and get the incremented counter:

echo get counter | nc localhost 11211 | hexdump -C
00000000 56 41 4c 55 45 20 63 6f 75 6e 74 65 72 20 30 20 |VALUE counter
0 |
00000010 31 0d 0a 31 0d 0a 45 4e 44 0d 0a |1..1..END..|
0000001b

This time the value returned is the correct length (1 byte)


* What is the expected output? What do you see instead?

I expect to get a 1 byte value following the first increment.

* What version of the product are you using? On what operating system?

memcached 1.4.15 compiled in 64 bits with gcc 4.4.0, libevent 1.4.14b on
centos 5.
Also experienced same behaviour with memcached 1.4.5 32 bits.




--
You received this message because this project is configured to send all
issue notifications to this address.
You may adjust your notification preferences at:
https://code.google.com/hosting/settings

memc...@googlecode.com

unread,
May 10, 2013, 12:46:01 PM5/10/13
to memc...@googlegroups.com

Comment #1 on issue 320 by ari...@gmail.com: increment with initial value
using binary protocol always returns 22 bytes value with get
http://code.google.com/p/memcached/issues/detail?id=320

Possible fix in this github pull request:
https://github.com/memcached/memcached/pull/39

memc...@googlecode.com

unread,
Dec 20, 2013, 3:20:43 AM12/20/13
to memc...@googlegroups.com
Updates:
Status: Fixed

Comment #2 on issue 320 by dorma...@rydia.net: increment with initial value
using binary protocol always returns 22 bytes value with get
http://code.google.com/p/memcached/issues/detail?id=320

Merged fix.
Reply all
Reply to author
Forward
0 new messages