From: Andrei Elkin Date: February 21 2011 2:38pm Subject: bzr commit into mysql-next-mr-wl5569 branch (andrei.elkin:3272) WL#5599 List-Archive: http://lists.mysql.com/commits/131773 Message-Id: <201102211438.p1LEcP7q008295@mysql1000.dsl.inet.fi> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1367567861==" --===============1367567861== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/andrei/MySQL/BZR/2a-23May/WL/mysql-next-mr-wl5569/ based on revid:andrei.elkin@stripped 3272 Andrei Elkin 2011-02-21 wl#5599 Query parallel replication. Fixed few issues revealed by testing. 1. All db:s are picked up not just updated ones; 2. Added opt files to rpl_parallel_mult_db to let it pass with righer big (8 db:s) values. 3. Added over-max db:s tests. @ mysql-test/r/mysqld--help-notwin.result results get updated. @ mysql-test/suite/rpl/r/rpl_parallel_ddl.result results get updated. @ mysql-test/suite/rpl/r/rpl_parallel_multi_db.result results get updated. @ mysql-test/suite/rpl/r/rpl_parallel_start_stop.result results get updated. @ mysql-test/suite/rpl/t/rpl_parallel_ddl.test added over-the-max updated db:s case through RENAME tables. @ mysql-test/suite/rpl/t/rpl_parallel_fallback.test Marked a todo. @ mysql-test/suite/rpl/t/rpl_parallel_multi_db.test increased the number of db:s. Notice that forces to change the default of --thread-stack size; added over-the-max updated db:s case through multi-updates. @ mysql-test/suite/rpl/t/rpl_parallel_start_stop.test removed explicit log pos from the results. @ mysql-test/suite/sys_vars/r/all_vars.result results get updated. @ sql/binlog.cc Changed location of comparisions against MAX_DBS_IN_QUERY_MTS to be inside the adding to db list method; refined logics of gathering db in decide_(): *all* db:s whenever there is at least one table to update are picked up. @ sql/log_event.cc removed an extraneous assert. @ sql/log_event.h updated some comments. @ sql/share/errmsg-utf8.txt Added a new error/warning on master specific to Query parallel replication. @ sql/sql_table.cc Changed location of comparisions against MAX_DBS_IN_QUERY_MTS to be inside the adding to db list method. added: mysql-test/suite/rpl/t/rpl_parallel_multi_db-master.opt mysql-test/suite/rpl/t/rpl_parallel_multi_db-slave.opt modified: mysql-test/r/mysqld--help-notwin.result mysql-test/suite/rpl/r/rpl_parallel_ddl.result mysql-test/suite/rpl/r/rpl_parallel_multi_db.result mysql-test/suite/rpl/r/rpl_parallel_start_stop.result mysql-test/suite/rpl/t/rpl_parallel_ddl.test mysql-test/suite/rpl/t/rpl_parallel_fallback.test mysql-test/suite/rpl/t/rpl_parallel_multi_db.test mysql-test/suite/rpl/t/rpl_parallel_start_stop.test mysql-test/suite/sys_vars/r/all_vars.result sql/binlog.cc sql/log_event.cc sql/log_event.h sql/share/errmsg-utf8.txt sql/sql_table.cc === modified file 'mysql-test/r/mysqld--help-notwin.result' --- a/mysql-test/r/mysqld--help-notwin.result 2011-02-17 19:56:48 +0000 +++ b/mysql-test/r/mysqld--help-notwin.result 2011-02-21 14:38:13 +0000 @@ -362,6 +362,10 @@ The following options may be given as th If enabled slave itself computes the event appying time value to implicitly affected timestamp columms. Otherwise (default) it installs prescribed by the master value + --mts-master-updated-dbs-max=# + The maximum number of databases that a query log event + can contain in its header in order to faciliate the + parallel applying on the slave. --mts-partition-hash-soft-max=# Number of records in the mts partition hash below which entries with zero usage are tolerated @@ -907,6 +911,7 @@ mts-checkpoint-group 512 mts-checkpoint-period 300 mts-coordinator-basic-nap 5 mts-exp-slave-local-timestamp FALSE +mts-master-updated-dbs-max 16 mts-partition-hash-soft-max 16 mts-pending-jobs-size-max 16777216 mts-slave-parallel-workers 0 === modified file 'mysql-test/suite/rpl/r/rpl_parallel_ddl.result' --- a/mysql-test/suite/rpl/r/rpl_parallel_ddl.result 2011-02-19 16:26:33 +0000 +++ b/mysql-test/suite/rpl/r/rpl_parallel_ddl.result 2011-02-21 14:38:13 +0000 @@ -3,806 +3,6 @@ include/master-slave.inc include/stop_slave.inc set @save.mts_slave_parallel_workers= @@global.mts_slave_parallel_workers; set @@global.mts_slave_parallel_workers= 4; -create database d32; -create table d32.t8 (a int); -select round(rand()*8) into @var; -insert into d32.t8 values (@var); -create table d32.t7 (a int); -select round(rand()*8) into @var; -insert into d32.t7 values (@var); -create table d32.t6 (a int); -select round(rand()*8) into @var; -insert into d32.t6 values (@var); -create table d32.t5 (a int); -select round(rand()*8) into @var; -insert into d32.t5 values (@var); -create table d32.t4 (a int); -select round(rand()*8) into @var; -insert into d32.t4 values (@var); -create table d32.t3 (a int); -select round(rand()*8) into @var; -insert into d32.t3 values (@var); -create table d32.t2 (a int); -select round(rand()*8) into @var; -insert into d32.t2 values (@var); -create table d32.t1 (a int); -select round(rand()*8) into @var; -insert into d32.t1 values (@var); -create database d31; -create table d31.t8 (a int); -select round(rand()*8) into @var; -insert into d31.t8 values (@var); -create table d31.t7 (a int); -select round(rand()*8) into @var; -insert into d31.t7 values (@var); -create table d31.t6 (a int); -select round(rand()*8) into @var; -insert into d31.t6 values (@var); -create table d31.t5 (a int); -select round(rand()*8) into @var; -insert into d31.t5 values (@var); -create table d31.t4 (a int); -select round(rand()*8) into @var; -insert into d31.t4 values (@var); -create table d31.t3 (a int); -select round(rand()*8) into @var; -insert into d31.t3 values (@var); -create table d31.t2 (a int); -select round(rand()*8) into @var; -insert into d31.t2 values (@var); -create table d31.t1 (a int); -select round(rand()*8) into @var; -insert into d31.t1 values (@var); -create database d30; -create table d30.t8 (a int); -select round(rand()*8) into @var; -insert into d30.t8 values (@var); -create table d30.t7 (a int); -select round(rand()*8) into @var; -insert into d30.t7 values (@var); -create table d30.t6 (a int); -select round(rand()*8) into @var; -insert into d30.t6 values (@var); -create table d30.t5 (a int); -select round(rand()*8) into @var; -insert into d30.t5 values (@var); -create table d30.t4 (a int); -select round(rand()*8) into @var; -insert into d30.t4 values (@var); -create table d30.t3 (a int); -select round(rand()*8) into @var; -insert into d30.t3 values (@var); -create table d30.t2 (a int); -select round(rand()*8) into @var; -insert into d30.t2 values (@var); -create table d30.t1 (a int); -select round(rand()*8) into @var; -insert into d30.t1 values (@var); -create database d29; -create table d29.t8 (a int); -select round(rand()*8) into @var; -insert into d29.t8 values (@var); -create table d29.t7 (a int); -select round(rand()*8) into @var; -insert into d29.t7 values (@var); -create table d29.t6 (a int); -select round(rand()*8) into @var; -insert into d29.t6 values (@var); -create table d29.t5 (a int); -select round(rand()*8) into @var; -insert into d29.t5 values (@var); -create table d29.t4 (a int); -select round(rand()*8) into @var; -insert into d29.t4 values (@var); -create table d29.t3 (a int); -select round(rand()*8) into @var; -insert into d29.t3 values (@var); -create table d29.t2 (a int); -select round(rand()*8) into @var; -insert into d29.t2 values (@var); -create table d29.t1 (a int); -select round(rand()*8) into @var; -insert into d29.t1 values (@var); -create database d28; -create table d28.t8 (a int); -select round(rand()*8) into @var; -insert into d28.t8 values (@var); -create table d28.t7 (a int); -select round(rand()*8) into @var; -insert into d28.t7 values (@var); -create table d28.t6 (a int); -select round(rand()*8) into @var; -insert into d28.t6 values (@var); -create table d28.t5 (a int); -select round(rand()*8) into @var; -insert into d28.t5 values (@var); -create table d28.t4 (a int); -select round(rand()*8) into @var; -insert into d28.t4 values (@var); -create table d28.t3 (a int); -select round(rand()*8) into @var; -insert into d28.t3 values (@var); -create table d28.t2 (a int); -select round(rand()*8) into @var; -insert into d28.t2 values (@var); -create table d28.t1 (a int); -select round(rand()*8) into @var; -insert into d28.t1 values (@var); -create database d27; -create table d27.t8 (a int); -select round(rand()*8) into @var; -insert into d27.t8 values (@var); -create table d27.t7 (a int); -select round(rand()*8) into @var; -insert into d27.t7 values (@var); -create table d27.t6 (a int); -select round(rand()*8) into @var; -insert into d27.t6 values (@var); -create table d27.t5 (a int); -select round(rand()*8) into @var; -insert into d27.t5 values (@var); -create table d27.t4 (a int); -select round(rand()*8) into @var; -insert into d27.t4 values (@var); -create table d27.t3 (a int); -select round(rand()*8) into @var; -insert into d27.t3 values (@var); -create table d27.t2 (a int); -select round(rand()*8) into @var; -insert into d27.t2 values (@var); -create table d27.t1 (a int); -select round(rand()*8) into @var; -insert into d27.t1 values (@var); -create database d26; -create table d26.t8 (a int); -select round(rand()*8) into @var; -insert into d26.t8 values (@var); -create table d26.t7 (a int); -select round(rand()*8) into @var; -insert into d26.t7 values (@var); -create table d26.t6 (a int); -select round(rand()*8) into @var; -insert into d26.t6 values (@var); -create table d26.t5 (a int); -select round(rand()*8) into @var; -insert into d26.t5 values (@var); -create table d26.t4 (a int); -select round(rand()*8) into @var; -insert into d26.t4 values (@var); -create table d26.t3 (a int); -select round(rand()*8) into @var; -insert into d26.t3 values (@var); -create table d26.t2 (a int); -select round(rand()*8) into @var; -insert into d26.t2 values (@var); -create table d26.t1 (a int); -select round(rand()*8) into @var; -insert into d26.t1 values (@var); -create database d25; -create table d25.t8 (a int); -select round(rand()*8) into @var; -insert into d25.t8 values (@var); -create table d25.t7 (a int); -select round(rand()*8) into @var; -insert into d25.t7 values (@var); -create table d25.t6 (a int); -select round(rand()*8) into @var; -insert into d25.t6 values (@var); -create table d25.t5 (a int); -select round(rand()*8) into @var; -insert into d25.t5 values (@var); -create table d25.t4 (a int); -select round(rand()*8) into @var; -insert into d25.t4 values (@var); -create table d25.t3 (a int); -select round(rand()*8) into @var; -insert into d25.t3 values (@var); -create table d25.t2 (a int); -select round(rand()*8) into @var; -insert into d25.t2 values (@var); -create table d25.t1 (a int); -select round(rand()*8) into @var; -insert into d25.t1 values (@var); -create database d24; -create table d24.t8 (a int); -select round(rand()*8) into @var; -insert into d24.t8 values (@var); -create table d24.t7 (a int); -select round(rand()*8) into @var; -insert into d24.t7 values (@var); -create table d24.t6 (a int); -select round(rand()*8) into @var; -insert into d24.t6 values (@var); -create table d24.t5 (a int); -select round(rand()*8) into @var; -insert into d24.t5 values (@var); -create table d24.t4 (a int); -select round(rand()*8) into @var; -insert into d24.t4 values (@var); -create table d24.t3 (a int); -select round(rand()*8) into @var; -insert into d24.t3 values (@var); -create table d24.t2 (a int); -select round(rand()*8) into @var; -insert into d24.t2 values (@var); -create table d24.t1 (a int); -select round(rand()*8) into @var; -insert into d24.t1 values (@var); -create database d23; -create table d23.t8 (a int); -select round(rand()*8) into @var; -insert into d23.t8 values (@var); -create table d23.t7 (a int); -select round(rand()*8) into @var; -insert into d23.t7 values (@var); -create table d23.t6 (a int); -select round(rand()*8) into @var; -insert into d23.t6 values (@var); -create table d23.t5 (a int); -select round(rand()*8) into @var; -insert into d23.t5 values (@var); -create table d23.t4 (a int); -select round(rand()*8) into @var; -insert into d23.t4 values (@var); -create table d23.t3 (a int); -select round(rand()*8) into @var; -insert into d23.t3 values (@var); -create table d23.t2 (a int); -select round(rand()*8) into @var; -insert into d23.t2 values (@var); -create table d23.t1 (a int); -select round(rand()*8) into @var; -insert into d23.t1 values (@var); -create database d22; -create table d22.t8 (a int); -select round(rand()*8) into @var; -insert into d22.t8 values (@var); -create table d22.t7 (a int); -select round(rand()*8) into @var; -insert into d22.t7 values (@var); -create table d22.t6 (a int); -select round(rand()*8) into @var; -insert into d22.t6 values (@var); -create table d22.t5 (a int); -select round(rand()*8) into @var; -insert into d22.t5 values (@var); -create table d22.t4 (a int); -select round(rand()*8) into @var; -insert into d22.t4 values (@var); -create table d22.t3 (a int); -select round(rand()*8) into @var; -insert into d22.t3 values (@var); -create table d22.t2 (a int); -select round(rand()*8) into @var; -insert into d22.t2 values (@var); -create table d22.t1 (a int); -select round(rand()*8) into @var; -insert into d22.t1 values (@var); -create database d21; -create table d21.t8 (a int); -select round(rand()*8) into @var; -insert into d21.t8 values (@var); -create table d21.t7 (a int); -select round(rand()*8) into @var; -insert into d21.t7 values (@var); -create table d21.t6 (a int); -select round(rand()*8) into @var; -insert into d21.t6 values (@var); -create table d21.t5 (a int); -select round(rand()*8) into @var; -insert into d21.t5 values (@var); -create table d21.t4 (a int); -select round(rand()*8) into @var; -insert into d21.t4 values (@var); -create table d21.t3 (a int); -select round(rand()*8) into @var; -insert into d21.t3 values (@var); -create table d21.t2 (a int); -select round(rand()*8) into @var; -insert into d21.t2 values (@var); -create table d21.t1 (a int); -select round(rand()*8) into @var; -insert into d21.t1 values (@var); -create database d20; -create table d20.t8 (a int); -select round(rand()*8) into @var; -insert into d20.t8 values (@var); -create table d20.t7 (a int); -select round(rand()*8) into @var; -insert into d20.t7 values (@var); -create table d20.t6 (a int); -select round(rand()*8) into @var; -insert into d20.t6 values (@var); -create table d20.t5 (a int); -select round(rand()*8) into @var; -insert into d20.t5 values (@var); -create table d20.t4 (a int); -select round(rand()*8) into @var; -insert into d20.t4 values (@var); -create table d20.t3 (a int); -select round(rand()*8) into @var; -insert into d20.t3 values (@var); -create table d20.t2 (a int); -select round(rand()*8) into @var; -insert into d20.t2 values (@var); -create table d20.t1 (a int); -select round(rand()*8) into @var; -insert into d20.t1 values (@var); -create database d19; -create table d19.t8 (a int); -select round(rand()*8) into @var; -insert into d19.t8 values (@var); -create table d19.t7 (a int); -select round(rand()*8) into @var; -insert into d19.t7 values (@var); -create table d19.t6 (a int); -select round(rand()*8) into @var; -insert into d19.t6 values (@var); -create table d19.t5 (a int); -select round(rand()*8) into @var; -insert into d19.t5 values (@var); -create table d19.t4 (a int); -select round(rand()*8) into @var; -insert into d19.t4 values (@var); -create table d19.t3 (a int); -select round(rand()*8) into @var; -insert into d19.t3 values (@var); -create table d19.t2 (a int); -select round(rand()*8) into @var; -insert into d19.t2 values (@var); -create table d19.t1 (a int); -select round(rand()*8) into @var; -insert into d19.t1 values (@var); -create database d18; -create table d18.t8 (a int); -select round(rand()*8) into @var; -insert into d18.t8 values (@var); -create table d18.t7 (a int); -select round(rand()*8) into @var; -insert into d18.t7 values (@var); -create table d18.t6 (a int); -select round(rand()*8) into @var; -insert into d18.t6 values (@var); -create table d18.t5 (a int); -select round(rand()*8) into @var; -insert into d18.t5 values (@var); -create table d18.t4 (a int); -select round(rand()*8) into @var; -insert into d18.t4 values (@var); -create table d18.t3 (a int); -select round(rand()*8) into @var; -insert into d18.t3 values (@var); -create table d18.t2 (a int); -select round(rand()*8) into @var; -insert into d18.t2 values (@var); -create table d18.t1 (a int); -select round(rand()*8) into @var; -insert into d18.t1 values (@var); -create database d17; -create table d17.t8 (a int); -select round(rand()*8) into @var; -insert into d17.t8 values (@var); -create table d17.t7 (a int); -select round(rand()*8) into @var; -insert into d17.t7 values (@var); -create table d17.t6 (a int); -select round(rand()*8) into @var; -insert into d17.t6 values (@var); -create table d17.t5 (a int); -select round(rand()*8) into @var; -insert into d17.t5 values (@var); -create table d17.t4 (a int); -select round(rand()*8) into @var; -insert into d17.t4 values (@var); -create table d17.t3 (a int); -select round(rand()*8) into @var; -insert into d17.t3 values (@var); -create table d17.t2 (a int); -select round(rand()*8) into @var; -insert into d17.t2 values (@var); -create table d17.t1 (a int); -select round(rand()*8) into @var; -insert into d17.t1 values (@var); -create database d16; -create table d16.t8 (a int); -select round(rand()*8) into @var; -insert into d16.t8 values (@var); -create table d16.t7 (a int); -select round(rand()*8) into @var; -insert into d16.t7 values (@var); -create table d16.t6 (a int); -select round(rand()*8) into @var; -insert into d16.t6 values (@var); -create table d16.t5 (a int); -select round(rand()*8) into @var; -insert into d16.t5 values (@var); -create table d16.t4 (a int); -select round(rand()*8) into @var; -insert into d16.t4 values (@var); -create table d16.t3 (a int); -select round(rand()*8) into @var; -insert into d16.t3 values (@var); -create table d16.t2 (a int); -select round(rand()*8) into @var; -insert into d16.t2 values (@var); -create table d16.t1 (a int); -select round(rand()*8) into @var; -insert into d16.t1 values (@var); -create database d15; -create table d15.t8 (a int); -select round(rand()*8) into @var; -insert into d15.t8 values (@var); -create table d15.t7 (a int); -select round(rand()*8) into @var; -insert into d15.t7 values (@var); -create table d15.t6 (a int); -select round(rand()*8) into @var; -insert into d15.t6 values (@var); -create table d15.t5 (a int); -select round(rand()*8) into @var; -insert into d15.t5 values (@var); -create table d15.t4 (a int); -select round(rand()*8) into @var; -insert into d15.t4 values (@var); -create table d15.t3 (a int); -select round(rand()*8) into @var; -insert into d15.t3 values (@var); -create table d15.t2 (a int); -select round(rand()*8) into @var; -insert into d15.t2 values (@var); -create table d15.t1 (a int); -select round(rand()*8) into @var; -insert into d15.t1 values (@var); -create database d14; -create table d14.t8 (a int); -select round(rand()*8) into @var; -insert into d14.t8 values (@var); -create table d14.t7 (a int); -select round(rand()*8) into @var; -insert into d14.t7 values (@var); -create table d14.t6 (a int); -select round(rand()*8) into @var; -insert into d14.t6 values (@var); -create table d14.t5 (a int); -select round(rand()*8) into @var; -insert into d14.t5 values (@var); -create table d14.t4 (a int); -select round(rand()*8) into @var; -insert into d14.t4 values (@var); -create table d14.t3 (a int); -select round(rand()*8) into @var; -insert into d14.t3 values (@var); -create table d14.t2 (a int); -select round(rand()*8) into @var; -insert into d14.t2 values (@var); -create table d14.t1 (a int); -select round(rand()*8) into @var; -insert into d14.t1 values (@var); -create database d13; -create table d13.t8 (a int); -select round(rand()*8) into @var; -insert into d13.t8 values (@var); -create table d13.t7 (a int); -select round(rand()*8) into @var; -insert into d13.t7 values (@var); -create table d13.t6 (a int); -select round(rand()*8) into @var; -insert into d13.t6 values (@var); -create table d13.t5 (a int); -select round(rand()*8) into @var; -insert into d13.t5 values (@var); -create table d13.t4 (a int); -select round(rand()*8) into @var; -insert into d13.t4 values (@var); -create table d13.t3 (a int); -select round(rand()*8) into @var; -insert into d13.t3 values (@var); -create table d13.t2 (a int); -select round(rand()*8) into @var; -insert into d13.t2 values (@var); -create table d13.t1 (a int); -select round(rand()*8) into @var; -insert into d13.t1 values (@var); -create database d12; -create table d12.t8 (a int); -select round(rand()*8) into @var; -insert into d12.t8 values (@var); -create table d12.t7 (a int); -select round(rand()*8) into @var; -insert into d12.t7 values (@var); -create table d12.t6 (a int); -select round(rand()*8) into @var; -insert into d12.t6 values (@var); -create table d12.t5 (a int); -select round(rand()*8) into @var; -insert into d12.t5 values (@var); -create table d12.t4 (a int); -select round(rand()*8) into @var; -insert into d12.t4 values (@var); -create table d12.t3 (a int); -select round(rand()*8) into @var; -insert into d12.t3 values (@var); -create table d12.t2 (a int); -select round(rand()*8) into @var; -insert into d12.t2 values (@var); -create table d12.t1 (a int); -select round(rand()*8) into @var; -insert into d12.t1 values (@var); -create database d11; -create table d11.t8 (a int); -select round(rand()*8) into @var; -insert into d11.t8 values (@var); -create table d11.t7 (a int); -select round(rand()*8) into @var; -insert into d11.t7 values (@var); -create table d11.t6 (a int); -select round(rand()*8) into @var; -insert into d11.t6 values (@var); -create table d11.t5 (a int); -select round(rand()*8) into @var; -insert into d11.t5 values (@var); -create table d11.t4 (a int); -select round(rand()*8) into @var; -insert into d11.t4 values (@var); -create table d11.t3 (a int); -select round(rand()*8) into @var; -insert into d11.t3 values (@var); -create table d11.t2 (a int); -select round(rand()*8) into @var; -insert into d11.t2 values (@var); -create table d11.t1 (a int); -select round(rand()*8) into @var; -insert into d11.t1 values (@var); -create database d10; -create table d10.t8 (a int); -select round(rand()*8) into @var; -insert into d10.t8 values (@var); -create table d10.t7 (a int); -select round(rand()*8) into @var; -insert into d10.t7 values (@var); -create table d10.t6 (a int); -select round(rand()*8) into @var; -insert into d10.t6 values (@var); -create table d10.t5 (a int); -select round(rand()*8) into @var; -insert into d10.t5 values (@var); -create table d10.t4 (a int); -select round(rand()*8) into @var; -insert into d10.t4 values (@var); -create table d10.t3 (a int); -select round(rand()*8) into @var; -insert into d10.t3 values (@var); -create table d10.t2 (a int); -select round(rand()*8) into @var; -insert into d10.t2 values (@var); -create table d10.t1 (a int); -select round(rand()*8) into @var; -insert into d10.t1 values (@var); -create database d9; -create table d9.t8 (a int); -select round(rand()*8) into @var; -insert into d9.t8 values (@var); -create table d9.t7 (a int); -select round(rand()*8) into @var; -insert into d9.t7 values (@var); -create table d9.t6 (a int); -select round(rand()*8) into @var; -insert into d9.t6 values (@var); -create table d9.t5 (a int); -select round(rand()*8) into @var; -insert into d9.t5 values (@var); -create table d9.t4 (a int); -select round(rand()*8) into @var; -insert into d9.t4 values (@var); -create table d9.t3 (a int); -select round(rand()*8) into @var; -insert into d9.t3 values (@var); -create table d9.t2 (a int); -select round(rand()*8) into @var; -insert into d9.t2 values (@var); -create table d9.t1 (a int); -select round(rand()*8) into @var; -insert into d9.t1 values (@var); -create database d8; -create table d8.t8 (a int); -select round(rand()*8) into @var; -insert into d8.t8 values (@var); -create table d8.t7 (a int); -select round(rand()*8) into @var; -insert into d8.t7 values (@var); -create table d8.t6 (a int); -select round(rand()*8) into @var; -insert into d8.t6 values (@var); -create table d8.t5 (a int); -select round(rand()*8) into @var; -insert into d8.t5 values (@var); -create table d8.t4 (a int); -select round(rand()*8) into @var; -insert into d8.t4 values (@var); -create table d8.t3 (a int); -select round(rand()*8) into @var; -insert into d8.t3 values (@var); -create table d8.t2 (a int); -select round(rand()*8) into @var; -insert into d8.t2 values (@var); -create table d8.t1 (a int); -select round(rand()*8) into @var; -insert into d8.t1 values (@var); -create database d7; -create table d7.t8 (a int); -select round(rand()*8) into @var; -insert into d7.t8 values (@var); -create table d7.t7 (a int); -select round(rand()*8) into @var; -insert into d7.t7 values (@var); -create table d7.t6 (a int); -select round(rand()*8) into @var; -insert into d7.t6 values (@var); -create table d7.t5 (a int); -select round(rand()*8) into @var; -insert into d7.t5 values (@var); -create table d7.t4 (a int); -select round(rand()*8) into @var; -insert into d7.t4 values (@var); -create table d7.t3 (a int); -select round(rand()*8) into @var; -insert into d7.t3 values (@var); -create table d7.t2 (a int); -select round(rand()*8) into @var; -insert into d7.t2 values (@var); -create table d7.t1 (a int); -select round(rand()*8) into @var; -insert into d7.t1 values (@var); -create database d6; -create table d6.t8 (a int); -select round(rand()*8) into @var; -insert into d6.t8 values (@var); -create table d6.t7 (a int); -select round(rand()*8) into @var; -insert into d6.t7 values (@var); -create table d6.t6 (a int); -select round(rand()*8) into @var; -insert into d6.t6 values (@var); -create table d6.t5 (a int); -select round(rand()*8) into @var; -insert into d6.t5 values (@var); -create table d6.t4 (a int); -select round(rand()*8) into @var; -insert into d6.t4 values (@var); -create table d6.t3 (a int); -select round(rand()*8) into @var; -insert into d6.t3 values (@var); -create table d6.t2 (a int); -select round(rand()*8) into @var; -insert into d6.t2 values (@var); -create table d6.t1 (a int); -select round(rand()*8) into @var; -insert into d6.t1 values (@var); -create database d5; -create table d5.t8 (a int); -select round(rand()*8) into @var; -insert into d5.t8 values (@var); -create table d5.t7 (a int); -select round(rand()*8) into @var; -insert into d5.t7 values (@var); -create table d5.t6 (a int); -select round(rand()*8) into @var; -insert into d5.t6 values (@var); -create table d5.t5 (a int); -select round(rand()*8) into @var; -insert into d5.t5 values (@var); -create table d5.t4 (a int); -select round(rand()*8) into @var; -insert into d5.t4 values (@var); -create table d5.t3 (a int); -select round(rand()*8) into @var; -insert into d5.t3 values (@var); -create table d5.t2 (a int); -select round(rand()*8) into @var; -insert into d5.t2 values (@var); -create table d5.t1 (a int); -select round(rand()*8) into @var; -insert into d5.t1 values (@var); -create database d4; -create table d4.t8 (a int); -select round(rand()*8) into @var; -insert into d4.t8 values (@var); -create table d4.t7 (a int); -select round(rand()*8) into @var; -insert into d4.t7 values (@var); -create table d4.t6 (a int); -select round(rand()*8) into @var; -insert into d4.t6 values (@var); -create table d4.t5 (a int); -select round(rand()*8) into @var; -insert into d4.t5 values (@var); -create table d4.t4 (a int); -select round(rand()*8) into @var; -insert into d4.t4 values (@var); -create table d4.t3 (a int); -select round(rand()*8) into @var; -insert into d4.t3 values (@var); -create table d4.t2 (a int); -select round(rand()*8) into @var; -insert into d4.t2 values (@var); -create table d4.t1 (a int); -select round(rand()*8) into @var; -insert into d4.t1 values (@var); -create database d3; -create table d3.t8 (a int); -select round(rand()*8) into @var; -insert into d3.t8 values (@var); -create table d3.t7 (a int); -select round(rand()*8) into @var; -insert into d3.t7 values (@var); -create table d3.t6 (a int); -select round(rand()*8) into @var; -insert into d3.t6 values (@var); -create table d3.t5 (a int); -select round(rand()*8) into @var; -insert into d3.t5 values (@var); -create table d3.t4 (a int); -select round(rand()*8) into @var; -insert into d3.t4 values (@var); -create table d3.t3 (a int); -select round(rand()*8) into @var; -insert into d3.t3 values (@var); -create table d3.t2 (a int); -select round(rand()*8) into @var; -insert into d3.t2 values (@var); -create table d3.t1 (a int); -select round(rand()*8) into @var; -insert into d3.t1 values (@var); -create database d2; -create table d2.t8 (a int); -select round(rand()*8) into @var; -insert into d2.t8 values (@var); -create table d2.t7 (a int); -select round(rand()*8) into @var; -insert into d2.t7 values (@var); -create table d2.t6 (a int); -select round(rand()*8) into @var; -insert into d2.t6 values (@var); -create table d2.t5 (a int); -select round(rand()*8) into @var; -insert into d2.t5 values (@var); -create table d2.t4 (a int); -select round(rand()*8) into @var; -insert into d2.t4 values (@var); -create table d2.t3 (a int); -select round(rand()*8) into @var; -insert into d2.t3 values (@var); -create table d2.t2 (a int); -select round(rand()*8) into @var; -insert into d2.t2 values (@var); -create table d2.t1 (a int); -select round(rand()*8) into @var; -insert into d2.t1 values (@var); -create database d1; -create table d1.t8 (a int); -select round(rand()*8) into @var; -insert into d1.t8 values (@var); -create table d1.t7 (a int); -select round(rand()*8) into @var; -insert into d1.t7 values (@var); -create table d1.t6 (a int); -select round(rand()*8) into @var; -insert into d1.t6 values (@var); -create table d1.t5 (a int); -select round(rand()*8) into @var; -insert into d1.t5 values (@var); -create table d1.t4 (a int); -select round(rand()*8) into @var; -insert into d1.t4 values (@var); -create table d1.t3 (a int); -select round(rand()*8) into @var; -insert into d1.t3 values (@var); -create table d1.t2 (a int); -select round(rand()*8) into @var; -insert into d1.t2 values (@var); -create table d1.t1 (a int); -select round(rand()*8) into @var; -insert into d1.t1 values (@var); include/start_slave.inc Warnings: Note 1726 Temporary failed transaction retry is not supported in Parallel Slave. Such failure will force the slave to stop. === modified file 'mysql-test/suite/rpl/r/rpl_parallel_multi_db.result' --- a/mysql-test/suite/rpl/r/rpl_parallel_multi_db.result 2011-02-17 19:56:48 +0000 +++ b/mysql-test/suite/rpl/r/rpl_parallel_multi_db.result 2011-02-21 14:38:13 +0000 @@ -6,6 +6,106 @@ set @@global.mts_slave_parallel_workers= include/start_slave.inc Warnings: Note 1726 Temporary failed transaction retry is not supported in Parallel Slave. Such failure will force the slave to stop. +create database d8; +create table d8.t8 (a int); +select round(rand()*8) into @var; +insert into d8.t8 values (@var); +create table d8.t7 (a int); +select round(rand()*8) into @var; +insert into d8.t7 values (@var); +create table d8.t6 (a int); +select round(rand()*8) into @var; +insert into d8.t6 values (@var); +create table d8.t5 (a int); +select round(rand()*8) into @var; +insert into d8.t5 values (@var); +create table d8.t4 (a int); +select round(rand()*8) into @var; +insert into d8.t4 values (@var); +create table d8.t3 (a int); +select round(rand()*8) into @var; +insert into d8.t3 values (@var); +create table d8.t2 (a int); +select round(rand()*8) into @var; +insert into d8.t2 values (@var); +create table d8.t1 (a int); +select round(rand()*8) into @var; +insert into d8.t1 values (@var); +create database d7; +create table d7.t8 (a int); +select round(rand()*8) into @var; +insert into d7.t8 values (@var); +create table d7.t7 (a int); +select round(rand()*8) into @var; +insert into d7.t7 values (@var); +create table d7.t6 (a int); +select round(rand()*8) into @var; +insert into d7.t6 values (@var); +create table d7.t5 (a int); +select round(rand()*8) into @var; +insert into d7.t5 values (@var); +create table d7.t4 (a int); +select round(rand()*8) into @var; +insert into d7.t4 values (@var); +create table d7.t3 (a int); +select round(rand()*8) into @var; +insert into d7.t3 values (@var); +create table d7.t2 (a int); +select round(rand()*8) into @var; +insert into d7.t2 values (@var); +create table d7.t1 (a int); +select round(rand()*8) into @var; +insert into d7.t1 values (@var); +create database d6; +create table d6.t8 (a int); +select round(rand()*8) into @var; +insert into d6.t8 values (@var); +create table d6.t7 (a int); +select round(rand()*8) into @var; +insert into d6.t7 values (@var); +create table d6.t6 (a int); +select round(rand()*8) into @var; +insert into d6.t6 values (@var); +create table d6.t5 (a int); +select round(rand()*8) into @var; +insert into d6.t5 values (@var); +create table d6.t4 (a int); +select round(rand()*8) into @var; +insert into d6.t4 values (@var); +create table d6.t3 (a int); +select round(rand()*8) into @var; +insert into d6.t3 values (@var); +create table d6.t2 (a int); +select round(rand()*8) into @var; +insert into d6.t2 values (@var); +create table d6.t1 (a int); +select round(rand()*8) into @var; +insert into d6.t1 values (@var); +create database d5; +create table d5.t8 (a int); +select round(rand()*8) into @var; +insert into d5.t8 values (@var); +create table d5.t7 (a int); +select round(rand()*8) into @var; +insert into d5.t7 values (@var); +create table d5.t6 (a int); +select round(rand()*8) into @var; +insert into d5.t6 values (@var); +create table d5.t5 (a int); +select round(rand()*8) into @var; +insert into d5.t5 values (@var); +create table d5.t4 (a int); +select round(rand()*8) into @var; +insert into d5.t4 values (@var); +create table d5.t3 (a int); +select round(rand()*8) into @var; +insert into d5.t3 values (@var); +create table d5.t2 (a int); +select round(rand()*8) into @var; +insert into d5.t2 values (@var); +create table d5.t1 (a int); +select round(rand()*8) into @var; +insert into d5.t1 values (@var); create database d4; create table d4.t8 (a int); select round(rand()*8) into @var; @@ -106,6 +206,38 @@ insert into d1.t2 values (@var); create table d1.t1 (a int); select round(rand()*8) into @var; insert into d1.t1 values (@var); +include/diff_tables.inc [master:d8.t8, slave:d8.t8] +include/diff_tables.inc [master:d8.t7, slave:d8.t7] +include/diff_tables.inc [master:d8.t6, slave:d8.t6] +include/diff_tables.inc [master:d8.t5, slave:d8.t5] +include/diff_tables.inc [master:d8.t4, slave:d8.t4] +include/diff_tables.inc [master:d8.t3, slave:d8.t3] +include/diff_tables.inc [master:d8.t2, slave:d8.t2] +include/diff_tables.inc [master:d8.t1, slave:d8.t1] +include/diff_tables.inc [master:d7.t8, slave:d7.t8] +include/diff_tables.inc [master:d7.t7, slave:d7.t7] +include/diff_tables.inc [master:d7.t6, slave:d7.t6] +include/diff_tables.inc [master:d7.t5, slave:d7.t5] +include/diff_tables.inc [master:d7.t4, slave:d7.t4] +include/diff_tables.inc [master:d7.t3, slave:d7.t3] +include/diff_tables.inc [master:d7.t2, slave:d7.t2] +include/diff_tables.inc [master:d7.t1, slave:d7.t1] +include/diff_tables.inc [master:d6.t8, slave:d6.t8] +include/diff_tables.inc [master:d6.t7, slave:d6.t7] +include/diff_tables.inc [master:d6.t6, slave:d6.t6] +include/diff_tables.inc [master:d6.t5, slave:d6.t5] +include/diff_tables.inc [master:d6.t4, slave:d6.t4] +include/diff_tables.inc [master:d6.t3, slave:d6.t3] +include/diff_tables.inc [master:d6.t2, slave:d6.t2] +include/diff_tables.inc [master:d6.t1, slave:d6.t1] +include/diff_tables.inc [master:d5.t8, slave:d5.t8] +include/diff_tables.inc [master:d5.t7, slave:d5.t7] +include/diff_tables.inc [master:d5.t6, slave:d5.t6] +include/diff_tables.inc [master:d5.t5, slave:d5.t5] +include/diff_tables.inc [master:d5.t4, slave:d5.t4] +include/diff_tables.inc [master:d5.t3, slave:d5.t3] +include/diff_tables.inc [master:d5.t2, slave:d5.t2] +include/diff_tables.inc [master:d5.t1, slave:d5.t1] include/diff_tables.inc [master:d4.t8, slave:d4.t8] include/diff_tables.inc [master:d4.t7, slave:d4.t7] include/diff_tables.inc [master:d4.t6, slave:d4.t6] @@ -138,4 +270,104 @@ include/diff_tables.inc [master:d1.t4, s include/diff_tables.inc [master:d1.t3, slave:d1.t3] include/diff_tables.inc [master:d1.t2, slave:d1.t2] include/diff_tables.inc [master:d1.t1, slave:d1.t1] +create database d20; +create table d20.t1 (a int); +select round(rand()*8) into @var; +insert into d20.t1 values (@var); +create database d19; +create table d19.t1 (a int); +select round(rand()*8) into @var; +insert into d19.t1 values (@var); +create database d18; +create table d18.t1 (a int); +select round(rand()*8) into @var; +insert into d18.t1 values (@var); +create database d17; +create table d17.t1 (a int); +select round(rand()*8) into @var; +insert into d17.t1 values (@var); +create database d16; +create table d16.t1 (a int); +select round(rand()*8) into @var; +insert into d16.t1 values (@var); +create database d15; +create table d15.t1 (a int); +select round(rand()*8) into @var; +insert into d15.t1 values (@var); +create database d14; +create table d14.t1 (a int); +select round(rand()*8) into @var; +insert into d14.t1 values (@var); +create database d13; +create table d13.t1 (a int); +select round(rand()*8) into @var; +insert into d13.t1 values (@var); +create database d12; +create table d12.t1 (a int); +select round(rand()*8) into @var; +insert into d12.t1 values (@var); +create database d11; +create table d11.t1 (a int); +select round(rand()*8) into @var; +insert into d11.t1 values (@var); +create database d10; +create table d10.t1 (a int); +select round(rand()*8) into @var; +insert into d10.t1 values (@var); +create database d9; +create table d9.t1 (a int); +select round(rand()*8) into @var; +insert into d9.t1 values (@var); +create database d8; +create table d8.t1 (a int); +select round(rand()*8) into @var; +insert into d8.t1 values (@var); +create database d7; +create table d7.t1 (a int); +select round(rand()*8) into @var; +insert into d7.t1 values (@var); +create database d6; +create table d6.t1 (a int); +select round(rand()*8) into @var; +insert into d6.t1 values (@var); +create database d5; +create table d5.t1 (a int); +select round(rand()*8) into @var; +insert into d5.t1 values (@var); +create database d4; +create table d4.t1 (a int); +select round(rand()*8) into @var; +insert into d4.t1 values (@var); +create database d3; +create table d3.t1 (a int); +select round(rand()*8) into @var; +insert into d3.t1 values (@var); +create database d2; +create table d2.t1 (a int); +select round(rand()*8) into @var; +insert into d2.t1 values (@var); +create database d1; +create table d1.t1 (a int); +select round(rand()*8) into @var; +insert into d1.t1 values (@var); +include/diff_tables.inc [master:d20.t1, slave:d20.t1] +include/diff_tables.inc [master:d19.t1, slave:d19.t1] +include/diff_tables.inc [master:d18.t1, slave:d18.t1] +include/diff_tables.inc [master:d17.t1, slave:d17.t1] +include/diff_tables.inc [master:d16.t1, slave:d16.t1] +include/diff_tables.inc [master:d15.t1, slave:d15.t1] +include/diff_tables.inc [master:d14.t1, slave:d14.t1] +include/diff_tables.inc [master:d13.t1, slave:d13.t1] +include/diff_tables.inc [master:d12.t1, slave:d12.t1] +include/diff_tables.inc [master:d11.t1, slave:d11.t1] +include/diff_tables.inc [master:d10.t1, slave:d10.t1] +include/diff_tables.inc [master:d9.t1, slave:d9.t1] +include/diff_tables.inc [master:d8.t1, slave:d8.t1] +include/diff_tables.inc [master:d7.t1, slave:d7.t1] +include/diff_tables.inc [master:d6.t1, slave:d6.t1] +include/diff_tables.inc [master:d5.t1, slave:d5.t1] +include/diff_tables.inc [master:d4.t1, slave:d4.t1] +include/diff_tables.inc [master:d3.t1, slave:d3.t1] +include/diff_tables.inc [master:d2.t1, slave:d2.t1] +include/diff_tables.inc [master:d1.t1, slave:d1.t1] set @@global.mts_slave_parallel_workers= @save.mts_slave_parallel_workers; === modified file 'mysql-test/suite/rpl/r/rpl_parallel_start_stop.result' --- a/mysql-test/suite/rpl/r/rpl_parallel_start_stop.result 2010-12-27 18:54:41 +0000 +++ b/mysql-test/suite/rpl/r/rpl_parallel_start_stop.result 2011-02-21 14:38:13 +0000 @@ -60,7 +60,7 @@ Note 1726 Temporary failed transaction r include/stop_slave.inc create table t2 (a int); insert into t2 values (1); -start slave until master_log_file='master-bin.000001', master_log_pos=2311; +start slave until master_log_file='master-bin.000001', master_log_pos=MASTER_LOG_POS; Warnings: Note 1726 UNTIL condtion is not supported in Parallel Slave. Slave is started in the sequential execution mode. include/wait_for_slave_sql_to_stop.inc === modified file 'mysql-test/suite/rpl/t/rpl_parallel_ddl.test' --- a/mysql-test/suite/rpl/t/rpl_parallel_ddl.test 2011-02-19 16:26:33 +0000 +++ b/mysql-test/suite/rpl/t/rpl_parallel_ddl.test 2011-02-21 14:38:13 +0000 @@ -30,6 +30,7 @@ let $queries= `select $dbs*$tables * 8`; # D2. CREATE/DROP/ALTER/RENAME table # +--disable_query_log let $n= $dbs; while ($n) @@ -63,6 +64,7 @@ while ($n) dec $n; } + let $k= $queries; while ($k) @@ -73,18 +75,15 @@ while ($k) let $n1_2= `select floor(rand()*$dbs) + 1`; let $m= `select floor(rand()*$tables) + 1`; - if ($n1) - { - --error 0,ER_TABLE_EXISTS_ERROR - eval rename d$n_1.t$m to d$n1_1.t$m, d$n_2.t$m to d$n1_2.t$m; - --error 0,ER_TABLE_EXISTS_ERROR - eval rename d$n1_1.t$m to d$n1.t$m, d$n1_2.t$m to d$n2.t$m; - } + --error 0,ER_TABLE_EXISTS_ERROR + eval rename table d$n_1.t$m to d$n1_1.t$m, d$n_2.t$m to d$n1_2.t$m; + --error 0,ER_TABLE_EXISTS_ERROR + eval rename table d$n1_1.t$m to d$n_1.t$m, d$n1_2.t$m to d$n_2.t$m; + dec $k; } - -### sync_slave_with_master; +--enable_query_log # # D3. CREATE/DROP Stored Proc, Stored Func, Trigger, Func @@ -97,6 +96,7 @@ let $n1= $n; dec $n1; --disable_query_log + while ($n1) { let $m= $tables; @@ -125,8 +125,14 @@ while ($n1) dec $n; dec $n1; } + --enable_query_log + +# +# Run it on slave; +# + connection slave; source include/start_slave.inc; @@ -151,6 +157,64 @@ while($n) } # +# Finally, over-the-max-limit updated db:s +# + +connection master; + +# Prepare the test with dropping the triggers + +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 drop trigger `d$n1`.`trg_t$m`; + + dec $m; + } + dec $n; + dec $n1; +} + +let $n1= $dbs; +dec $n1; +let $n2= $n1; +dec $n2; +let $tables_2_rename= ; +let $m= `select floor(rand()*$tables) + 1`; + +while ($n2) +{ + let $tables_2_rename= $tables_2_rename d$n1.t$m to d$n2.t$m ,; + eval drop table d$n2.t$m; + dec $n1; + dec $n2; +} + + +let $n= $dbs; +let $n1= $n; +dec $n1; + +--disable_warnings +# The following query will leave so many warnings as many extra db pairs +eval rename table $tables_2_rename d$n.t$m to d$n1.t$m; +--enable_warnings + +--enable_query_log + + + +# # Clean-up # === modified file 'mysql-test/suite/rpl/t/rpl_parallel_fallback.test' --- a/mysql-test/suite/rpl/t/rpl_parallel_fallback.test 2010-12-27 18:54:41 +0000 +++ b/mysql-test/suite/rpl/t/rpl_parallel_fallback.test 2011-02-21 14:38:13 +0000 @@ -31,7 +31,7 @@ set @@session.binlog_format= row; create database d1; create table d1.t1 (a int auto_increment primary key) engine=innodb; -# +# (TODO: remove during refactoring) # Rows_query_log_event case # === added file 'mysql-test/suite/rpl/t/rpl_parallel_multi_db-master.opt' --- a/mysql-test/suite/rpl/t/rpl_parallel_multi_db-master.opt 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/rpl/t/rpl_parallel_multi_db-master.opt 2011-02-21 14:38:13 +0000 @@ -0,0 +1 @@ +--thread_stack=512K === added file 'mysql-test/suite/rpl/t/rpl_parallel_multi_db-slave.opt' --- a/mysql-test/suite/rpl/t/rpl_parallel_multi_db-slave.opt 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/rpl/t/rpl_parallel_multi_db-slave.opt 2011-02-21 14:38:13 +0000 @@ -0,0 +1 @@ +--thread_stack=512K === modified file 'mysql-test/suite/rpl/t/rpl_parallel_multi_db.test' --- a/mysql-test/suite/rpl/t/rpl_parallel_multi_db.test 2011-02-17 19:56:48 +0000 +++ b/mysql-test/suite/rpl/t/rpl_parallel_multi_db.test 2011-02-21 14:38:13 +0000 @@ -21,12 +21,12 @@ connection slave; source include/stop_slave.inc; set @save.mts_slave_parallel_workers= @@global.mts_slave_parallel_workers; eval set @@global.mts_slave_parallel_workers= $workers; - source include/start_slave.inc; -let $dbs= 4; + +let $dbs= 8; let $tables= 8; -let $queries= `select $dbs*$tables * 8`; +let $queries= `select $dbs*$tables * 4`; # # 1. Case of multi-update @@ -60,15 +60,36 @@ let $k= $queries; --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 $m1= `select floor(rand()*$tables + 1)`; let $n2= `select floor(rand()*$dbs + 1)`; let $m2= `select floor(rand()*$tables + 1)`; - let $n3= `select floor(rand()*$dbs + 1)`; - let $m3= `select floor(rand()*$tables + 1)`; - let $n4= `select floor(rand()*$dbs + 1)`; - let $m4= `select floor(rand()*$tables + 1)`; - eval update d$n1.t$m1 as t_1, d$n2.t$m2 as t_2, d$n3.t$m3, d$n4.t$m4 as t_3 set t_1.a=t_2.a+ round(rand(10)), t_2.a=t_3.a+ round(rand(10)), t_3.a=t_1.a+ round(rand(10)), t_3.a=t_1.a+ round(rand(10)); + +## --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 @@ -203,9 +224,101 @@ while($n) 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 + +sync_slave_with_master; # -# Clean-up +# 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 + +sync_slave_with_master; + +# +# 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; @@ -223,6 +336,7 @@ while ($n) sync_slave_with_master; + set @@global.mts_slave_parallel_workers= @save.mts_slave_parallel_workers; ### TODO: --source include/rpl_end.inc === modified file 'mysql-test/suite/rpl/t/rpl_parallel_start_stop.test' --- a/mysql-test/suite/rpl/t/rpl_parallel_start_stop.test 2010-12-27 18:54:41 +0000 +++ b/mysql-test/suite/rpl/t/rpl_parallel_start_stop.test 2011-02-21 14:38:13 +0000 @@ -244,6 +244,7 @@ let $master_log_pos= query_get_value(SHO insert into t2 values (1); connection slave; +--replace_regex /master_log_pos=[0-9]+/master_log_pos=MASTER_LOG_POS/ eval start slave until master_log_file='$master_log_file', master_log_pos=$master_log_pos; source include/wait_for_slave_sql_to_stop.inc; === modified file 'mysql-test/suite/sys_vars/r/all_vars.result' --- a/mysql-test/suite/sys_vars/r/all_vars.result 2011-02-17 19:56:48 +0000 +++ b/mysql-test/suite/sys_vars/r/all_vars.result 2011-02-21 14:38:13 +0000 @@ -12,6 +12,7 @@ There should be *no* long test name list select variable_name as `There should be *no* variables listed below:` from t2 left join t1 on variable_name=test_name where test_name is null; There should be *no* variables listed below: +MTS_SLAVE_WORKER_QUEUE_LEN_MAX INNODB_STATS_TRANSIENT_SAMPLE_PAGES MTS_PARTITION_HASH_SOFT_MAX MTS_EXP_SLAVE_LOCAL_TIMESTAMP @@ -20,6 +21,7 @@ RELAY_LOG_BASENAME LOG_BIN_BASENAME INNODB_ANALYZE_IS_PERSISTENT INNODB_PRINT_ALL_DEADLOCKS +MTS_MASTER_UPDATED_DBS_MAX INNODB_RESET_MONITOR_COUNTER MTS_SLAVE_PARALLEL_WORKERS MTS_WORKER_UNDERRUN_LEVEL @@ -27,10 +29,10 @@ INNODB_RESET_ALL_MONITOR_COUNTER LOG_BIN_INDEX INNODB_DISABLE_MONITOR_COUNTER INNODB_ENABLE_MONITOR_COUNTER -MTS_SLAVE_WORKER_QUEUE_LEN_MAX INNODB_FILE_FORMAT_MAX MTS_PENDING_JOBS_SIZE_MAX MTS_COORDINATOR_BASIC_NAP +MTS_SLAVE_WORKER_QUEUE_LEN_MAX INNODB_STATS_TRANSIENT_SAMPLE_PAGES MTS_PARTITION_HASH_SOFT_MAX MTS_EXP_SLAVE_LOCAL_TIMESTAMP @@ -39,6 +41,7 @@ RELAY_LOG_BASENAME LOG_BIN_BASENAME INNODB_ANALYZE_IS_PERSISTENT INNODB_PRINT_ALL_DEADLOCKS +MTS_MASTER_UPDATED_DBS_MAX INNODB_RESET_MONITOR_COUNTER MTS_SLAVE_PARALLEL_WORKERS MTS_WORKER_UNDERRUN_LEVEL @@ -46,7 +49,6 @@ INNODB_RESET_ALL_MONITOR_COUNTER LOG_BIN_INDEX INNODB_DISABLE_MONITOR_COUNTER INNODB_ENABLE_MONITOR_COUNTER -MTS_SLAVE_WORKER_QUEUE_LEN_MAX INNODB_FILE_FORMAT_MAX MTS_PENDING_JOBS_SIZE_MAX MTS_COORDINATOR_BASIC_NAP === modified file 'sql/binlog.cc' --- a/sql/binlog.cc 2011-02-19 16:26:33 +0000 +++ b/sql/binlog.cc 2011-02-21 14:38:13 +0000 @@ -4535,13 +4535,23 @@ THD::binlog_set_pending_rows_event(Rows_ } /** - @param db a c-string to be added sorted way to - THD::binlog_updated_db_names + @param db db name c-string to be inserted into abc-sorted + THD::binlog_updated_db_names list. */ void THD::add_to_binlog_updated_dbs(const char *db) { - char *after_db= strdup_root(mem_root, db); + char *after_db; + if (binlog_updated_db_names->elements == MAX_DBS_IN_QUERY_MTS + 1) + { + push_warning_printf(this, MYSQL_ERROR::WARN_LEVEL_WARN, + ER_UPDATED_DBS_GREATER_MAX, + ER(ER_UPDATED_DBS_GREATER_MAX), + MAX_DBS_IN_QUERY_MTS); + return; + } + + after_db= strdup_root(mem_root, db); if (binlog_updated_db_names->elements != 0) { List_iterator it(*get_binlog_updated_db_names()); @@ -4771,26 +4781,6 @@ int THD::decide_logging_format(TABLE_LIS is_write= TRUE; prev_write_table= table->table; - - if (variables.binlog_format != BINLOG_FORMAT_ROW && - lex->sql_command != SQLCOM_END /* rows-event applying by slave */) - { - /* - Master side of the STMT format events parallelization. - Write-locked table's db:s are stored in a abc-ordered name list. - The list can remain empty if the only database that - is updated is the default one. - In case the number of databases exceeds MAX_DBS_IN_QUERY_MTS - the list won't be sent to the slave either. - */ - - if (!binlog_updated_db_names) - { - binlog_updated_db_names= new List; /* thd->mem_root is used */ - } - if (binlog_updated_db_names->elements < MAX_DBS_IN_QUERY_MTS + 1) - add_to_binlog_updated_dbs(table->db); - } } flags_access_some_set |= flags; @@ -4814,6 +4804,28 @@ int THD::decide_logging_format(TABLE_LIS multi_access_engine= TRUE; prev_access_table= table->table; + + } + + /* + Master side of DML in the STMT format events parallelization. + All involving table db:s are stored in a abc-ordered name list. + In case the number of databases exceeds MAX_DBS_IN_QUERY_MTS maximum + the list gathering breaks since it won't be sent to the slave. + */ + if (is_write && variables.binlog_format != BINLOG_FORMAT_ROW && + lex->sql_command != SQLCOM_END /* rows-event applying by slave */) + { + if (!binlog_updated_db_names) + { + binlog_updated_db_names= new List; /* thd->mem_root is used */ + } + for (TABLE_LIST *table= tables; table; table= table->next_global) + { + if (table->placeholder()) + continue; + add_to_binlog_updated_dbs(table->db); + } } DBUG_PRINT("info", ("flags_write_all_set: 0x%llx", flags_write_all_set)); === modified file 'sql/log_event.cc' --- a/sql/log_event.cc 2011-02-17 19:56:48 +0000 +++ b/sql/log_event.cc 2011-02-21 14:38:13 +0000 @@ -2477,15 +2477,9 @@ Slave_worker *Log_event::get_slave_worke const_cast(rli)->curr_group_seen_begin= TRUE; return NULL; } - else - { - DBUG_ASSERT(!rli->curr_group_seen_begin); - - // Parallel single event proceeds to partiting etc ... - } } - //else // g + // g if (contains_partition_info()) { === modified file 'sql/log_event.h' --- a/sql/log_event.h 2011-02-17 19:56:48 +0000 +++ b/sql/log_event.h 2011-02-21 14:38:13 +0000 @@ -1892,7 +1892,8 @@ public: const char* get_db() { return db; } /** - Returns a default db in case of over-MAX_DBS_IN_QUERY_MTS actual db:s + Returns a list of updated db:s or the default db single item list + in case of over-MAX_DBS_IN_QUERY_MTS actual db:s. */ virtual List* mts_get_dbs() { === modified file 'sql/share/errmsg-utf8.txt' --- a/sql/share/errmsg-utf8.txt 2010-12-27 18:54:41 +0000 +++ b/sql/share/errmsg-utf8.txt 2011-02-21 14:38:13 +0000 @@ -6458,3 +6458,5 @@ ER_BINLOG_STMT_CACHE_SIZE_GREATER_THAN_M ER_NO_FEATURE_ON_PARALLEL_SLAVE eng "%s is not supported in Parallel Slave. %s" +ER_UPDATED_DBS_GREATER_MAX + eng "Modified database names number exceeds the maximum %d; the names are not written into the replication event." === modified file 'sql/sql_table.cc' --- a/sql/sql_table.cc 2011-02-19 16:26:33 +0000 +++ b/sql/sql_table.cc 2011-02-21 14:38:13 +0000 @@ -2241,8 +2241,7 @@ int mysql_rm_table_no_locks(THD *thd, TA { thd->set_binlog_updated_db_names(new List); } - if (thd->get_binlog_updated_db_names()->elements < MAX_DBS_IN_QUERY_MTS + 1) - thd->add_to_binlog_updated_dbs(table->db); + thd->add_to_binlog_updated_dbs(table->db); /* drop_temporary_table may return one of the following error codes: @@ -4571,9 +4570,6 @@ bool mysql_create_table(THD *thd, TABLE_ (thd->is_current_stmt_binlog_format_row() && !(create_info->options & HA_LEX_CREATE_TMP_TABLE)))) { - - DBUG_ASSERT(!thd->get_binlog_updated_db_names()); - thd->add_one_db_to_binlog_updated_dbs(create_table->db); result= write_bin_log(thd, TRUE, thd->query(), thd->query_length(), is_trans); } --===============1367567861== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/andrei.elkin@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: andrei.elkin@stripped # target_branch: file:///home/andrei/MySQL/BZR/2a-23May/WL/mysql-next-\ # mr-wl5569/ # testament_sha1: 06544ae394d5df138123c7ace44d4281239520c6 # timestamp: 2011-02-21 16:38:25 +0200 # source_branch: file:///home/andrei/MySQL/BZR/2a-23May/mysql-trunk/ # base_revision_id: andrei.elkin@stripped\ # graaj89ad7v88dlh # # Begin bundle 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 J2B3eEEj/F3JFOFCQWe7VAg= --===============1367567861==--