1#
2--source include/have_debug.inc
3--source include/have_binlog_format_row.inc
4--source include/master-slave.inc
5
6# BUG#11753004: 44360: REPLICATION FAILED
7
8## assert that we get an error when checking the
9## identifiers at the slave (instead of a crash or
10## different table being updated)
11
12--let $t1= t1_11753004
13--let $t2= t2_11753004
14--let $t2_ign= t2_11753004_ign
15
16## test #1: assert that we get an error raised when multiple
17##          tables in the same RBR statement are mapped with the
18##          same identifier
19
20--eval CREATE TABLE $t1 (c1 INT)
21--eval CREATE TABLE $t2 (c1 INT)
22--eval INSERT INTO $t1 VALUES (1)
23--eval INSERT INTO $t2 VALUES (2)
24
25--sync_slave_with_master
26call mtr.add_suppression(".*Found table map event mapping table id 0 which was already mapped but with different settings.*");
27
28# stop the slave and inject corruption
29--source include/stop_slave.inc
30SET @saved_debug= @@global.debug_dbug;
31SET @@global.debug_dbug="d,inject_tblmap_same_id_maps_diff_table";
32--source include/start_slave.inc
33--connection master
34# both tables get mapped to 0 (in a way, simulating scenario
35# originated by BUG#56226)
36--eval UPDATE $t1, $t2 SET $t1.c1=3, $t2.c1=4 WHERE $t1.c1=1 OR $t2.c1=2
37--connection slave
38
39# wait for error 1593 (ER_SLAVE_FATAL_ERROR)
40--let $slave_sql_errno=1593
41--source include/wait_for_slave_sql_error.inc
42--source include/stop_slave.inc
43
44# clean up
45SET @@global.debug_dbug=@saved_debug;
46--source include/start_slave.inc
47--connection master
48--source include/rpl_reset.inc
49--eval DROP TABLE $t1, $t2
50--sync_slave_with_master
51
52## test #2: assert that ignored tables that may have been mapped
53##          with the same identifier are skipped, thus no error
54##          is raised.
55
56--connection slave
57--source include/stop_slave.inc
58SET @@global.debug_dbug="d,inject_tblmap_same_id_maps_diff_table";
59--source include/start_slave.inc
60--source include/rpl_reset.inc
61--connection master
62--eval CREATE TABLE $t1 (c1 INT)
63--eval CREATE TABLE $t2_ign (c1 INT)
64--eval INSERT INTO $t1 VALUES (1)
65--eval INSERT INTO $t2_ign VALUES (2)
66--eval UPDATE $t1, $t2_ign SET $t1.c1=3, $t2_ign.c1=4 WHERE $t1.c1=1 OR $t2_ign.c1=2
67
68# must not raise error as second table is filtered
69--sync_slave_with_master
70
71
72## test #3: check that BINLOG statements will also raise an
73##          error if containing table map events mapping different
74##          tables to same table identifier.
75
76CREATE TABLE t1 (c1 INT);
77CREATE TABLE t2 (c1 INT);
78
79INSERT INTO t1 VALUES (1);
80INSERT INTO t2 VALUES (1);
81
82# FD event
83BINLOG '
84SOgWTg8BAAAAbgAAAHIAAAAAAAQANS42LjMtbTUtZGVidWctbG9nAAAAAAAAAAAAAAAAAAAAAAAA
85AAAAAAAAAAAAAAAAAABI6BZOEzgNAAgAEgAEBAQEEgAAVgAEGggAAAAICAgCAAAAAAVAYI8=
86'/*!*/;
87
88#110708 12:21:44 server id 1  end_log_pos 774   Table_map: `test`.`t1` mapped to number 66
89# at 774
90#110708 12:21:44 server id 1  end_log_pos 815   Table_map: `test`.`t2` mapped to number 67
91# at 815
92#110708 12:21:44 server id 1  end_log_pos 855   Update_rows: table id 66
93# at 855
94#110708 12:21:44 server id 1  end_log_pos 895   Update_rows: table id 67 flags: STMT_END_F
95SET @@global.debug_dbug="d,inject_tblmap_same_id_maps_diff_table";
96--error ER_SLAVE_FATAL_ERROR
97BINLOG '
98SOgWThMBAAAAKQAAAAYDAAAAAEIAAAAAAAEABHRlc3QAAnQxAAEDAAE=
99SOgWThMBAAAAKQAAAC8DAAAAAEMAAAAAAAEABHRlc3QAAnQyAAEDAAE=
100SOgWThgBAAAAKAAAAFcDAAAAAEIAAAAAAAAAAf///gEAAAD+AwAAAA==
101SOgWThgBAAAAKAAAAH8DAAAAAEMAAAAAAAEAAf///gEAAAD+BAAAAA==
102'/*!*/;
103
104
105# clean up
106DROP TABLE t1,t2;
107--connection slave
108SET @@global.debug_dbug=@saved_debug;
109--connection master
110--eval DROP TABLE $t1
111--eval DROP TABLE $t2_ign
112--sync_slave_with_master
113SET @@global.debug_dbug= @save_debug;
114
115--source include/rpl_end.inc
116