polardbxengine/mysql-test/extra/rpl_tests/rpl_row_empty_imgs.test

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