• unknown's avatar
    Merge romeo.(none):/home/bkroot/mysql-5.1-new-rpl · 2c86b5ad
    unknown authored
    into  romeo.(none):/home/bk/w3464-mysql-5.1-new-rpl
    
    
    client/Makefile.am:
      Auto merged
    sql/Makefile.am:
      Auto merged
    sql/log_event.cc:
      Auto merged
    sql/log_event.h:
      Auto merged
    sql/rpl_injector.h:
      Auto merged
    sql/sql_parse.cc:
      Auto merged
    mysql-test/r/ctype_cp932_binlog_stm.result:
      Manual merge
      ,
    mysql-test/r/flush_block_commit_notembedded.result:
      Manual merge
    mysql-test/r/rpl_000015.result:
      Manual merge
    mysql-test/r/rpl_change_master.result:
      Manual merge
    mysql-test/r/rpl_deadlock_innodb.result:
      Manual merge
    mysql-test/r/rpl_flushlog_loop.result:
      Manual merge
      ,
    mysql-test/r/rpl_loaddata.result:
      manual merge
    mysql-test/r/rpl_loaddata_s.result:
      manual merge
      ,
    mysql-test/r/rpl_log_pos.result:
      manual merge
    mysql-test/r/rpl_ndb_charset.result:
      manual merge
    mysql-test/r/rpl_ndb_log.result:
      manual merge
      ,
    mysql-test/r/rpl_ndb_multi.result:
      manual merge
    mysql-test/r/rpl_rbr_to_sbr.result:
      manual merge
    mysql-test/r/rpl_rotate_logs.result:
      Manual merge
    mysql-test/r/rpl_row_basic_11bugs.result:
      Manual merge
    mysql-test/r/rpl_row_charset.result:
      Manual merge
    mysql-test/r/rpl_row_create_table.result:
      Manual merge
    mysql-test/r/rpl_row_delayed_ins.result:
      Manual merge
    mysql-test/r/rpl_row_drop.result:
      Manual merge
    mysql-test/r/rpl_row_flsh_tbls.result:
      Manual merge
    mysql-test/r/rpl_row_inexist_tbl.result:
      Manual merge
    mysql-test/r/rpl_row_log.result:
      Manual merge
    mysql-test/r/rpl_row_log_innodb.result:
      Manual merge
    mysql-test/r/rpl_row_max_relay_size.result:
      Manual merge
    mysql-test/r/rpl_row_reset_slave.result:
      Manual merge
    mysql-test/r/rpl_row_until.result:
      Manual merge
    mysql-test/r/rpl_server_id1.result:
      Manual merge
    mysql-test/r/rpl_server_id2.result:
      Manual merge
    mysql-test/r/rpl_sp.result:
      Manual merge
    mysql-test/r/rpl_stm_charset.result:
      Manual merge
    mysql-test/r/rpl_stm_flsh_tbls.result:
      Manual merge
    mysql-test/r/rpl_stm_log.result:
      Manual merge
    mysql-test/r/rpl_stm_max_relay_size.result:
      Manual merge
    mysql-test/r/rpl_stm_multi_query.result:
      Manual merge
    mysql-test/r/rpl_stm_reset_slave.result:
      Manual merge
    mysql-test/r/rpl_stm_until.result:
      Manual merge
    mysql-test/r/rpl_switch_stm_row_mixed.result:
      Manual merge
    mysql-test/r/rpl_truncate_2myisam.result:
      Manual merge
    mysql-test/r/rpl_truncate_3innodb.result:
      Manual merge
    mysql-test/r/rpl_truncate_7ndb.result:
      Manual merge
    mysql-test/r/user_var-binlog.result:
      Manual merge
    mysql-test/t/binlog_row_mix_innodb_myisam.test:
      Manual merge
    mysql-test/extra/binlog_tests/binlog.test:
      Binlog position change.
    mysql-test/extra/binlog_tests/binlog_insert_delayed.test:
      Binlog position change.
    mysql-test/extra/binlog_tests/ctype_cp932_binlog.test:
      Binlog position change.
    mysql-test/extra/binlog_tests/ctype_ucs_binlog.test:
      Binlog position change.
    mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test:
      Binlog position change.
    mysql-test/extra/rpl_tests/rpl_deadlock.test:
      Binlog position change.
    mysql-test/extra/rpl_tests/rpl_log.test:
      Binlog position change.
    mysql-test/extra/rpl_tests/rpl_multi_query.test:
      Binlog position change.
    mysql-test/extra/rpl_tests/rpl_row_charset.test:
      Binlog position change.
    mysql-test/extra/rpl_tests/rpl_stm_charset.test:
      Binlog position change.
    mysql-test/include/show_binlog_events.inc:
      Binlog position change.
    mysql-test/r/binlog_row_binlog.result:
      Result change
    mysql-test/r/binlog_row_ctype_ucs.result:
      Result change
    mysql-test/r/binlog_row_insert_select.result:
      Result change
    mysql-test/r/binlog_row_mix_innodb_myisam.result:
      Result change
    mysql-test/r/binlog_stm_binlog.result:
      Result change
    mysql-test/r/binlog_stm_ctype_ucs.result:
      Result change
    mysql-test/r/binlog_stm_insert_select.result:
      Result change
    mysql-test/r/binlog_stm_mix_innodb_myisam.result:
      Result change
    mysql-test/r/ctype_cp932_binlog_row.result:
      Result change
    mysql-test/t/binlog_stm_mix_innodb_myisam.test:
      Binlog position change.
    mysql-test/t/ctype_cp932_binlog_stm.test:
      Binlog position change.
    mysql-test/t/mysqlbinlog.test:
      Binlog position change.
    mysql-test/t/mysqlbinlog2.test:
      Binlog position change.
    mysql-test/t/rpl_loaddata_s.test:
      Binlog position change.
    mysql-test/t/rpl_log_pos.test:
      Binlog position change.
    mysql-test/t/rpl_row_basic_11bugs.test:
      Binlog position change.
    mysql-test/t/rpl_row_create_table.test:
      Binlog position change.
    mysql-test/t/rpl_row_flsh_tbls.test:
      Binlog position change.
    mysql-test/t/rpl_row_mysqlbinlog.test:
      Binlog position change.
    mysql-test/t/rpl_sp.test:
      Binlog position change.
    mysql-test/t/rpl_stm_flsh_tbls.test:
      Binlog position change.
    mysql-test/t/rpl_switch_stm_row_mixed.test:
      Binlog position change.
    mysql-test/t/user_var-binlog.test:
      Binlog position change.
    sql/share/errmsg.txt:
      Merging error messages
    2c86b5ad
