Commit 1a2df3f4 authored by Michael Widenius's avatar Michael Widenius

automatic merge with 5.1

parents 863a493b 41df9be0
...@@ -241,3 +241,59 @@ DROP TABLE t1; ...@@ -241,3 +241,59 @@ DROP TABLE t1;
DROP TABLE t2; DROP TABLE t2;
SET SQL_MODE=''; SET SQL_MODE='';
sync_slave_with_master; sync_slave_with_master;
#
# Bug#54201: "SET INSERT_ID" event must be ignored if corresponding event is
# ignored.
#
connection master;
CREATE TABLE t1(s VARCHAR(10)) ENGINE=myisam;
# -slave.opt has --replicate-ignore-table=test.t_ignored1
CREATE TABLE t_ignored1(id INT AUTO_INCREMENT PRIMARY KEY) ENGINE=myisam;
connection slave;
CREATE TABLE test.slave_only(id INT AUTO_INCREMENT PRIMARY KEY) ENGINE=myisam;
INSERT INTO slave_only VALUES(NULL);
CREATE TRIGGER t1_update AFTER UPDATE ON t1 FOR EACH ROW INSERT INTO slave_only VALUES(NULL);
connection master;
INSERT INTO t_ignored1 VALUES(NULL);
INSERT INTO t1 VALUES('s');
UPDATE t1 SET s='s1';
# With Bug#54201, slave stops with duplicate key error here due to trigger
# using the insert_id from insert on master into t1_ignored1
sync_slave_with_master;
connection slave;
SELECT * FROM t1;
connection master;
CREATE TABLE t_ignored2(id INT AUTO_INCREMENT PRIMARY KEY) ENGINE=myisam;
sync_slave_with_master;
connection slave;
STOP SLAVE;
# Ignore the next INSERT into t_ignored2 and the INSERT_ID event just before it.
SET GLOBAL sql_slave_skip_counter = 2;
START SLAVE;
connection master;
INSERT INTO t_ignored2 VALUES(NULL);
UPDATE t1 SET s='s2';
sync_slave_with_master;
connection slave;
SELECT * FROM t1;
SHOW TABLES LIKE 't\_ignored_';
SELECT * FROM t_ignored2;
DROP TABLE slave_only;
connection master;
DROP TABLE t1;
DROP TABLE t_ignored1;
DROP TABLE t_ignored2;
sync_slave_with_master;
...@@ -73,6 +73,7 @@ UNLOCK TABLES; ...@@ -73,6 +73,7 @@ UNLOCK TABLES;
-- connection con2 -- connection con2
-- reap -- reap
-- error 0, 1205
UNLOCK TABLES; UNLOCK TABLES;
-- connection con3 -- connection con3
......
...@@ -312,3 +312,32 @@ Comparing tables master:test.t2 and slave:test.t2 ...@@ -312,3 +312,32 @@ Comparing tables master:test.t2 and slave:test.t2
DROP TABLE t1; DROP TABLE t1;
DROP TABLE t2; DROP TABLE t2;
SET SQL_MODE=''; SET SQL_MODE='';
CREATE TABLE t1(s VARCHAR(10)) ENGINE=myisam;
CREATE TABLE t_ignored1(id INT AUTO_INCREMENT PRIMARY KEY) ENGINE=myisam;
CREATE TABLE test.slave_only(id INT AUTO_INCREMENT PRIMARY KEY) ENGINE=myisam;
INSERT INTO slave_only VALUES(NULL);
CREATE TRIGGER t1_update AFTER UPDATE ON t1 FOR EACH ROW INSERT INTO slave_only VALUES(NULL);
INSERT INTO t_ignored1 VALUES(NULL);
INSERT INTO t1 VALUES('s');
UPDATE t1 SET s='s1';
SELECT * FROM t1;
s
s1
CREATE TABLE t_ignored2(id INT AUTO_INCREMENT PRIMARY KEY) ENGINE=myisam;
STOP SLAVE;
SET GLOBAL sql_slave_skip_counter = 2;
START SLAVE;
INSERT INTO t_ignored2 VALUES(NULL);
UPDATE t1 SET s='s2';
SELECT * FROM t1;
s
s2
SHOW TABLES LIKE 't\_ignored_';
Tables_in_test (t\_ignored_)
t_ignored2
SELECT * FROM t_ignored2;
id
DROP TABLE slave_only;
DROP TABLE t1;
DROP TABLE t_ignored1;
DROP TABLE t_ignored2;
--replicate-ignore-table=test.t_ignored1
...@@ -3307,6 +3307,19 @@ START SLAVE; . Query: '%s'", expected_error, thd->query()); ...@@ -3307,6 +3307,19 @@ START SLAVE; . Query: '%s'", expected_error, thd->query());
/* If the query was not ignored, it is printed to the general log */ /* If the query was not ignored, it is printed to the general log */
if (!thd->is_error() || thd->main_da.sql_errno() != ER_SLAVE_IGNORED_TABLE) if (!thd->is_error() || thd->main_da.sql_errno() != ER_SLAVE_IGNORED_TABLE)
general_log_write(thd, COM_QUERY, thd->query(), thd->query_length()); general_log_write(thd, COM_QUERY, thd->query(), thd->query_length());
else
{
/*
Bug#54201: If we skip an INSERT query that uses auto_increment, then we
should reset any @@INSERT_ID set by an Intvar_log_event associated with
the query; otherwise the @@INSERT_ID will linger until the next INSERT
that uses auto_increment and may affect extra triggers on the slave etc.
We reset INSERT_ID unconditionally; it is probably cheaper than
checking if it is necessary.
*/
thd->auto_inc_intervals_forced.empty();
}
compare_errors: compare_errors:
......
...@@ -247,10 +247,11 @@ rw_lock_create_func( ...@@ -247,10 +247,11 @@ rw_lock_create_func(
lock->mutex.cmutex_name = cmutex_name; lock->mutex.cmutex_name = cmutex_name;
ut_d(lock->mutex.mutex_type = 1); ut_d(lock->mutex.mutex_type = 1);
#else /* INNODB_RW_LOCKS_USE_ATOMICS */ #endif /* INNODB_RW_LOCKS_USE_ATOMICS */
#if defined(INNODB_RW_LOCKS_USE_ATOMICS) || !defined(UNIV_DEBUG)
(void) cfile_name; (void) cfile_name;
(void) cline; (void) cline;
#endif /* INNODB_RW_LOCKS_USE_ATOMICS */ #endif
lock->lock_word = X_LOCK_DECR; lock->lock_word = X_LOCK_DECR;
lock->waiters = 0; lock->waiters = 0;
......
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