Bug #65598 Concurrent SET requests return non-existant error
Submitted: 13 Jun 2012 9:58 Modified: 13 Jun 2012 10:18
Reporter: Pedro Fonseca Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: MyISAM storage engine Severity:S3 (Non-critical)
Version:5.5.19, 5.5.26 OS:Any
Assigned to: CPU Architecture:Any

[13 Jun 2012 9:58] Pedro Fonseca
Description:
We're using mysqld version 5.5.19 built from source. We found a
concurrency bug in MyISAM storage engine that makes the server return a non-existent error. The bug is triggered when two SET requests are concurrently
executed, by different clients. In some executions, instead of 
executing the requests without any error, the server returns 
an error complaining about the arguments given to SET.

How to repeat:
This is a non-deterministic bug that is triggered only in a very small
number of executions. We used the following server command line
options to enable MyISAM and to disable InnoDB storage engine:
  --default-storage-engine=myisam --innodb=OFF

The following requests trigger the bug under some executions:

Client A: 
       create database new_db;
       use new_db;

Client B: 
       use new_db;

Client A (concurrently with Client B):
       SET @@global.default.key_buffer_size=16*1024*1024

Client B (concurrently with Client A):
       SET @@global.default.key_buffer_size=16*1024*1024

The usual behavior is for no error to be returned. However,
we found that in a small fraction of the executions the clients
get the error:
   "ERROR 1210 (HY000) at line 3: Incorrect arguments to SET"
[13 Jun 2012 10:18] Valeriy Kravchuk
I've repeated this easily with 5.5.26 on 64-bit FC14, by executing the following commands from 2 windows concurrently:

[openxs@chief 5.5]$ for i in `seq 1 1000`; do echo $i; bin/mysql -uroot test -e "set @@global.default.key_buffer_size=16*1024*1024"; done

I've got eventually:

...
646
647
ERROR 1210 (HY000) at line 1: Incorrect arguments to SET
648
649
...

Server was started with --no-defaults option and built using:

BUILD/compile-pentium64-debug-max --prefix=/home/openxs/dbs/5.5