rpl_deadlock.test 3.82 KB
# See if slave restarts the transaction after failing on an InnoDB deadlock error.

# Note: testing what happens when too many retries is possible, but
# needs large waits when running with --debug, so we don't do it.
# The same way, this test may not test what is expected when run
# under Valgrind, timings are too short then (with --valgrind I
# (Guilhem) have seen the test manage to provoke lock wait timeout
# error but not deadlock error; that is ok as code deals with the two
# errors in exactly the same way.
# We don't 'show status like 'slave_retried_transactions'' because this
# is not repeatable (depends on sleeps).

-- source include/master-slave.inc

connection master;
eval CREATE TABLE t1 (a INT NOT NULL, KEY(a)) ENGINE=$engine_type;
eval CREATE TABLE t2 (a INT NOT NULL, KEY(a)) ENGINE=$engine_type;
# requiring 'unique' for the timeout part of the test
eval CREATE TABLE t3 (a INT  UNIQUE) ENGINE=$engine_type;
eval CREATE TABLE t4 (a INT) ENGINE=$engine_type;
show variables like 'slave_transaction_retries';
sync_slave_with_master;

show create table t1;
show create table t2;
show variables like 'slave_transaction_retries';
stop slave;

# 1) Test deadlock

connection master;
begin;
# Let's keep BEGIN and the locked statement in two different relay logs.
insert into t2 values (0); # t2,t1 actors of deadlock in repl-ed ta
#insert into t3 select * from t2 for update;
let $1=10;
disable_query_log;
while ($1)
{
 eval insert into t3 values( $1 );
 dec $1;
}
enable_query_log;
insert into t1 values(1);
commit;
save_master_pos;

connection slave;
begin;
# Let's make our transaction large so that it's repl-ed msta that's victim
let $1=100;
disable_query_log;
while ($1)
{
 eval insert into t4 values( $1 );
 dec $1;
}
enable_query_log;
select * from t1 for update; # t1,t2 on local slave's
start slave;

# bad option, todo: replicate a non-transactional t_sync with the transaction
# and use wait_until_rows_count macro below
--real_sleep 3 # hope that slave is blocked now
#let $count=11;
#let $table=t_sync;
#--include wait_until_rows_count.inc

select * from t2 for update /* dl */; # provoke deadlock, repl-ed should be victim
commit;
sync_with_master;
select * from t1; # check that repl-ed succeeded finally
select * from t2 /* must be 1 */;
# check that no error is reported
--replace_column 1 # 7 # 8 # 9 # 16 # 22 # 23 # 33 #
--replace_result $MASTER_MYPORT MASTER_MYPORT
--vertical_results
show slave status;
--horizontal_results

# 2) Test lock wait timeout

stop slave;
delete from t3;
change master to master_log_pos=548; # the BEGIN log event
begin;
select * from t2 for update; # hold lock
start slave;
--real_sleep 10 # repl-ed should have blocked, and be retrying
select count(*) from t3  /* must be zero */; # replaying begins after rollback
commit;
sync_with_master;
select * from t1; # check that repl-ed succeeded finally
select * from t2;
# check that no error is reported
--replace_column 1 # 7 # 8 # 9 # 11 # 16 # 22 # 23 # 33 #
--replace_result $MASTER_MYPORT MASTER_MYPORT
--vertical_results
show slave status;
--horizontal_results

# Now we repeat 2), but with BEGIN in the same relay log as
# COMMIT (to see if seeking into hot log is ok).
set @my_max_relay_log_size= @@global.max_relay_log_size;
set global max_relay_log_size=0;

# This is really copy-paste of 2) of above
stop slave;
delete from t3;
change master to master_log_pos=548;
begin;
select * from t2 for update;
start slave;
--real_sleep 10
select count(*) from t3  /* must be zero */; # replaying begins after rollback
commit;
sync_with_master;
select * from t1;
select * from t2;
--replace_column 1 # 7 # 8 # 9 # 11 # 16 # 22 # 23 # 33 #
--replace_result $MASTER_MYPORT MASTER_MYPORT
--vertical_results
show slave status;
--horizontal_results

connection master;
drop table t1,t2,t3,t4;
sync_slave_with_master;
set global max_relay_log_size= @my_max_relay_log_size;

--echo End of 5.1 tests