Commit 88b109d9 authored by unknown's avatar unknown

Fixed BUG#18948 "Disabled test case rpl_row_inexist_tbl".

 The bug was caused by ignoring failure when opening a
 a table in Table_map_log_event::exec_event().


mysql-test/r/rpl_row_inexist_tbl.result:
  Fixed test case result.
mysql-test/t/disabled.def:
  Enabled rpl_row_inexist_table test.
mysql-test/t/rpl_row_inexist_tbl.test:
  Extended test case with "replicate-ignore-table" t2.
sql/log_event.cc:
  Table_map_log_event::exec_event(): Remove code which ignores
   opening table failure. Previously, this code was needed
   because of extraneous table maps in the binary log. Currently,
   for any table that should be replicated to slave, a filter is
   needed (bug#18948).
parent 64d09856
...@@ -5,9 +5,18 @@ reset slave; ...@@ -5,9 +5,18 @@ reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave; start slave;
create table t1 (a int not null primary key); create table t1 (a int not null primary key);
insert into t1 values (1);
create table t2 (a int);
insert into t2 values (1);
update t1, t2 set t1.a = 0 where t1.a = t2.a;
show tables;
Tables_in_test
t1
select * from t1;
a
0
drop table t1; drop table t1;
insert into t1 values (1); insert into t1 values (1);
insert into t1 values (2);
show slave status; show slave status;
Slave_IO_State # Slave_IO_State #
Master_Host 127.0.0.1 Master_Host 127.0.0.1
...@@ -24,13 +33,13 @@ Slave_SQL_Running No ...@@ -24,13 +33,13 @@ Slave_SQL_Running No
Replicate_Do_DB Replicate_Do_DB
Replicate_Ignore_DB Replicate_Ignore_DB
Replicate_Do_Table Replicate_Do_Table
Replicate_Ignore_Table Replicate_Ignore_Table test.t2
Replicate_Wild_Do_Table Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table Replicate_Wild_Ignore_Table
Last_Errno 1146 Last_Errno 1146
Last_Error Error 'Table 'test.t1' doesn't exist' on opening table `test`.`t1` Last_Error Error 'Table 'test.t1' doesn't exist' on opening table `test`.`t1`
Skip_Counter 0 Skip_Counter 0
Exec_Master_Log_Pos 209 Exec_Master_Log_Pos 519
Relay_Log_Space # Relay_Log_Space #
Until_Condition None Until_Condition None
Until_Log_File Until_Log_File
...@@ -42,4 +51,4 @@ Master_SSL_Cert ...@@ -42,4 +51,4 @@ Master_SSL_Cert
Master_SSL_Cipher Master_SSL_Cipher
Master_SSL_Key Master_SSL_Key
Seconds_Behind_Master # Seconds_Behind_Master #
drop table t1; drop table t1, t2;
...@@ -34,7 +34,6 @@ rpl_ndb_myisam2ndb : Bug #19710 Cluster replication to partition table f ...@@ -34,7 +34,6 @@ rpl_ndb_myisam2ndb : Bug #19710 Cluster replication to partition table f
rpl_switch_stm_row_mixed : BUG#18590 2006-03-28 brian rpl_switch_stm_row_mixed : BUG#18590 2006-03-28 brian
rpl_row_blob_innodb : BUG#18980 2006-04-10 kent Test fails randomly rpl_row_blob_innodb : BUG#18980 2006-04-10 kent Test fails randomly
rpl_row_func003 : BUG#19074 2006-13-04 andrei test failed rpl_row_func003 : BUG#19074 2006-13-04 andrei test failed
rpl_row_inexist_tbl : BUG#18948 2006-03-09 mats Disabled since patch makes this test wait forever
rpl_sp : BUG#16456 2006-02-16 jmiller rpl_sp : BUG#16456 2006-02-16 jmiller
# the below testcase have been reworked to avoid the bug, test contains comment, keep bug open # the below testcase have been reworked to avoid the bug, test contains comment, keep bug open
......
...@@ -6,15 +6,23 @@ source include/master-slave.inc; ...@@ -6,15 +6,23 @@ source include/master-slave.inc;
connection master; connection master;
create table t1 (a int not null primary key); create table t1 (a int not null primary key);
insert into t1 values (1);
create table t2 (a int);
insert into t2 values (1);
update t1, t2 set t1.a = 0 where t1.a = t2.a;
sync_slave_with_master; sync_slave_with_master;
# t2 should not have been replicated
# t1 should have been properly updated
show tables;
select * from t1;
drop table t1; drop table t1;
connection master; connection master;
insert into t1 values (1); insert into t1 values (1);
insert into t1 values (2);
connection slave; connection slave;
# slave should have stopped because can't find table # slave should have stopped because can't find table t1
wait_for_slave_to_stop; wait_for_slave_to_stop;
# see if we have a good error message: # see if we have a good error message:
--replace_result $MASTER_MYPORT MASTER_MYPORT --replace_result $MASTER_MYPORT MASTER_MYPORT
...@@ -24,4 +32,4 @@ show slave status; ...@@ -24,4 +32,4 @@ show slave status;
# cleanup # cleanup
connection master; connection master;
drop table t1; drop table t1, t2;
...@@ -5853,9 +5853,7 @@ int Table_map_log_event::exec_event(st_relay_log_info *rli) ...@@ -5853,9 +5853,7 @@ int Table_map_log_event::exec_event(st_relay_log_info *rli)
/* /*
Open the table if it is not already open and add the table to table map. Open the table if it is not already open and add the table to table map.
If the table should not be replicated, we don't bother to do anything. Note that for any table that should not be replicated, a filter is needed.
The table map will return NULL and the row-level event will effectively
be a no-op.
*/ */
uint count; uint count;
/* /*
...@@ -5871,34 +5869,14 @@ int Table_map_log_event::exec_event(st_relay_log_info *rli) ...@@ -5871,34 +5869,14 @@ int Table_map_log_event::exec_event(st_relay_log_info *rli)
/* /*
Error reporting borrowed from Query_log_event with many excessive Error reporting borrowed from Query_log_event with many excessive
simplifications (we don't honour --slave-skip-errors) simplifications (we don't honour --slave-skip-errors)
BUG: There can be extreneous table maps in the binary log,
so in case we fail to open the table, we just generate a
warning and do not add the table to the list of tables to
open and lock.
*/ */
uint actual_error= thd->net.last_errno; uint actual_error= thd->net.last_errno;
switch (actual_error)
{
case ER_NO_SUCH_TABLE:
slave_print_msg(WARNING_LEVEL, rli, actual_error,
thd->net.last_error ?
thd->net.last_error :
"<no message>");
clear_all_errors(thd, rli);
rli->inc_event_relay_log_pos(); // Continue with next event
error= 0;
break;
default:
slave_print_msg(ERROR_LEVEL, rli, actual_error, slave_print_msg(ERROR_LEVEL, rli, actual_error,
"Error '%s' on opening table `%s`.`%s`", "Error '%s' on opening table `%s`.`%s`",
(actual_error ? thd->net.last_error : (actual_error ? thd->net.last_error :
"unexpected success or fatal error"), "unexpected success or fatal error"),
table_list->db, table_list->table_name); table_list->db, table_list->table_name);
thd->query_error= 1; thd->query_error= 1;
break;
}
} }
DBUG_RETURN(error); DBUG_RETURN(error);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment