mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
48d435b16f
BitKeeper/deleted/.del-raid.test~501e9e00b3c27a55: Delete: mysql-test/t/raid.test mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test: Test change mysql-test/r/binlog_stm_mix_innodb_myisam.result: New results mysql-test/r/ctype_ujis.result: New results mysql-test/r/innodb_concurrent.result: New results. mysql-test/r/rpl_heap.result: New results mysql-test/r/warnings.result: New results mysql-test/t/ctype_ujis.test: Fixed ENGINE=, test should now actually function mysql-test/t/innodb_concurrent.test: Fixed test for engine mysql-test/t/rpl_heap.test: Fixed test for engine mysql-test/t/system_mysql_db_fix.test: Fixed setup. mysql-test/t/warnings.test: Removed deprecated tests scripts/fill_func_tables.sh: Fixed script scripts/mysql_convert_table_format.sh: Fixed script sql/ha_innodb.cc: Fixed comment sql/sql_yacc.yy: Removed deprecated syntax tests/fork_big.pl: Fixed scipt tests/fork_big2.pl: Fixed script tests/mail_to_db.pl: Fixed script tests/mysql_client_test.c: Fixed test
346 lines
11 KiB
Text
346 lines
11 KiB
Text
#
|
|
# Concurrent InnoDB tests, mainly in UPDATE's
|
|
# Bug#3300
|
|
# Designed and tested by Sinisa Milivojevic, sinisa@mysql.com
|
|
#
|
|
# two non-interfering UPDATE's not changing result set
|
|
#
|
|
|
|
# test takes circa 5 minutes to run, so it's big
|
|
-- source include/big_test.inc
|
|
|
|
connection default;
|
|
drop table if exists t1;
|
|
create table t1(eta int(11) not null, tipo int(11), c varchar(255)) engine=innodb;
|
|
connect (thread1, localhost, mysqltest,,);
|
|
connection thread1;
|
|
insert into t1 values (7,7, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
|
|
insert into t1 values (8,8, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
|
|
insert into t1 values (10,1,"ccccccccccccccccccccccccccccccccccccccccccc");
|
|
insert into t1 values (20,2,"ddddddddddddddddddddddddddddddddddddddddddd");
|
|
insert into t1 values (30,1,"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
|
|
insert into t1 values (40,2,"fffffffffffffffffffffffffffffffffffffffffff");
|
|
insert into t1 values (50,1,"ggggggggggggggggggggggggggggggggggggggggggg");
|
|
insert into t1 values (60,2,"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh");
|
|
insert into t1 values (70,1,"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii");
|
|
insert into t1 values (80,22,"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");
|
|
insert into t1 values (90,11,"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk");
|
|
select get_lock("hello",1);
|
|
connect (thread2, localhost, mysqltest,,);
|
|
connection thread2;
|
|
begin;
|
|
send update t1 set eta=1+get_lock("hello",1)*0 where tipo=11;
|
|
sleep 1;
|
|
connection thread1;
|
|
begin;
|
|
update t1 set eta=2 where tipo=22;
|
|
select release_lock("hello");
|
|
select * from t1;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
send commit;
|
|
connection thread1;
|
|
select * from t1;
|
|
commit;
|
|
select * from t1;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
connection thread1;
|
|
select * from t1;
|
|
connection default;
|
|
drop table t1;
|
|
|
|
#
|
|
# two UPDATE's running and one changing result set
|
|
#
|
|
#connect (thread1, localhost, mysqltest,,);
|
|
connection thread1;
|
|
create table t1(eta int(11) not null, tipo int(11), c varchar(255)) engine=innodb;
|
|
insert into t1 values (7,7, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
|
|
insert into t1 values (8,8, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
|
|
insert into t1 values (10,1,"ccccccccccccccccccccccccccccccccccccccccccc");
|
|
insert into t1 values (20,2,"ddddddddddddddddddddddddddddddddddddddddddd");
|
|
insert into t1 values (30,1,"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
|
|
insert into t1 values (40,2,"fffffffffffffffffffffffffffffffffffffffffff");
|
|
insert into t1 values (50,1,"ggggggggggggggggggggggggggggggggggggggggggg");
|
|
insert into t1 values (60,2,"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh");
|
|
insert into t1 values (70,1,"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii");
|
|
insert into t1 values (80,22,"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");
|
|
insert into t1 values (90,11,"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk");
|
|
select get_lock("hello",10);
|
|
#connect (thread2, localhost, mysqltest,,);
|
|
connection thread2;
|
|
begin;
|
|
send update t1 set eta=1+get_lock("hello",10)*0 where tipo=1;
|
|
sleep 1;
|
|
connection thread1;
|
|
begin;
|
|
update t1 set tipo=1 where tipo=2;
|
|
select release_lock("hello");
|
|
select * from t1;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
send commit;
|
|
connection thread1;
|
|
select * from t1;
|
|
commit;
|
|
select * from t1;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
connection thread1;
|
|
select * from t1;
|
|
connection default;
|
|
drop table t1;
|
|
|
|
|
|
#
|
|
# One UPDATE and one INSERT .... Monty's test
|
|
#
|
|
|
|
#connect (thread1, localhost, mysqltest,,);
|
|
connection thread1;
|
|
create table t1 (a int not null, b int not null) engine=innodb;
|
|
insert into t1 values (1,1),(2,1),(3,1),(4,1);
|
|
select get_lock("hello2",1000);
|
|
#connect (thread2, localhost, mysqltest,,);
|
|
connection thread2;
|
|
begin;
|
|
send update t1 set b=10+get_lock(concat("hello",a),1000)*0 where
|
|
a=2;
|
|
sleep 1;
|
|
connection thread1;
|
|
insert into t1 values (1,1);
|
|
select release_lock("hello2");
|
|
select * from t1;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
send commit;
|
|
connection thread1;
|
|
sleep 1;
|
|
connection thread2;
|
|
reap;
|
|
connection default;
|
|
drop table t1;
|
|
|
|
#
|
|
# one UPDATE changing result set and SELECT ... FOR UPDATE
|
|
#
|
|
#connect (thread1, localhost, mysqltest,,);
|
|
connection thread1;
|
|
create table t1(eta int(11) not null, tipo int(11), c varchar(255)) engine=innodb;
|
|
insert into t1 values (7,7, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
|
|
insert into t1 values (8,8, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
|
|
insert into t1 values (10,1,"ccccccccccccccccccccccccccccccccccccccccccc");
|
|
insert into t1 values (20,2,"ddddddddddddddddddddddddddddddddddddddddddd");
|
|
insert into t1 values (30,1,"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
|
|
insert into t1 values (40,2,"fffffffffffffffffffffffffffffffffffffffffff");
|
|
insert into t1 values (50,1,"ggggggggggggggggggggggggggggggggggggggggggg");
|
|
insert into t1 values (60,2,"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh");
|
|
insert into t1 values (70,1,"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii");
|
|
insert into t1 values (80,22,"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");
|
|
insert into t1 values (90,11,"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk");
|
|
select get_lock("hello",10);
|
|
#connect (thread2, localhost, mysqltest,,);
|
|
connection thread2;
|
|
begin;
|
|
send select * from t1 where tipo=2 FOR UPDATE;
|
|
sleep 1;
|
|
connection thread1;
|
|
begin;
|
|
select release_lock("hello");
|
|
--error 1205
|
|
update t1 set tipo=1+get_lock("hello",10)*0 where tipo=2;
|
|
select * from t1;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
send commit;
|
|
connection thread1;
|
|
commit;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
connection thread1;
|
|
select * from t1;
|
|
connection default;
|
|
drop table t1;
|
|
|
|
#
|
|
# one UPDATE not changing result set and SELECT ... FOR UPDATE
|
|
#
|
|
#connect (thread1, localhost, mysqltest,,);
|
|
connection thread1;
|
|
create table t1(eta int(11) not null, tipo int(11), c varchar(255)) engine=innodb;
|
|
insert into t1 values (7,7, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
|
|
insert into t1 values (8,8, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
|
|
insert into t1 values (10,1,"ccccccccccccccccccccccccccccccccccccccccccc");
|
|
insert into t1 values (20,2,"ddddddddddddddddddddddddddddddddddddddddddd");
|
|
insert into t1 values (30,1,"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
|
|
insert into t1 values (40,2,"fffffffffffffffffffffffffffffffffffffffffff");
|
|
insert into t1 values (50,1,"ggggggggggggggggggggggggggggggggggggggggggg");
|
|
insert into t1 values (60,2,"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh");
|
|
insert into t1 values (70,1,"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii");
|
|
insert into t1 values (80,22,"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");
|
|
insert into t1 values (90,11,"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk");
|
|
select get_lock("hello",10);
|
|
#connect (thread2, localhost, mysqltest,,);
|
|
connection thread2;
|
|
begin;
|
|
send select * from t1 where tipo=2 FOR UPDATE;
|
|
sleep 1;
|
|
connection thread1;
|
|
begin;
|
|
select release_lock("hello");
|
|
--error 1205
|
|
update t1 set tipo=11+get_lock("hello",10)*0 where tipo=22;
|
|
select * from t1;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
send commit;
|
|
connection thread1;
|
|
commit;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
connection thread1;
|
|
select * from t1;
|
|
connection default;
|
|
drop table t1;
|
|
|
|
#
|
|
# two SELECT ... FOR UPDATE
|
|
#
|
|
#connect (thread1, localhost, mysqltest,,);
|
|
connection thread1;
|
|
create table t1(eta int(11) not null, tipo int(11), c varchar(255)) engine=innodb;
|
|
insert into t1 values (7,7, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
|
|
insert into t1 values (8,8, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
|
|
insert into t1 values (10,1,"ccccccccccccccccccccccccccccccccccccccccccc");
|
|
insert into t1 values (20,2,"ddddddddddddddddddddddddddddddddddddddddddd");
|
|
insert into t1 values (30,1,"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
|
|
insert into t1 values (40,2,"fffffffffffffffffffffffffffffffffffffffffff");
|
|
insert into t1 values (50,1,"ggggggggggggggggggggggggggggggggggggggggggg");
|
|
insert into t1 values (60,2,"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh");
|
|
insert into t1 values (70,1,"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii");
|
|
insert into t1 values (80,22,"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");
|
|
insert into t1 values (90,11,"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk");
|
|
select get_lock("hello",10);
|
|
#connect (thread2, localhost, mysqltest,,);
|
|
connection thread2;
|
|
begin;
|
|
send select * from t1 where tipo=2 FOR UPDATE;
|
|
sleep 1;
|
|
connection thread1;
|
|
begin;
|
|
select release_lock("hello");
|
|
--error 1205
|
|
select * from t1 where tipo=1 FOR UPDATE;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
send commit;
|
|
connection thread1;
|
|
commit;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
connection thread1;
|
|
select * from t1;
|
|
connection default;
|
|
drop table t1;
|
|
|
|
|
|
#
|
|
# one UPDATE changing result set and DELETE
|
|
#
|
|
#connect (thread1, localhost, mysqltest,,);
|
|
connection thread1;
|
|
create table t1(eta int(11) not null, tipo int(11), c varchar(255)) engine=innodb;
|
|
insert into t1 values (7,7, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
|
|
insert into t1 values (8,8, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
|
|
insert into t1 values (10,1,"ccccccccccccccccccccccccccccccccccccccccccc");
|
|
insert into t1 values (20,2,"ddddddddddddddddddddddddddddddddddddddddddd");
|
|
insert into t1 values (30,1,"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
|
|
insert into t1 values (40,2,"fffffffffffffffffffffffffffffffffffffffffff");
|
|
insert into t1 values (50,1,"ggggggggggggggggggggggggggggggggggggggggggg");
|
|
insert into t1 values (60,2,"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh");
|
|
insert into t1 values (70,1,"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii");
|
|
insert into t1 values (80,22,"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");
|
|
insert into t1 values (90,11,"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk");
|
|
select get_lock("hello",10);
|
|
#connect (thread2, localhost, mysqltest,,);
|
|
connection thread2;
|
|
begin;
|
|
send delete from t1 where tipo=2;
|
|
sleep 1;
|
|
connection thread1;
|
|
begin;
|
|
select release_lock("hello");
|
|
--error 1205
|
|
update t1 set tipo=1+get_lock("hello",10)*0 where tipo=2;
|
|
select * from t1;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
send commit;
|
|
connection thread1;
|
|
commit;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
connection thread1;
|
|
select * from t1;
|
|
connection default;
|
|
drop table t1;
|
|
|
|
|
|
#
|
|
# one UPDATE not changing result set and DELETE
|
|
#
|
|
#connect (thread1, localhost, mysqltest,,);
|
|
connection thread1;
|
|
create table t1(eta int(11) not null, tipo int(11), c varchar(255)) engine=innodb;
|
|
insert into t1 values (7,7, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
|
|
insert into t1 values (8,8, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
|
|
insert into t1 values (10,1,"ccccccccccccccccccccccccccccccccccccccccccc");
|
|
insert into t1 values (20,2,"ddddddddddddddddddddddddddddddddddddddddddd");
|
|
insert into t1 values (30,1,"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
|
|
insert into t1 values (40,2,"fffffffffffffffffffffffffffffffffffffffffff");
|
|
insert into t1 values (50,1,"ggggggggggggggggggggggggggggggggggggggggggg");
|
|
insert into t1 values (60,2,"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh");
|
|
insert into t1 values (70,1,"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii");
|
|
insert into t1 values (80,22,"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");
|
|
insert into t1 values (90,11,"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk");
|
|
select get_lock("hello",10);
|
|
#connect (thread2, localhost, mysqltest,,);
|
|
connection thread2;
|
|
begin;
|
|
send delete from t1 where tipo=2;
|
|
sleep 1;
|
|
connection thread1;
|
|
begin;
|
|
select release_lock("hello");
|
|
update t1 set tipo=1+get_lock("hello",10)*0 where tipo=22;
|
|
select * from t1;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
send commit;
|
|
connection thread1;
|
|
commit;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
connection thread1;
|
|
select * from t1;
|
|
connection default;
|
|
sleep 1;
|
|
drop table t1;
|
|
disconnect thread1;
|
|
disconnect thread2;
|