Bug #74874 | incr/decr commands on integer value work incorrect | ||
---|---|---|---|
Submitted: | 15 Nov 2014 0:50 | Modified: | 16 Dec 2014 19:45 |
Reporter: | Piotr Jurkiewicz (OCA) | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Memcached | Severity: | S2 (Serious) |
Version: | 5.6.21, 5.6.23 | OS: | Any |
Assigned to: | CPU Architecture: | Any | |
Tags: | Contribution, memcached |
[15 Nov 2014 0:50]
Piotr Jurkiewicz
[17 Nov 2014 13:35]
MySQL Verification Team
Hello Piotr Jurkiewicz, Thank you for the report and test case. Thanks, Umesh
[17 Nov 2014 13:36]
MySQL Verification Team
// 5.6.23 [ushastry@cluster-repo mysql-advanced-5.6.23]$ telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. stats .. STAT engine_maxbytes 67108864 END get @@int_test VALUE @@int_test 0 13 test/int_test END set somekey 10 0 9 123456789 STORED get somekey VALUE somekey 0 9 123456789 END // mysql> confirmed key=value mysql> select * from test.int_test; +---------+-----------+ | k | v | +---------+-----------+ | somekey | 123456789 | +---------+-----------+ 1 row in set (0.00 sec) // telnet session incr somekey 1 1 mysql> select * from test.int_test; +---------+------+ | k | v | +---------+------+ | somekey | 1 | +---------+------+ 1 row in set (0.00 sec) // telnet session get somekey VALUE somekey 0 1 1 END // telnet session set a11 10 0 2 99 STORED // mysql> session mysql> select * from test.int_test; +-----+------+ | k | v | +-----+------+ | a11 | 99 | +-----+------+ 1 row in set (0.00 sec) // incr by 2 get a11 VALUE a11 0 2 99 END incr a11 2 2 get a11 VALUE a11 0 1 2 END // mysql> session mysql> select * from test.int_test; +-----+------+ | k | v | +-----+------+ | a11 | 2 | +-----+------+ 1 row in set (0.00 sec) // decr decr a11 1 0 get a11 VALUE a11 0 1 0 END mysql> select * from test.int_test; +-----+------+ | k | v | +-----+------+ | a11 | 0 | +-----+------+ 1 row in set (0.00 sec) // Build used for tests [root@cluster-repo mysql-advanced-5.6.23]# more docs/INFO_SRC revision-id: michael.izioumtchenko@oracle.com-20141106152508-nntohvuco3v1rjjx date: 2014-11-06 16:25:08 +0100 build-date: 2014-11-06 18:00:43 +0100 revno: 6243 branch-nick: daily-5.6 MySQL source 5.6.23
[11 Dec 2014 13:15]
Allen Lai
Posted by developer: We didn't handle the integer column value properately in memcached incr/decr command. We need to check if the value is integer or string in innodb_api_arithmetic.
[11 Dec 2014 20:26]
Piotr Jurkiewicz
Patch fixing this bug (*) I confirm the code being submitted is offered under the terms of the OCA, and that I am authorized to contribute it.
Contribution: incr.diff (text/plain), 1.29 KiB.
[11 Dec 2014 20:29]
Piotr Jurkiewicz
Adding tag: contribution.
[11 Dec 2014 20:29]
Piotr Jurkiewicz
Adding tag: contribution.
[12 Dec 2014 14:42]
Sunny Bains
Piotr, Thanks for the patch. Your contribution is appreciated. Allen (Zheng Lai) fixed this problem only recently :-) Regards, -sunny
[15 Dec 2014 20:04]
Daniel Price
Posted by developer: Fixed as of the upcoming 5.7.6 release, and here's the changelog entry: The last flushing loop on shutdown did not call "buf_flush_wait_LRU_batch_end()", resulting in an assertion failure.
[15 Dec 2014 20:05]
Daniel Price
Posted by developer: Please disregard the previous comment. It is for a different bug.
[16 Dec 2014 19:45]
Daniel Price
Posted by developer: Fixed as of the upcoming 5.6.23, 5.7.6 releases, and here's the changelog entry: The integer column value was handled incorrectly for the "memcached" "incr" and "decr" commands.
[12 Feb 2015 13:32]
Laurynas Biveinis
$ git show -s 5b1102c commit 5b1102cf95a6b5f6a3b072055b903fe19b94493b Author: Allen.Lai <zheng.lai@oracle.com> Date: Thu Dec 11 19:44:21 2014 +0800 Bug#20044123 INCR/DECR COMMANDS ON INTEGER VALUE WORK incorrect Bug#20083106 INCR ON A LOCKED RECORD RETURNS THE WRONG VALUE. We didn't handle the integer column value properately in memcached incr/decr command. We need to check if the value is integer or string in innodb_api_arithmetic, and we also need to return the right return value of this function. Reviewed-by: Jimmy Yang<jimmy.yang@oracle.com> RB:7490