228 lines
5.7 KiB
Plaintext
228 lines
5.7 KiB
Plaintext
#
|
|
# BUG#49100: RBR: Unexpected behavior when AI contains no usable data
|
|
# for slave columns
|
|
|
|
-- connection server_1
|
|
|
|
-- let $row_img_set=server_1:MINIMAL:N,server_2:MINIMAL:Y,server_3:MINIMAL:Y
|
|
-- source include/rpl_row_img_set.inc
|
|
|
|
-- echo #### case #1: AI: no values logged
|
|
|
|
-- replace_result $engine ENGINE
|
|
-- eval CREATE TABLE t1 (c1 int DEFAULT 100) Engine=$engine
|
|
INSERT INTO t1 VALUES ();
|
|
SELECT * FROM t1;
|
|
-- source include/rpl_sync.inc
|
|
-- connection server_2
|
|
SELECT * FROM t1;
|
|
-- connection server_3
|
|
SELECT * FROM t1;
|
|
|
|
-- connection server_1
|
|
DROP TABLE t1;
|
|
-- source include/rpl_sync.inc
|
|
|
|
-- echo #### case #2: AI: not empty but slave does not have usable data for its columns (INSERT)
|
|
|
|
-- connection server_3
|
|
-- replace_result $engine ENGINE
|
|
-- eval CREATE TABLE t1 (c1 int DEFAULT 100) Engine=$engine
|
|
|
|
-- connection server_2
|
|
SET SQL_LOG_BIN=0;
|
|
-- replace_result $engine ENGINE
|
|
-- eval CREATE TABLE t1 (c1 int DEFAULT 100) Engine=$engine
|
|
SET SQL_LOG_BIN=1;
|
|
|
|
-- connection server_1
|
|
SET SQL_LOG_BIN=0;
|
|
-- replace_result $engine ENGINE
|
|
-- eval CREATE TABLE t1 (c1 int DEFAULT 100, c2 int, primary key(c2)) Engine=$engine
|
|
SET SQL_LOG_BIN=1;
|
|
|
|
INSERT INTO t1(c2) VALUES (1);
|
|
SELECT * FROM t1;
|
|
-- source include/rpl_sync.inc
|
|
-- connection server_2
|
|
SELECT * FROM t1;
|
|
-- connection server_3
|
|
SELECT * FROM t1;
|
|
|
|
-- connection server_1
|
|
DROP TABLE t1;
|
|
-- source include/rpl_sync.inc
|
|
|
|
-- echo #### case #3: BI: usable columns on the slave, AI: no usable columns on the slave
|
|
|
|
-- connection server_3
|
|
-- replace_result $engine ENGINE
|
|
-- eval CREATE TABLE t1 (c1 int DEFAULT 100) Engine=$engine
|
|
|
|
-- connection server_2
|
|
SET SQL_LOG_BIN=0;
|
|
-- replace_result $engine ENGINE
|
|
-- eval CREATE TABLE t1 (c1 int DEFAULT 100) Engine=$engine
|
|
SET SQL_LOG_BIN=1;
|
|
|
|
-- connection server_1
|
|
SET SQL_LOG_BIN=0;
|
|
-- replace_result $engine ENGINE
|
|
-- eval CREATE TABLE t1 (c1 int DEFAULT 100, c2 int) Engine=$engine
|
|
SET SQL_LOG_BIN=1;
|
|
|
|
INSERT INTO t1 VALUES (1,1);
|
|
SELECT * FROM t1;
|
|
-- source include/rpl_sync.inc
|
|
-- connection server_2
|
|
SELECT * FROM t1;
|
|
-- connection server_3
|
|
SELECT * FROM t1;
|
|
|
|
-- connection server_1
|
|
UPDATE t1 SET c2=2 WHERE c1=1 AND c2=1;
|
|
SELECT * FROM t1;
|
|
-- source include/rpl_sync.inc
|
|
-- connection server_2
|
|
SELECT * FROM t1;
|
|
-- connection server_3
|
|
SELECT * FROM t1;
|
|
|
|
-- connection server_1
|
|
DROP TABLE t1;
|
|
-- source include/rpl_sync.inc
|
|
|
|
-- echo #### case #4: AI, BI: no usable columns on the slave (NOOP UPDATE).
|
|
-- echo ####
|
|
|
|
if ($verbose)
|
|
{
|
|
## CLEAN LOGS (to show clean events later)
|
|
|
|
--source include/rpl_reset.inc
|
|
}
|
|
|
|
-- connection server_3
|
|
-- replace_result $engine ENGINE
|
|
-- eval CREATE TABLE t1 (c1 int DEFAULT 100) Engine=$engine
|
|
|
|
-- connection server_2
|
|
SET SQL_LOG_BIN=0;
|
|
-- replace_result $engine ENGINE
|
|
-- eval CREATE TABLE t1 (c1 int DEFAULT 100) Engine=$engine
|
|
SET SQL_LOG_BIN=1;
|
|
|
|
-- connection server_1
|
|
SET SQL_LOG_BIN=0;
|
|
-- replace_result $engine ENGINE
|
|
-- eval CREATE TABLE t1 (c1 int DEFAULT 100, c2 int, c3 int, primary key(c2)) Engine=$engine
|
|
SET SQL_LOG_BIN=1;
|
|
|
|
INSERT INTO t1 VALUES (1,1,1);
|
|
SELECT * FROM t1;
|
|
-- source include/rpl_sync.inc
|
|
-- connection server_2
|
|
SELECT * FROM t1;
|
|
-- connection server_3
|
|
SELECT * FROM t1;
|
|
|
|
-- connection server_1
|
|
UPDATE t1 SET c3=300 WHERE c2=1;
|
|
SELECT * FROM t1;
|
|
-- source include/rpl_sync.inc
|
|
-- connection server_2
|
|
SELECT * FROM t1;
|
|
-- connection server_3
|
|
SELECT * FROM t1;
|
|
|
|
-- connection server_1
|
|
DROP TABLE t1;
|
|
-- source include/rpl_sync.inc
|
|
|
|
if ($verbose)
|
|
{
|
|
# show that 2nd slave does not log the update (see: BUG#52473)
|
|
-- connection server_1
|
|
-- echo # Master events
|
|
-- source include/show_binlog_events.inc
|
|
-- connection server_2
|
|
-- echo # First slave events
|
|
-- source include/show_binlog_events.inc
|
|
-- connection server_1
|
|
}
|
|
|
|
-- echo #### case #5: BI: no usable columns on the slave, AI: usable columns on the slave (slave must stop).
|
|
-- echo ####
|
|
|
|
|
|
if ($verbose)
|
|
{
|
|
## CLEAN LOGS
|
|
--source include/rpl_reset.inc
|
|
}
|
|
|
|
-- connection server_3
|
|
-- replace_result $engine ENGINE
|
|
-- eval CREATE TABLE t1 (c1 INT DEFAULT 100) Engine=$engine
|
|
|
|
-- connection server_2
|
|
SET SQL_LOG_BIN=0;
|
|
-- replace_result $engine ENGINE
|
|
-- eval CREATE TABLE t1 (c1 INT DEFAULT 100) Engine=$engine
|
|
SET SQL_LOG_BIN=1;
|
|
|
|
-- connection server_1
|
|
SET SQL_LOG_BIN=0;
|
|
-- replace_result $engine ENGINE
|
|
-- eval CREATE TABLE t1 (c1 INT DEFAULT 100, c2 INT PRIMARY KEY) Engine=$engine
|
|
SET SQL_LOG_BIN=1;
|
|
|
|
INSERT INTO t1 VALUES (1,1);
|
|
SELECT * FROM t1;
|
|
-- source include/rpl_sync.inc
|
|
-- connection server_2
|
|
SELECT * FROM t1;
|
|
-- connection server_3
|
|
SELECT * FROM t1;
|
|
|
|
-- connection server_1
|
|
UPDATE t1 SET c1=300 WHERE c2=1;
|
|
SELECT * FROM t1;
|
|
-- connection server_2
|
|
|
|
-- let $lower_engine= `SELECT LOWER('$engine')`
|
|
if ($lower_engine == ndb)
|
|
{
|
|
if ($verbose)
|
|
{
|
|
-- echo # scenario #5 skipped in NDB (see: BUG#52473).
|
|
# show events logged in server_1. There will be two Write_rows events
|
|
# instead of one Write_rows and one Update_rows log events.
|
|
-- connection server_1
|
|
-- source include/show_binlog_events.inc
|
|
}
|
|
}
|
|
|
|
SET SQL_LOG_BIN=0;
|
|
call mtr.add_suppression("Slave: Can\'t find record in \'t1\' Error_code: MY-001032");
|
|
call mtr.add_suppression("Slave SQL for channel '': .*Could not execute Update_rows event on table test.t1; Can.t find record in .t1.* Error_code: MY-001032");
|
|
call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state");
|
|
|
|
SET SQL_LOG_BIN=1;
|
|
|
|
# NOTE: Because of BUG#52473, when using NDB this will make the test
|
|
# wait forever.
|
|
# 1032 = ER_KEY_NOT_FOUND
|
|
--let $slave_sql_errno= 1032
|
|
--let $not_switch_connection= 1
|
|
-- source include/wait_for_slave_sql_error_and_skip.inc
|
|
|
|
## CLEAN UP
|
|
|
|
-- connection server_1
|
|
DROP TABLE t1;
|
|
-- source include/rpl_sync.inc
|
|
|
|
-- let $row_img_set=server_1:FULL:N,server_2:FULL:Y,server_3:FULL:Y
|
|
-- source include/rpl_row_img_set.inc
|