diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc index a1023d04080..f9d5ccfec72 100644 --- a/libmysqld/lib_sql.cc +++ b/libmysqld/lib_sql.cc @@ -448,7 +448,7 @@ int STDCALL mysql_server_init(int argc, char **argv, char **groups) #ifdef USE_REGEX regex_init(); #endif - if (use_temp_pool && bitmap_init(&temp_pool,1024)) + if (use_temp_pool && bitmap_init(&temp_pool,1024,1)) { mysql_server_end(); return 1; diff --git a/mysql-test/r/rpl_get_lock.result b/mysql-test/r/rpl_get_lock.result index 63342e0e4e6..c86b8f830a5 100644 --- a/mysql-test/r/rpl_get_lock.result +++ b/mysql-test/r/rpl_get_lock.result @@ -5,6 +5,12 @@ drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; slave start; create table t1(n int); insert into t1 values(get_lock("lock",2)); +select get_lock("lock",2); +get_lock("lock",2) +1 +select release_lock("lock"); +release_lock("lock") +1 select get_lock("lock",3); get_lock("lock",3) 1 diff --git a/mysql-test/r/rpl_skip_error.result b/mysql-test/r/rpl_skip_error.result index f85b057eefa..9fe92292178 100644 --- a/mysql-test/r/rpl_skip_error.result +++ b/mysql-test/r/rpl_skip_error.result @@ -1,3 +1,14 @@ +slave stop; +reset master; +reset slave; +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; +slave start; +drop table if exists t1; +create table t1 (n int not null primary key); +insert into t1 values (1); +insert into t1 values (1); +insert into t1 values (2),(3); +select * from t1; n 1 2 diff --git a/sql/log_event.cc b/sql/log_event.cc index 6f931bd8f42..3552a4264c9 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -1529,6 +1529,12 @@ void Execute_load_log_event::pack_info(String* packet) #endif #ifndef MYSQL_CLIENT + +int ignored_error_code(int err_code) +{ + return use_slave_mask && bitmap_is_set(&slave_error_mask, err_code); +} + int Query_log_event::exec_event(struct st_master_info* mi) { int expected_error,actual_error = 0; @@ -1551,11 +1557,13 @@ int Query_log_event::exec_event(struct st_master_info* mi) sanity check to make sure the master did not get a really bad error on the query */ - if (!check_expected_error(thd, (expected_error = error_code))) + if (ignored_error_code((expected_error=error_code)) || + !check_expected_error(thd, expected_error)) { mysql_parse(thd, thd->query, q_len); if (expected_error != - (actual_error = thd->net.last_errno) && expected_error) + (actual_error = thd->net.last_errno) && expected_error && + !ignored_error_code(actual_error)) { const char* errmsg = "Slave: did not get the expected error\ running query from master - expected: '%s' (%d), got '%s' (%d)"; @@ -1565,7 +1573,8 @@ int Query_log_event::exec_event(struct st_master_info* mi) actual_error); thd->query_error = 1; } - else if (expected_error == actual_error) + else if (expected_error == actual_error || + ignored_error_code(actual_error)) { thd->query_error = 0; *last_slave_error = 0; diff --git a/sql/slave.cc b/sql/slave.cc index 3272344e478..45d4a33031a 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -1037,10 +1037,6 @@ point. If you are sure that your master is ok, run this query manually on the\ } } -inline int ignored_error_code(int err_code) -{ - return use_slave_mask && bitmap_is_set(&slave_error_mask, err_code); -} static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len)