From: Andrei Elkin Date: June 17 2011 3:34pm Subject: bzr push into mysql-next-mr-wl5569 branch (andrei.elkin:3302 to 3303) WL#5569 List-Archive: http://lists.mysql.com/commits/139426 Message-Id: <201106171534.p5HFYdAl008101@mysql1000.dsl.inet.fi> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0252536558==" --===============0252536558== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline 3303 Andrei Elkin 2011-06-17 wl#5569 MTS fixing tests. @ mysql-test/extra/rpl_tests/rpl_parallel_benchmark_load.test making aux file names unique to please mtr, pb. @ mysql-test/extra/rpl_tests/rpl_parallel_load_innodb.test making aux file names unique to please mtr, pb. @ mysql-test/suite/rpl/r/rpl_filter_tables_not_exist.result MTS-suppression is added. @ mysql-test/suite/rpl/r/rpl_mixed_binlog_max_cache_size.result MTS-suppression is added. @ mysql-test/suite/rpl/r/rpl_parallel_benchmark.result making aux file names unique to please mtr, pb. @ mysql-test/suite/rpl/r/rpl_parallel_innodb.result making aux file names unique to please mtr, pb. @ mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result MTS-suppression is added. @ mysql-test/suite/rpl/r/rpl_typeconv.result MTS-suppression is added. @ mysql-test/suite/rpl/t/rpl_filter_tables_not_exist.test MTS-suppression is added. @ mysql-test/suite/rpl/t/rpl_parallel_benchmark-slave.opt cleanup. @ mysql-test/suite/rpl/t/rpl_typeconv.test MTS-suppression is added. @ mysql-test/suite/sys_vars/r/slave_parallel_workers_basic.result results updated. @ sql/sql_class.h Cleanup to remove early debug-related options. @ sql/sys_vars.cc Fixating slave_parallel_workers' max as 1024. Cleanup to remove early debug-related options. modified: mysql-test/extra/rpl_tests/rpl_parallel_benchmark_load.test mysql-test/extra/rpl_tests/rpl_parallel_load_innodb.test mysql-test/suite/rpl/r/rpl_filter_tables_not_exist.result mysql-test/suite/rpl/r/rpl_mixed_binlog_max_cache_size.result mysql-test/suite/rpl/r/rpl_parallel_benchmark.result mysql-test/suite/rpl/r/rpl_parallel_innodb.result mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result mysql-test/suite/rpl/r/rpl_typeconv.result mysql-test/suite/rpl/t/rpl_filter_tables_not_exist.test mysql-test/suite/rpl/t/rpl_parallel_benchmark-slave.opt mysql-test/suite/rpl/t/rpl_typeconv.test mysql-test/suite/sys_vars/r/slave_parallel_workers_basic.result sql/sql_class.h sql/sys_vars.cc 3302 Andrei Elkin 2011-06-17 wl#5569 MTS fixing rpl_row_basic_3innodb similarly to the previous patch. @ mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result a suppression is added. modified: mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result === modified file 'mysql-test/extra/rpl_tests/rpl_parallel_benchmark_load.test' --- a/mysql-test/extra/rpl_tests/rpl_parallel_benchmark_load.test 2011-06-15 17:12:11 +0000 +++ b/mysql-test/extra/rpl_tests/rpl_parallel_benchmark_load.test 2011-06-17 15:34:16 +0000 @@ -265,22 +265,22 @@ let $wait_timeout= 600; let $wait_condition= SELECT count(*)+sleep(1) = 5 FROM test1.benchmark; source include/wait_condition.inc; - -let $MYSQLD_DATADIR= `select @@datadir`; - # cleanup for files that could not be removed in the end of previous invocation. +let $MYSQLD_DATADIR= `select @@datadir`; --remove_files_wildcard $MYSQLD_DATADIR *.out use test; ---replace_result $MYSQLD_DATADIR MYSQLD_DATADIR -eval select * from test1.benchmark into outfile '$MYSQLD_DATADIR/benchmark.out'; +let $benchmark_file= `select replace(concat("benchmark_",uuid(),".out"),"-","_")`; +--replace_regex /benchmark_.*.out/benchmark.out/ +eval select * from test1.benchmark into outfile '$benchmark_file'; select ts from test1.benchmark where state like 'master started load' into @m_0; select ts from test1.benchmark where state like 'master ends load' into @m_1; select ts from test1.benchmark where state like 'slave takes on load' into @s_0; select ts from test1.benchmark where state like 'slave ends load' into @s_1; ---replace_result $MYSQLD_DATADIR MYSQLD_DATADIR +let $delta_file= `select replace(concat("delta_",uuid(),".out"),"-","_")`; +--replace_regex /delta_.*.out/delta.out/ eval select time_to_sec(@m_1) - time_to_sec(@m_0) as 'delta_m', - time_to_sec(@s_1) - time_to_sec(@s_0) as 'delta_s' into outfile '$MYSQLD_DATADIR/delta.out'; + time_to_sec(@s_1) - time_to_sec(@s_0) as 'delta_s' into outfile '$delta_file'; --enable_result_log --enable_query_log === modified file 'mysql-test/extra/rpl_tests/rpl_parallel_load_innodb.test' --- a/mysql-test/extra/rpl_tests/rpl_parallel_load_innodb.test 2011-06-15 17:12:11 +0000 +++ b/mysql-test/extra/rpl_tests/rpl_parallel_load_innodb.test 2011-06-17 15:34:16 +0000 @@ -277,8 +277,14 @@ source include/wait_condition.inc; use test0; insert into benchmark set state='slave ends load'; +# cleanup for files that could not be removed in the end of previous invocation. +let $MYSQLD_DATADIR= `select @@datadir`; +--remove_files_wildcard $MYSQLD_DATADIR *.out + use test; -select * from test0.benchmark into outfile 'benchmark.out'; +let $benchmark_file= `select replace(concat("benchmark_",uuid(),".out"),"-","_")`; +--replace_regex /benchmark_.*.out/benchmark.out/ +eval select * from test1.benchmark into outfile '$benchmark_file'; select ts from test0.benchmark where state like 'master started load' into @m_0; select ts from test0.benchmark where state like 'master ends load' into @m_1; select ts from test0.benchmark where state like 'slave takes on load' into @s_m0; @@ -286,9 +292,11 @@ select ts from test0.benchmark where sta select ts from test0.benchmark where state like 'slave ends load' into @s_1; select ts from test0.benchmark where state like 'slave is processing load' into @s_0; -select time_to_sec(@m_1) - time_to_sec(@m_0) as 'delta_m', +let $delta_file= `select replace(concat("delta_",uuid(),".out"),"-","_")`; +--replace_regex /delta_.*.out/delta.out/ +eval select time_to_sec(@m_1) - time_to_sec(@m_0) as 'delta_m', time_to_sec(@s_1) - time_to_sec(@s_0) as 'delta_s', - time_to_sec(@s_m1) - time_to_sec(@s_m0) as 'delta_sm' into outfile 'delta.out'; + time_to_sec(@s_m1) - time_to_sec(@s_m0) as 'delta_sm' into outfile '$delta_file'; let $i = $databases + 1; === modified file 'mysql-test/suite/rpl/r/rpl_filter_tables_not_exist.result' --- a/mysql-test/suite/rpl/r/rpl_filter_tables_not_exist.result 2011-02-23 09:31:37 +0000 +++ b/mysql-test/suite/rpl/r/rpl_filter_tables_not_exist.result 2011-06-17 15:34:16 +0000 @@ -43,6 +43,7 @@ UPDATE t4 LEFT JOIN (t1, t6, t7) ON (t4. UPDATE t7 LEFT JOIN (t4, t1, t2) ON (t7.id=t4.id and t7.id=t1.id and t7.id=t2.id) SET a=0, b=0, d=0, g=0 where t7.id=1; UPDATE t7 LEFT JOIN (t8, t4, t1) ON (t7.id=t8.id and t7.id=t4.id and t7.id=t1.id) SET a=0, d=0, g=0, h=0 where t7.id=1; call mtr.add_suppression("Slave SQL.*Error .Table .test.t[47]. doesn.t exist. on query.* Error_code: 1146"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); UPDATE t1 LEFT JOIN t4 ON (t1.id=t4.id) SET a=0 where t1.id=1; include/wait_for_slave_sql_error_and_skip.inc [errno=1146] Last_SQL_Error = 'Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN t4 ON (t1.id=t4.id) SET a=0 where t1.id=1'' === modified file 'mysql-test/suite/rpl/r/rpl_mixed_binlog_max_cache_size.result' --- a/mysql-test/suite/rpl/r/rpl_mixed_binlog_max_cache_size.result 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/r/rpl_mixed_binlog_max_cache_size.result 2011-06-17 15:34:16 +0000 @@ -141,6 +141,7 @@ CALL mtr.add_suppression("Multi-statemen CALL mtr.add_suppression("Multi-statement transaction required more than 'max_binlog_stmt_cache_size' bytes of storage.*"); CALL mtr.add_suppression("Writing one row to the row-based binary log failed.*"); CALL mtr.add_suppression("Slave SQL.*The incident LOST_EVENTS occured on the master. Message: error writing to the binary log"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); TRUNCATE t1; SET GLOBAL max_binlog_cache_size= ORIGINAL_VALUE; SET GLOBAL binlog_cache_size= ORIGINAL_VALUE; === modified file 'mysql-test/suite/rpl/r/rpl_parallel_benchmark.result' --- a/mysql-test/suite/rpl/r/rpl_parallel_benchmark.result 2011-06-15 17:12:11 +0000 +++ b/mysql-test/suite/rpl/r/rpl_parallel_benchmark.result 2011-06-17 15:34:16 +0000 @@ -6,11 +6,10 @@ include/stop_slave.inc start slave; stop slave sql_thread; use test; -select * from test1.benchmark into outfile 'MYSQLD_DATADIR/benchmark.out'; +select * from test1.benchmark into outfile 'benchmark.out'; select ts from test1.benchmark where state like 'master started load' into @m_0; select ts from test1.benchmark where state like 'master ends load' into @m_1; select ts from test1.benchmark where state like 'slave takes on load' into @s_0; select ts from test1.benchmark where state like 'slave ends load' into @s_1; -select time_to_sec(@m_1) - time_to_sec(@m_0) as 'delta_m', -time_to_sec(@s_1) - time_to_sec(@s_0) as 'delta_s' into outfile 'MYSQLD_DATADIR/delta.out'; +select time_to_sec(@m_1) - time_to_sec(@m_0) as 'delta.out'; include/rpl_end.inc === modified file 'mysql-test/suite/rpl/r/rpl_parallel_innodb.result' --- a/mysql-test/suite/rpl/r/rpl_parallel_innodb.result 2011-06-15 17:12:11 +0000 +++ b/mysql-test/suite/rpl/r/rpl_parallel_innodb.result 2011-06-17 15:34:16 +0000 @@ -7,16 +7,14 @@ stop slave sql_thread; use test0; insert into benchmark set state='slave ends load'; use test; -select * from test0.benchmark into outfile 'benchmark.out'; +select * from test1.benchmark into outfile 'benchmark.out'; select ts from test0.benchmark where state like 'master started load' into @m_0; select ts from test0.benchmark where state like 'master ends load' into @m_1; select ts from test0.benchmark where state like 'slave takes on load' into @s_m0; select ts from test0.benchmark where state like 'slave is supposed to finish with load' into @s_m1; select ts from test0.benchmark where state like 'slave ends load' into @s_1; select ts from test0.benchmark where state like 'slave is processing load' into @s_0; -select time_to_sec(@m_1) - time_to_sec(@m_0) as 'delta_m', -time_to_sec(@s_1) - time_to_sec(@s_0) as 'delta_s', -time_to_sec(@s_m1) - time_to_sec(@s_m0) as 'delta_sm' into outfile 'delta.out'; +select time_to_sec(@m_1) - time_to_sec(@m_0) as 'delta.out'; include/diff_tables.inc [master:test15.v_ti_nk, slave:test15.v_ti_nk] include/diff_tables.inc [master:test15.v_ti_wk, slave:test15.v_ti_wk] include/diff_tables.inc [master:test14.v_ti_nk, slave:test14.v_ti_nk] === modified file 'mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result' --- a/mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result 2011-02-23 20:01:27 +0000 +++ b/mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result 2011-06-17 15:34:16 +0000 @@ -141,6 +141,7 @@ CALL mtr.add_suppression("Multi-statemen CALL mtr.add_suppression("Multi-statement transaction required more than 'max_binlog_stmt_cache_size' bytes of storage.*"); CALL mtr.add_suppression("Writing one row to the row-based binary log failed.*"); CALL mtr.add_suppression("Slave SQL.*The incident LOST_EVENTS occured on the master. Message: error writing to the binary log"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); TRUNCATE t1; SET GLOBAL max_binlog_cache_size= ORIGINAL_VALUE; SET GLOBAL binlog_cache_size= ORIGINAL_VALUE; === modified file 'mysql-test/suite/rpl/r/rpl_typeconv.result' --- a/mysql-test/suite/rpl/r/rpl_typeconv.result 2011-05-11 07:49:23 +0000 +++ b/mysql-test/suite/rpl/r/rpl_typeconv.result 2011-06-17 15:34:16 +0000 @@ -535,6 +535,7 @@ BIT(5) BIT(12) ALL_LOSS BIT(12) BIT(5) ALL_LOSSY,ALL_NON_LOSSY DROP TABLE type_conversions; call mtr.add_suppression("Slave SQL.*Column 1 of table .test.t1. cannot be converted from type.* Error_code: 1677"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); DROP TABLE t1; set global slave_type_conversions = @saved_slave_type_conversions; include/rpl_end.inc === modified file 'mysql-test/suite/rpl/t/rpl_filter_tables_not_exist.test' --- a/mysql-test/suite/rpl/t/rpl_filter_tables_not_exist.test 2011-02-23 09:31:37 +0000 +++ b/mysql-test/suite/rpl/t/rpl_filter_tables_not_exist.test 2011-06-17 15:34:16 +0000 @@ -124,6 +124,7 @@ UPDATE t7 LEFT JOIN (t8, t4, t1) ON (t7. sync_slave_with_master; connection slave; call mtr.add_suppression("Slave SQL.*Error .Table .test.t[47]. doesn.t exist. on query.* Error_code: 1146"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); connection master; # Parameters for include/wait_for_slave_sql_error_and_skip.inc: === modified file 'mysql-test/suite/rpl/t/rpl_parallel_benchmark-slave.opt' --- a/mysql-test/suite/rpl/t/rpl_parallel_benchmark-slave.opt 2011-06-17 10:51:59 +0000 +++ b/mysql-test/suite/rpl/t/rpl_parallel_benchmark-slave.opt 2011-06-17 15:34:16 +0000 @@ -1,3 +1 @@ --log-warnings=0 --slave-transaction-retries=0 - - === modified file 'mysql-test/suite/rpl/t/rpl_typeconv.test' --- a/mysql-test/suite/rpl/t/rpl_typeconv.test 2011-05-11 07:49:23 +0000 +++ b/mysql-test/suite/rpl/t/rpl_typeconv.test 2011-06-17 15:34:16 +0000 @@ -62,6 +62,7 @@ enable_query_log; DROP TABLE type_conversions; call mtr.add_suppression("Slave SQL.*Column 1 of table .test.t1. cannot be converted from type.* Error_code: 1677"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); connection master; DROP TABLE t1; === modified file 'mysql-test/suite/sys_vars/r/slave_parallel_workers_basic.result' --- a/mysql-test/suite/sys_vars/r/slave_parallel_workers_basic.result 2011-06-16 08:29:53 +0000 +++ b/mysql-test/suite/sys_vars/r/slave_parallel_workers_basic.result 2011-06-17 15:34:16 +0000 @@ -25,5 +25,5 @@ Warnings: Warning 1292 Truncated incorrect slave_parallel_workers value: '18446744073709551615' select @@global.slave_parallel_workers; @@global.slave_parallel_workers -4294967295 +1024 set @@global.slave_parallel_workers= @save.slave_parallel_workers; === modified file 'sql/sql_class.h' --- a/sql/sql_class.h 2011-06-12 19:05:05 +0000 +++ b/sql/sql_class.h 2011-06-17 15:34:16 +0000 @@ -58,7 +58,6 @@ enum enum_delay_key_write { DELAY_KEY_WR DELAY_KEY_WRITE_ALL }; enum enum_slave_exec_mode { SLAVE_EXEC_MODE_STRICT, SLAVE_EXEC_MODE_IDEMPOTENT, - SLAVE_EXEC_MODE_LOCAL_TIMESTAMP, SLAVE_EXEC_MODE_LAST_BIT }; enum enum_slave_type_conversions { SLAVE_TYPE_CONVERSIONS_ALL_LOSSY, SLAVE_TYPE_CONVERSIONS_ALL_NON_LOSSY}; === modified file 'sql/sys_vars.cc' --- a/sql/sys_vars.cc 2011-06-16 16:46:22 +0000 +++ b/sql/sys_vars.cc 2011-06-17 15:34:16 +0000 @@ -2085,7 +2085,7 @@ static Sys_var_mybool Sys_slave_compress #ifdef HAVE_REPLICATION static const char *slave_exec_mode_names[]= - {"STRICT", "IDEMPOTENT", "PARALLEL", "LOCAL_TIMESTAMP", 0}; + {"STRICT", "IDEMPOTENT", 0}; static Sys_var_enum Slave_exec_mode( "slave_exec_mode", "Modes for how replication events should be executed. Legal values " @@ -3353,7 +3353,7 @@ static Sys_var_ulong Sys_slave_parallel_ "slave_parallel_workers", "Number of worker threads for executing events in parallel ", GLOBAL_VAR(opt_mts_slave_parallel_workers), CMD_LINE(REQUIRED_ARG), - VALID_RANGE(0, UINT_MAX), DEFAULT(0), BLOCK_SIZE(1)); + VALID_RANGE(0, 1024), DEFAULT(0), BLOCK_SIZE(1)); static Sys_var_ulonglong Sys_mts_pending_jobs_size_max( "slave_pending_jobs_size_max", --===============0252536558== 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: c287243a59d59203bda64804ca89757acac5f19f # timestamp: 2011-06-17 18:34:39 +0300 # source_branch: file:///home/andrei/MySQL/BZR/2a-23May/mysql-trunk/ # base_revision_id: andrei.elkin@stripped\ # v6uzg0jwcu2em7t6 # # Begin bundle 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 --===============0252536558==--