Current Path : /home/usr.opt/mysql57/mysql-test/suite/rpl/t/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //home/usr.opt/mysql57/mysql-test/suite/rpl/t/rpl_parallel_multi_db.test |
# # WL#5569 MTS # # The test verifies correctness of Query event parallelization when # a DML Query modifies multiple databases. # --source include/master-slave.inc --source include/have_binlog_format_statement.inc --source include/no_valgrind_without_big.inc # restart in Parallel let $workers= 4; connection slave; source include/stop_slave.inc; set @save.slave_parallel_workers= @@global.slave_parallel_workers; eval set @@global.slave_parallel_workers= $workers; source include/start_slave.inc; let $dbs= 8; let $tables= 8; let $queries= `select $dbs*$tables * 4`; # # 1. Case of multi-update # connection master; --disable_query_log call mtr.add_suppression('.*Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.*'); --enable_query_log # create & populate let $n= $dbs; while ($n) { eval create database d$n; let $m= $tables; while ($m) { eval create table d$n.t$m (a int); eval select round(rand()*$tables) into @var; eval insert into d$n.t$m values (@var); dec $m; } dec $n; } # operate to check consistency in the end let $k= $queries; --disable_query_log --disable_warnings while ($k) { let $tables_in_query= `select 2 * (1 + floor(rand()*$dbs))`; let $i= $tables_in_query; let $table_list= ; let $set_list= ; while ($i) { let $n1= `select floor(rand()*$dbs + 1)`; let $m1= `select floor(rand()*$tables + 1)`; let $n2= `select floor(rand()*$dbs + 1)`; let $m2= `select floor(rand()*$tables + 1)`; let $table_list= $table_list d$n1.t$m1 as t_$i, ; let $set_list= $set_list t_$i.a= ; dec $i; let $table_list= $table_list d$n2.t$m2 as t_$i, ; let $set_list= $set_list t_$i.a + round(rand(10)), ; dec $i; } let $n1= `select floor(rand()*$dbs + 1)`; let $m1= `select floor(rand()*$tables + 1)`; let $n2= `select floor(rand()*$dbs + 1)`; let $m2= `select floor(rand()*$tables + 1)`; ## --disable_warnings eval update $table_list d$n1.t$m1 as t_1_$i, d$n2.t$m2 as t_2_$i set $set_list t_1_$i.a=t_2_$i.a + round(rand(10)); ## --enable_warnings dec $k; } --enable_warnings --enable_query_log --source include/sync_slave_sql_with_master.inc # # 2. Case of invoked routines # # A. Functions # create functions & run load let $n= $dbs; # n'th db func is defined through n-1'th except n == 1 let $n1= $n; dec $n1; connection master; --disable_query_log while ($n1) { let $m= `select floor(rand()*$tables) + 1`; delimiter |; eval create function `d$n`.`func` (a int) returns int begin insert into `d$n`.`t$m` values (`d$n1`.`func`(1)); return 1; end| delimiter ;| dec $n; dec $n1; } delimiter |; eval create function `d1`.`func` (a int) returns int begin insert into `d1`.`t$m` values (0); return 1; end| delimiter ;| # invoke... let $k= $queries; while ($k) { let $n= `select floor(rand()*$dbs) + 1`; let $m= `select floor(rand()*$tables) + 1`; let $n1= $n; dec $n1; if ($n1) { eval insert into d$n.t$m values (`d$n1`.`func`(1)); } dec $k; } --enable_query_log --source include/sync_slave_sql_with_master.inc # B. Triggers connection master; # create triggers & run load let $n= $dbs; # n'th db tables won't have any trigger to avoid circular dependency let $n1= $n; dec $n1; --disable_query_log while ($n1) { let $m= $tables; while ($m) { eval create trigger `d$n1`.`trg_t$m` before insert on `d$n1`.`t$m` for each row insert into `d$n`.`t$m` values(1); dec $m; } dec $n; dec $n1; } --enable_query_log # invoke... let $k= $queries; --disable_query_log --disable_warnings while ($k) { let $n= `select floor(rand()*$dbs + 1)`; let $m= `select floor(rand()*$tables + 1)`; eval insert into d$n.t$n values (2); dec $k; } --enable_warnings --enable_query_log --source include/sync_slave_sql_with_master.inc # # Consistency check # let $n = $dbs; while($n) { let $m= $tables; while ($m) { let $diff_tables=master:d$n.t$m, slave:d$n.t$m; source include/diff_tables.inc; dec $m; } dec $n; } # # Clean-up of the regular case tests # connection master; --disable_query_log let $n= $dbs; while ($n) { eval drop database d$n; dec $n; } --enable_query_log --source include/sync_slave_sql_with_master.inc # # Over MAX_DBS_IN_QUERY_MTS # let $dbs= 20; let $queries= `select $dbs* 4`; connection master; let $n= $dbs; let $m= 1; while ($n) { eval create database d$n; eval create table d$n.t$m (a int); eval select round(rand()*$tables) into @var; eval insert into d$n.t$m values (@var); dec $n; } --disable_query_log --disable_warnings let $k= $queries; while ($k) { let $tables_in_query= `select 2 * (1 + floor(rand()*$dbs))`; let $i= $tables_in_query; let $table_list= ; let $set_list= ; while ($i) { let $n1= `select floor(rand()*$dbs + 1)`; let $m1= 1; let $n2= `select floor(rand()*$dbs + 1)`; let $m2= 1; let $table_list= $table_list d$n1.t$m1 as t_$i, ; let $set_list= $set_list t_$i.a= ; dec $i; let $table_list= $table_list d$n2.t$m2 as t_$i, ; let $set_list= $set_list t_$i.a + round(rand(10)), ; dec $i; } let $n1= `select floor(rand()*$dbs + 1)`; let $m1= 1; let $n2= `select floor(rand()*$dbs + 1)`; let $m2= 1; eval update $table_list d$n1.t$m1 as t_1_$i, d$n2.t$m2 as t_2_$i set $set_list t_1_$i.a=t_2_$i.a + round(rand(10)); dec $k; } --enable_warnings --enable_query_log --source include/sync_slave_sql_with_master.inc # Todo: to impelement a stress test for sync_slave_with_master # specifically in parallel mode. # The following lines are left as extra reminder. # #--disable_query_log #--disable_result_log #select sleep(1); #--enable_result_log #--enable_query_log # # Consistency check # let $n = $dbs; let $m= 1; while($n) { let $diff_tables=master:d$n.t$m, slave:d$n.t$m; source include/diff_tables.inc; dec $n; } # # The final clean-up # connection master; --disable_query_log let $n= $dbs; while ($n) { eval drop database d$n; dec $n; } --enable_query_log --source include/sync_slave_sql_with_master.inc set @@global.slave_parallel_workers= @save.slave_parallel_workers; --source include/rpl_end.inc