Bug #75201 strange error message while ddl on a table with memcached configured
Submitted: 13 Dec 2014 12:57 Modified: 14 Dec 2014 7:28
Reporter: zhai weixiang (OCA) Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: Memcached Severity:S3 (Non-critical)
Version:5.7.5 OS:Any
Assigned to: CPU Architecture:Any
Tags: memcached

[13 Dec 2014 12:57] zhai weixiang
Description:
Configure the table bellow to use memcached

root@test 08:49:52>show create table t1\G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `pk` varchar(20) NOT NULL,
  `val1` int(11) DEFAULT NULL,
  `val2` int(11) DEFAULT NULL,
  `c3` bigint(20) DEFAULT NULL,
  `c4` bigint(20) DEFAULT NULL,
  `c5` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`pk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

root@innodb_memcache 08:56:25>select * from containers where name like 'tt1';
+------+-----------+----------+-------------+---------------+-------+------------+--------------------+------------------------+
| name | db_schema | db_table | key_columns | value_columns | flags | cas_column | expire_time_column | unique_idx_name_on_key |
+------+-----------+----------+-------------+---------------+-------+------------+--------------------+------------------------+
| tt1  | test      | t1       | pk          | val1|val2     | c3    | c4         | c5                 | PRIMARY                |
+------+-----------+----------+-------------+---------------+-------+------------+--------------------+------------------------+
1 row in set (0.00 sec)

root@test 08:51:54>select * from t1;
+-----+------+------+------+------+------+
| pk  | val1 | val2 | c3   | c4   | c5   |
+-----+------+------+------+------+------+
| pk1 |    1 |    2 |    2 |    4 |    0 |
+-----+------+------+------+------+------+
1 row in set (0.00 sec)

then connect from telnet:

$telnet 127.0.0.1  13407
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get @@tt1
VALUE @@tt1 0 7
test/t1
END
get pk1
VALUE pk1 2 3
1|2
END

go back to MySQL client:

root@test 08:52:55>alter table t1 modify column val1 bigint;
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

root@test 08:53:57>alter table t1 modify column val2 bigint; 
ERROR 1050 (42S01): Table './test/#sql2-196d-434' already exists

So the second ddl is failed and first one succeed.

How to repeat:
Described above

Suggested fix:
I don't know
[13 Dec 2014 13:04] zhai weixiang
First ddl didn't clear  #sql2-196d-434.ibd and lead to failure of the second ddl.
[14 Dec 2014 7:28] MySQL Verification Team
Hello Zhai,

Thank you for the report and test case.

Thanks,
Umesh
[14 Dec 2014 7:28] MySQL Verification Team
// Build

[root@cluster-repo server]# md5sum mysql-5.7.5-m15-linux-glibc2.5-x86_64.tar.gz
b4c61a681b8a2d85527e7e2d2a595c84  mysql-5.7.5-m15-linux-glibc2.5-x86_64.tar.gz

// Cutsom 
use test;

CREATE TABLE `t1` (
    `pk` varchar(20) NOT NULL,
    `val1` int(11) DEFAULT NULL,
    `val2` int(11) DEFAULT NULL,
    `c3` bigint(20) DEFAULT NULL,
    `c4` bigint(20) DEFAULT NULL,
    `c5` bigint(20) DEFAULT NULL,
    PRIMARY KEY (`pk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into innodb_memcache.containers
  (name,db_schema,db_table,key_columns,value_columns,flags,cas_column,
  expire_time_column,unique_idx_name_on_key)
values
  ('tt1','test','t1','pk','val1,val2',
  'c3','c4','c5','PRIMARY');
  

mysql> show variables like '%version%';
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| innodb_version          | 5.7.5                        |
| protocol_version        | 10                           |
| slave_type_conversions  |                              |
| version                 | 5.7.5-m15                    |
| version_comment         | MySQL Community Server (GPL) |
| version_compile_machine | x86_64                       |
| version_compile_os      | linux-glibc2.5               |
+-------------------------+------------------------------+
7 rows in set (0.00 sec)

mysql> CREATE TABLE `t1` (
    ->   `pk` varchar(20) NOT NULL,
    ->   `val1` int(11) DEFAULT NULL,
    ->   `val2` int(11) DEFAULT NULL,
    ->   `c3` bigint(20) DEFAULT NULL,
    ->   `c4` bigint(20) DEFAULT NULL,
    ->   `c5` bigint(20) DEFAULT NULL,
    ->   PRIMARY KEY (`pk`)
    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.05 sec)

mysql> insert into innodb_memcache.containers
    ->   (name,db_schema,db_table,key_columns,value_columns,flags,cas_column,
    ->   expire_time_column,unique_idx_name_on_key)
    -> values
    ->   ('tt1','test','t1','pk','val1,val2',
    ->   'c3','c4','c5','PRIMARY');
Query OK, 1 row affected (0.00 sec)

mysql> select * from innodb_memcache.containers where name like 'tt1';
+------+-----------+----------+-------------+---------------+-------+------------+--------------------+------------------------+
| name | db_schema | db_table | key_columns | value_columns | flags | cas_column | expire_time_column | unique_idx_name_on_key |
+------+-----------+----------+-------------+---------------+-------+------------+--------------------+------------------------+
| tt1  | test      | t1       | pk          | val1,val2     | c3    | c4         | c5                 | PRIMARY                |
+------+-----------+----------+-------------+---------------+-------+------------+--------------------+------------------------+
1 row in set (0.00 sec)

mysql> insert into t1 values('pk1',1,2,2,4,0);
Query OK, 1 row affected (0.00 sec)

mysql> select * from t1;
+-----+------+------+------+------+------+
| pk  | val1 | val2 | c3   | c4   | c5   |
+-----+------+------+------+------+------+
| pk1 |    1 |    2 |    2 |    4 |    0 |
+-----+------+------+------+------+------+
1 row in set (0.00 sec)

// Telnet session

[root@cluster-repo ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
..

get @@tt1
VALUE @@tt1 0 7
test/t1
END
get pk1
VALUE pk1 2 3
1|2
END

// CLI session

mysql> alter table t1 modify column val1 bigint;
Query OK, 1 row affected (0.05 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> alter table t1 modify column val2 bigint;
ERROR 1050 (42S01): Table './test/#sql2-2b9e-9' already exists

mysql> show variables like 'datadir';
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| datadir       | /tmp/bug/ |
+---------------+-----------+
1 row in set (0.00 sec)

mysql> \! ls -l /tmp/bug/test
total 316
-rw-rw---- 1 ushastry ushastry    65 Dec 15 18:00 db.opt
-rw-rw---- 1 ushastry ushastry  8660 Dec 15 18:00 demo_test.frm
-rw-rw---- 1 ushastry ushastry 98304 Dec 15 18:05 demo_test.ibd
-rw-rw---- 1 ushastry ushastry 98304 Dec 16 14:28 #sql2-2b9e-9.ibd
-rw-rw---- 1 ushastry ushastry  8694 Dec 16 14:29 t1.frm
-rw-rw---- 1 ushastry ushastry 98304 Dec 16 14:29 t1.ibd