diff options
-rw-r--r-- | mysql-test/extra/binlog_tests/binlog_insert_delayed.test | 32 | ||||
-rw-r--r-- | mysql-test/include/wait_until_rows_count.inc | 52 | ||||
-rw-r--r-- | mysql-test/r/binlog_row_binlog.result | 1 |
3 files changed, 74 insertions, 11 deletions
diff --git a/mysql-test/extra/binlog_tests/binlog_insert_delayed.test b/mysql-test/extra/binlog_tests/binlog_insert_delayed.test index 6f504fded96..29c2c477960 100644 --- a/mysql-test/extra/binlog_tests/binlog_insert_delayed.test +++ b/mysql-test/extra/binlog_tests/binlog_insert_delayed.test @@ -4,23 +4,33 @@ create table t1 (a int not null auto_increment, primary key (a)) engine=myisam; set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1; # Verify that only one INSERT_ID event is binlogged. # Note, that because of WL#3368 mixed mode binlog records RBR events for the delayed +let $table=t1; +let $rows_inserted=11; # total number of inserted rows in this test insert delayed into t1 values (207); +let $count=1; -# We use sleeps between statements, that's the only way to get a -# repeatable binlog in a normal test run and under Valgrind. The -# reason is that without sleeps, rows of different INSERT DELAYEDs -# sometimes group together and sometimes not, so the table may be -# unlocked/relocked causing a different number of table map log -# events. -sleep 2; +# use this macro instead of sleeps. + +--source include/wait_until_rows_count.inc insert delayed into t1 values (null); -sleep 2; +inc $count; +--source include/wait_until_rows_count.inc + insert delayed into t1 values (300); -sleep 2; # time for the delayed queries to reach disk +inc $count; +--source include/wait_until_rows_count.inc + insert delayed into t1 values (null),(null),(null),(null); -sleep 2; +inc $count; inc $count; inc $count; inc $count; +--source include/wait_until_rows_count.inc + insert delayed into t1 values (null),(null),(400),(null); -sleep 2; +inc $count; inc $count; inc $count; inc $count; +--source include/wait_until_rows_count.inc + +#check this assertion about $count calculation +--echo $count == $rows_inserted + select * from t1; --replace_column 2 # 5 # --replace_regex /table_id: [0-9]+/table_id: #/ diff --git a/mysql-test/include/wait_until_rows_count.inc b/mysql-test/include/wait_until_rows_count.inc new file mode 100644 index 00000000000..cf2a21d335a --- /dev/null +++ b/mysql-test/include/wait_until_rows_count.inc @@ -0,0 +1,52 @@ +# include/wait_until_rows_count.inc +# inspired by wait_for_slave_status by Matthias Leich +# +# SUMMARY +# +# Waits until SELECT count(*)-$count from $table returns zero +# +# USAGE +# +# Set vars like +# let $count=11; +# let $table=t1; +# # invoke the macro +# --include wait_until_rows_count.inc +# +# EXAMPLE +# extra/binlog/binlog_insert_delayed.test +# +# +# TODO: generalize up to wait_[until|while] with arbitrary select or even query and +# a condition to wait or get awakened +# It's impossible to implement such a "most" general macro without +# extending mysqltest. Just no way to pass a query as an argument and +# evaluate it here, like eval "$quuery". One is bound +# to specify it inside of the macro + +--disable_query_log + +let $wait_counter= 300; # max wait in 0.1 seconds +while ($wait_counter) +{ + eval select count(*)-$count from $table into @rez; + let $rez=`select @rez`; + let $success=`SELECT @rez = 0`; + let $no_success=1; + if ($success) + { + let $wait_counter= 1; # droppping counter to leave loop + let $no_success=0; + } + if ($no_success) + { + --sleep 0.1 + } + dec $wait_counter; +} + +--enable_query_log +if ($no_success) +{ + --die Timeout in wait_until_rows_count.inc, required table never had a prescribed number of rows. +} diff --git a/mysql-test/r/binlog_row_binlog.result b/mysql-test/r/binlog_row_binlog.result index 8d5025f7602..5eef5d9cbf3 100644 --- a/mysql-test/r/binlog_row_binlog.result +++ b/mysql-test/r/binlog_row_binlog.result @@ -252,6 +252,7 @@ insert delayed into t1 values (null); insert delayed into t1 values (300); insert delayed into t1 values (null),(null),(null),(null); insert delayed into t1 values (null),(null),(400),(null); +11 == 11 select * from t1; a 207 |