mirror of
https://github.com/MariaDB/server.git
synced 2025-01-28 17:54:16 +01:00
[MDEV-6877] Added tests for binlog_row_image using noblobs switch
This commit is contained in:
parent
d817267ae6
commit
4d856e362e
6 changed files with 5069 additions and 0 deletions
179
mysql-test/extra/rpl_tests/rpl_row_img_blobs.test
Normal file
179
mysql-test/extra/rpl_tests/rpl_row_img_blobs.test
Normal file
|
@ -0,0 +1,179 @@
|
|||
# WL#5096
|
||||
#
|
||||
# Description
|
||||
# ===========
|
||||
#
|
||||
# This test case covers Requirements for replication using different
|
||||
# combinations of indexes and blob fields.
|
||||
#
|
||||
# It acts as a complement for rpl_row_img_sanity tests as it checks
|
||||
# that in a chained replication scenario, replication does not break.
|
||||
#
|
||||
# Usage
|
||||
# =====
|
||||
#
|
||||
# Before including this file the following variables should be set:
|
||||
# * $server_1_engine
|
||||
# * $server_2_engine
|
||||
# * $server_3_engine
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
# -- let $server_1_engine= Falcon
|
||||
# -- let $server_2_engine= MyISAM
|
||||
# -- let $server_3_engine= InnoDB
|
||||
#
|
||||
# -- source extra/rpl_tests/rpl_row_img_blobs.test
|
||||
#
|
||||
|
||||
-- connection server_1
|
||||
|
||||
-- let $diff_table=test.t
|
||||
let $i= 7;
|
||||
while($i)
|
||||
{
|
||||
-- connection server_1
|
||||
SET SQL_LOG_BIN=0;
|
||||
|
||||
-- connection server_2
|
||||
SET SQL_LOG_BIN=0;
|
||||
|
||||
-- connection server_3
|
||||
SET SQL_LOG_BIN=0;
|
||||
|
||||
#
|
||||
# The comments below (on create table) must be read with the SQL
|
||||
# instructions issued later in mind. Declaring a table obviously is
|
||||
# not enough to assert anything.
|
||||
#
|
||||
# Also, the tests in this file make more sense when performed with
|
||||
# binlog_row_image configured as NOBLOB.
|
||||
#
|
||||
|
||||
if ($i == 1) {
|
||||
-- echo ### Asserts that declaring a blob as part of a primary key does not break replication
|
||||
-- connection server_1
|
||||
--eval CREATE TABLE t (c1 int, c2 blob, c3 int, primary key(c2(512))) engine= $server_1_engine;
|
||||
-- connection server_2
|
||||
--eval CREATE TABLE t (c1 int, c2 blob, c3 int, primary key(c2(512))) engine= $server_2_engine;
|
||||
-- connection server_3
|
||||
--eval CREATE TABLE t (c1 int, c2 blob, c3 int, primary key(c2(512))) engine= $server_3_engine;
|
||||
}
|
||||
if ($i == 2)
|
||||
{
|
||||
-- echo ### Asserts that declaring a blob as part of a unique (not null) key does not break replication
|
||||
-- connection server_1
|
||||
--eval CREATE TABLE t (c1 int, c2 blob NOT NULL, c3 int, unique key(c2(512))) engine= $server_1_engine;
|
||||
-- connection server_2
|
||||
--eval CREATE TABLE t (c1 int, c2 blob NOT NULL, c3 int, unique key(c2(512))) engine= $server_2_engine;
|
||||
-- connection server_3
|
||||
--eval CREATE TABLE t (c1 int, c2 blob NOT NULL, c3 int, unique key(c2(512))) engine= $server_3_engine;
|
||||
}
|
||||
if ($i == 3)
|
||||
{
|
||||
-- echo ### Asserts that declaring a blob in a key does not break replication
|
||||
-- connection server_1
|
||||
--eval CREATE TABLE t (c1 int, c2 blob, c3 int, key(c2(512))) engine= $server_1_engine;
|
||||
-- connection server_2
|
||||
--eval CREATE TABLE t (c1 int, c2 blob, c3 int, key(c2(512))) engine= $server_2_engine;
|
||||
-- connection server_3
|
||||
--eval CREATE TABLE t (c1 int, c2 blob, c3 int, key(c2(512))) engine= $server_3_engine;
|
||||
|
||||
}
|
||||
if ($i == 4) {
|
||||
-- echo ### Asserts that updates without blobs in the BI (PK exists int the table)
|
||||
-- echo ### will not break replication
|
||||
-- connection server_1
|
||||
--eval CREATE TABLE t (c1 int, c2 blob, c3 int, primary key(c1)) engine= $server_1_engine;
|
||||
-- connection server_2
|
||||
--eval CREATE TABLE t (c1 int, c2 blob, c3 int, primary key(c1)) engine= $server_2_engine;
|
||||
-- connection server_3
|
||||
--eval CREATE TABLE t (c1 int, c2 blob, c3 int, primary key(c1)) engine= $server_3_engine;
|
||||
|
||||
}
|
||||
if ($i == 5)
|
||||
{
|
||||
-- echo ### Asserts that updates without blobs in the BI (UK NOT NULL exists in the table)
|
||||
-- echo ### will not break replication
|
||||
-- connection server_1
|
||||
--eval CREATE TABLE t (c1 int NOT NULL, c2 blob NOT NULL, c3 int, unique key(c1)) engine= $server_1_engine;
|
||||
-- connection server_2
|
||||
--eval CREATE TABLE t (c1 int NOT NULL, c2 blob NOT NULL, c3 int, unique key(c1)) engine= $server_2_engine;
|
||||
-- connection server_3
|
||||
--eval CREATE TABLE t (c1 int NOT NULL, c2 blob NOT NULL, c3 int, unique key(c1)) engine= $server_3_engine;
|
||||
|
||||
}
|
||||
if ($i == 6)
|
||||
{
|
||||
-- echo ### Asserts that updates without blobs in the AI (they are not updated)
|
||||
-- echo ### will not break replication (check even if there is a key in the table)
|
||||
-- connection server_1
|
||||
--eval CREATE TABLE t (c1 int, c2 blob, c3 int, key(c1)) engine= $server_1_engine;
|
||||
-- connection server_2
|
||||
--eval CREATE TABLE t (c1 int, c2 blob, c3 int, key(c1)) engine= $server_2_engine;
|
||||
-- connection server_3
|
||||
--eval CREATE TABLE t (c1 int, c2 blob, c3 int, key(c1)) engine= $server_3_engine;
|
||||
|
||||
}
|
||||
if ($i == 7)
|
||||
{
|
||||
-- echo ### Asserts that updates without blobs in the AI (they are not updated)
|
||||
-- echo ### will not break replication (check when there is no key in the table)
|
||||
-- connection server_1
|
||||
--eval CREATE TABLE t (c1 int, c2 blob, c3 int) engine= $server_1_engine;
|
||||
-- connection server_2
|
||||
--eval CREATE TABLE t (c1 int, c2 blob, c3 int) engine= $server_2_engine;
|
||||
-- connection server_3
|
||||
--eval CREATE TABLE t (c1 int, c2 blob, c3 int) engine= $server_3_engine;
|
||||
}
|
||||
|
||||
-- connection server_1
|
||||
SET SQL_LOG_BIN=1;
|
||||
|
||||
-- connection server_2
|
||||
SET SQL_LOG_BIN=1;
|
||||
|
||||
-- connection server_3
|
||||
SET SQL_LOG_BIN=1;
|
||||
|
||||
-- connection server_1
|
||||
|
||||
-- let $blob1= "a"
|
||||
-- let $blob2= "b"
|
||||
-- let $blob3= "c"
|
||||
|
||||
-- eval INSERT INTO t VALUES (1, $blob1, 10)
|
||||
-- eval INSERT INTO t VALUES (2, $blob2, 20)
|
||||
-- eval INSERT INTO t VALUES (3, $blob3, 30)
|
||||
|
||||
-- source include/rpl_sync.inc
|
||||
|
||||
-- connection server_1
|
||||
-- eval UPDATE t SET c1=10 WHERE c2=$blob1
|
||||
-- eval UPDATE t SET c1=20 WHERE c1=2
|
||||
-- eval UPDATE t SET c1=30 WHERE c3=30
|
||||
-- eval UPDATE t SET c3=40 WHERE c1=30
|
||||
|
||||
-- source include/rpl_sync.inc
|
||||
|
||||
-- let $diff_tables= server_1:$diff_table, server_2:$diff_table, server_3:$diff_table
|
||||
-- source include/diff_tables.inc
|
||||
|
||||
-- connection server_1
|
||||
-- eval DELETE FROM t WHERE c2=$blob1
|
||||
-- eval DELETE FROM t WHERE c1=20
|
||||
-- eval DELETE FROM t
|
||||
|
||||
-- source include/rpl_sync.inc
|
||||
|
||||
-- let $diff_tables= server_1:$diff_table, server_2:$diff_table, server_3:$diff_table
|
||||
-- source include/diff_tables.inc
|
||||
|
||||
-- connection server_1
|
||||
|
||||
DROP TABLE t;
|
||||
|
||||
-- source include/rpl_sync.inc
|
||||
|
||||
dec $i;
|
||||
}
|
42
mysql-test/include/rpl_row_img_general_loop.inc
Normal file
42
mysql-test/include/rpl_row_img_general_loop.inc
Normal file
|
@ -0,0 +1,42 @@
|
|||
#
|
||||
# This is a helper script for rpl_row_img.test. It creates
|
||||
# all combinations MyISAM / InnoDB in a three server replication
|
||||
# chain. Each engine combination is tested against the current
|
||||
# seetings for binlog_row_image (on each server).
|
||||
#
|
||||
# The test script that is executed on every combination is the
|
||||
# only argument to this wrapper script. See below.
|
||||
#
|
||||
# This script takes one parameter:
|
||||
# - $row_img_test_script
|
||||
# the name of the test script to include in every combination
|
||||
#
|
||||
# Sample usage:
|
||||
# -- let $row_img_test_script= extra/rpl_tests/rpl_row_img.test
|
||||
# -- source include/rpl_row_img_general_loop.test
|
||||
|
||||
|
||||
-- let $engine_type_a= 2
|
||||
-- let $server_1_engine= MyISAM
|
||||
while($engine_type_a)
|
||||
{
|
||||
-- let $engine_type_b= 2
|
||||
-- let $server_2_engine= MyISAM
|
||||
while($engine_type_b)
|
||||
{
|
||||
-- let $engine_type_c= 2
|
||||
-- let $server_3_engine= MyISAM
|
||||
while($engine_type_c)
|
||||
{
|
||||
-- echo ### engines: $server_1_engine, $server_2_engine, $server_3_engine
|
||||
-- source $row_img_test_script
|
||||
|
||||
-- let $server_3_engine= InnoDB
|
||||
-- dec $engine_type_c
|
||||
}
|
||||
-- let $server_2_engine= InnoDB
|
||||
-- dec $engine_type_b
|
||||
}
|
||||
-- let $server_1_engine= InnoDB
|
||||
-- dec $engine_type_a
|
||||
}
|
55
mysql-test/include/rpl_row_img_set.inc
Normal file
55
mysql-test/include/rpl_row_img_set.inc
Normal file
|
@ -0,0 +1,55 @@
|
|||
#
|
||||
# This is an auxiliar script that sets the binlog-row-image
|
||||
# on a set of connections. These connections are passed as
|
||||
# a parameter to this script. Its format is the following:
|
||||
#
|
||||
# <conid,value,Y_or_N>:[<conid,value,Y_or_N>:...]
|
||||
#
|
||||
# In detail:
|
||||
#
|
||||
# conid -- connection id (eg, master)
|
||||
# value -- binlog_row_image value to set (eg, FULL)
|
||||
# Y_or_N -- Issue stop and start slave (eg, Y)
|
||||
#
|
||||
# Sample usage:
|
||||
#
|
||||
# -- let $row_img_set=master:FULL:N,slave:MINIMAL:Y
|
||||
# -- source include/rpl_row_img_set.inc
|
||||
#
|
||||
# Notes:
|
||||
#
|
||||
# 1. This script saves and restores the original connection that was
|
||||
# in use at the time it was included.
|
||||
|
||||
-- let $old_conn= $CURRENT_CONNECTION
|
||||
|
||||
while (`SELECT HEX('$row_img_set') != HEX('')`)
|
||||
{
|
||||
|
||||
-- let $tuple= `SELECT SUBSTRING_INDEX('$row_img_set', ',', 1)`
|
||||
|
||||
-- let $conn= `SELECT SUBSTRING_INDEX('$tuple', ':', 1)`
|
||||
-- let $rimg= `SELECT SUBSTRING_INDEX(LTRIM(SUBSTRING('$tuple', LENGTH('$conn') + 2)), ':', 1)`
|
||||
|
||||
-- let $is_slave_restart= `SELECT LTRIM(SUBSTRING('$tuple', LENGTH('$conn') + LENGTH('$rimg')+ 3))`
|
||||
|
||||
-- echo CON: '$conn', IMG: '$rimg', RESTART SLAVE: '$is_slave_restart'
|
||||
|
||||
-- connection $conn
|
||||
-- eval SET SESSION binlog_row_image= '$rimg'
|
||||
-- eval SET GLOBAL binlog_row_image= '$rimg'
|
||||
|
||||
if ($is_slave_restart == Y)
|
||||
{
|
||||
-- source include/stop_slave.inc
|
||||
-- source include/start_slave.inc
|
||||
}
|
||||
|
||||
FLUSH TABLES;
|
||||
SHOW VARIABLES LIKE 'binlog_row_image';
|
||||
|
||||
-- let $row_img_set= `SELECT LTRIM(SUBSTRING('$row_img_set', LENGTH('$tuple') + 2 ))`
|
||||
|
||||
}
|
||||
|
||||
-- connection $old_conn
|
4733
mysql-test/suite/rpl/r/rpl_row_img_blobs.result
Normal file
4733
mysql-test/suite/rpl/r/rpl_row_img_blobs.result
Normal file
File diff suppressed because it is too large
Load diff
1
mysql-test/suite/rpl/t/rpl_row_img_blobs.cnf
Normal file
1
mysql-test/suite/rpl/t/rpl_row_img_blobs.cnf
Normal file
|
@ -0,0 +1 @@
|
|||
!include suite/rpl/t/rpl_row_img.cnf
|
59
mysql-test/suite/rpl/t/rpl_row_img_blobs.test
Normal file
59
mysql-test/suite/rpl/t/rpl_row_img_blobs.test
Normal file
|
@ -0,0 +1,59 @@
|
|||
#Want to skip this test from daily Valgrind execution
|
||||
--source include/no_valgrind_without_big.inc
|
||||
|
||||
#
|
||||
# This file contains tests for WL#5096.
|
||||
#
|
||||
|
||||
--let $rpl_topology= 1->2->3
|
||||
--source include/rpl_init.inc
|
||||
-- source include/have_binlog_format_row.inc
|
||||
|
||||
-- connection server_1
|
||||
-- source include/have_innodb.inc
|
||||
-- connection server_2
|
||||
-- source include/have_innodb.inc
|
||||
-- connection server_3
|
||||
-- source include/have_innodb.inc
|
||||
-- connection server_1
|
||||
|
||||
#
|
||||
# WL#5096 Tests.
|
||||
#
|
||||
|
||||
#
|
||||
# Tests combinations of binlog-row-image against mixes of MyISAM and InnoDB
|
||||
# storage engines on all three servers.
|
||||
#
|
||||
# All the combinarions need not to be separated into their own files as
|
||||
# the tests for indexes and engines mixes are, because noblobs test script
|
||||
# does not take too long time, thence we do not risk triggering PB2 timeout
|
||||
# on valgrind runs.
|
||||
#
|
||||
|
||||
## NOBLOB
|
||||
|
||||
-- let $row_img_set=server_1:NOBLOB:N,server_2:NOBLOB:Y,server_3:NOBLOB:Y
|
||||
-- source include/rpl_row_img_set.inc
|
||||
|
||||
-- let $row_img_test_script= extra/rpl_tests/rpl_row_img_blobs.test
|
||||
-- source include/rpl_row_img_general_loop.inc
|
||||
|
||||
## MINIMAL
|
||||
|
||||
-- let $row_img_set=server_1:MINIMAL:N,server_2:MINIMAL:Y,server_3:MINIMAL:Y
|
||||
-- source include/rpl_row_img_set.inc
|
||||
|
||||
-- let $row_img_test_script= extra/rpl_tests/rpl_row_img_blobs.test
|
||||
-- source include/rpl_row_img_general_loop.inc
|
||||
|
||||
## FULL
|
||||
|
||||
-- let $row_img_set=server_1:FULL:N,server_2:FULL:Y,server_3:FULL:Y
|
||||
-- source include/rpl_row_img_set.inc
|
||||
|
||||
-- let $row_img_test_script= extra/rpl_tests/rpl_row_img_blobs.test
|
||||
-- source include/rpl_row_img_general_loop.inc
|
||||
|
||||
|
||||
--source include/rpl_end.inc
|
Loading…
Add table
Reference in a new issue