summaryrefslogtreecommitdiffstats
path: root/mysql-test/suite/rpl/include/mysqlbinlog_slave_consistency.inc
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 18:00:34 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 18:00:34 +0000
commit3f619478f796eddbba6e39502fe941b285dd97b1 (patch)
treee2c7b5777f728320e5b5542b6213fd3591ba51e2 /mysql-test/suite/rpl/include/mysqlbinlog_slave_consistency.inc
parentInitial commit. (diff)
downloadmariadb-upstream.tar.xz
mariadb-upstream.zip
Adding upstream version 1:10.11.6.upstream/1%10.11.6upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'mysql-test/suite/rpl/include/mysqlbinlog_slave_consistency.inc')
-rw-r--r--mysql-test/suite/rpl/include/mysqlbinlog_slave_consistency.inc194
1 files changed, 194 insertions, 0 deletions
diff --git a/mysql-test/suite/rpl/include/mysqlbinlog_slave_consistency.inc b/mysql-test/suite/rpl/include/mysqlbinlog_slave_consistency.inc
new file mode 100644
index 00000000..48e4399d
--- /dev/null
+++ b/mysql-test/suite/rpl/include/mysqlbinlog_slave_consistency.inc
@@ -0,0 +1,194 @@
+# This file provides the structure to run a single test that ensures the
+# mariadb-binlog command line tool is consistent with replicas for event
+# filtering. The test is configured using the following input parameters, where
+# each is nullable (i.e. it will not be used to configure mariadb-binlog or
+# the replica).
+#
+# param $do_domain_ids : A list of domain ids to include in replication
+# param $ignore_domain_ids : A list of domain ids to exclude from replication
+# param $ignore_server_ids : A list of server ids to exclude from replication
+# param $start_position : The GTID positions to begin replication from in
+# the specified domains
+# param $stop_position : The GTID positions that mark the end of an event
+# stream in a particular domain
+#
+# param $con1 : The connection name of the primary server
+# param $con2 : The connection name of the replica server
+# param $strict_mode : Uses input and checks for out of order GTIDs
+# param $strict_mode_err : A boolean that provides expectations for strict
+# mode to error
+# param $slave_sql_errno : Expected error number of the slave SQL thread
+
+
+--let $include_filename= mysqlbinlog_slave_consistency.inc
+--source include/begin_include_file.inc
+
+--enable_query_log
+
+if (!$con1)
+{
+ --let $con1=master
+}
+if (!$con2)
+{
+ --let $con2=slave
+}
+
+if (!$strict_mode)
+{
+ --connection $con2
+ set @@global.gtid_strict_mode=0;
+ --let $sql_input_file=include/sql_multisource.inc
+}
+
+if ($strict_mode)
+{
+ --connection $con2
+ set @@global.gtid_strict_mode=1;
+ --let $sql_input_file=include/sql_out_of_order_gtid.inc
+}
+
+--connection $con2
+--source include/stop_slave.inc
+
+--connection $con1
+--echo # Populating $con1 data
+--source $sql_input_file
+--source include/save_master_gtid.inc
+
+--let $MYSQLD_DATADIR=`select @@datadir`
+--let $MYSQLBINLOG_STDERR=$MYSQLD_DATADIR/mysqlbinlog_stderr.out
+--let BINLOG_FILENAME= query_get_value(SHOW BINARY LOGS, Log_name, 1)
+--let BINLOG_FILE_PARAM= $MYSQLD_DATADIR/$BINLOG_FILENAME.orig
+--copy_file $MYSQLD_DATADIR/$BINLOG_FILENAME $BINLOG_FILE_PARAM
+
+--connection $con2
+--let $msbl_args=
+if (`SELECT strcmp("$start_position","") != 0`)
+{
+ eval set global gtid_slave_pos="$start_position";
+ --let $msbl_args= $msbl_args --start-position=$start_position
+}
+
+--let $cm_args= MASTER_USE_GTID=slave_pos
+if (`SELECT strcmp("$do_domain_ids","") != 0`)
+{
+ --let $cm_args= $cm_args, DO_DOMAIN_IDS=($do_domain_ids)
+ --let $msbl_args= $msbl_args --do-domain-ids=$do_domain_ids
+}
+if (`SELECT strcmp("$ignore_domain_ids","") != 0`)
+{
+ --let $cm_args= $cm_args, IGNORE_DOMAIN_IDS=($ignore_domain_ids)
+ --let $msbl_args= $msbl_args --ignore-domain-ids=$ignore_domain_ids
+}
+if (`SELECT strcmp("$ignore_server_ids","") != 0`)
+{
+ --let $cm_args= $cm_args, IGNORE_SERVER_IDS=($ignore_server_ids)
+ --let $msbl_args= $msbl_args --ignore-server-ids=$ignore_server_ids
+}
+if ($strict_mode)
+{
+ --let $msbl_args= $msbl_args --gtid-strict-mode
+}
+eval CHANGE MASTER TO $cm_args;
+
+--let $start_slave_args=
+if (`SELECT strcmp("$stop_position","") != 0`)
+{
+ --let $start_slave_args= UNTIL master_gtid_pos="$stop_position"
+ --let $msbl_args= $msbl_args --stop-position=$stop_position
+}
+
+eval START SLAVE $start_slave_args;
+
+if ($slave_sql_errno)
+{
+ --echo # $con2 SQL Thread error expected - waiting for errno $slave_sql_errno
+ --source include/wait_for_slave_sql_error.inc
+}
+
+# If we are not expecting an error, wait for con2 to catch up
+if (!$slave_sql_errno)
+{
+ --echo # No $con2 error expecting - waiting for $con2 to catch up to $con1
+
+ # Stop position was not specified
+ if (`SELECT strcmp("$stop_position","") = 0`)
+ {
+ --source include/sync_with_master_gtid.inc
+ }
+
+ # Stop position was specified
+ if (`SELECT strcmp("$stop_position","") != 0`)
+ {
+ --echo # Because there is a stop position we wait for all events to process
+ --echo # and $con2 to automatically stop
+ --source include/wait_for_slave_to_stop.inc
+ }
+}
+
+--echo # Stop $con2 so it stops receiving $con1 events.
+--source include/stop_slave.inc
+
+--connection $con1
+DROP TABLE IF EXISTS t1, t2, t3, t4, t5;
+RESET MASTER;
+--echo # MYSQL_BINLOG BINLOG_FILE_PARAM $msbl_args 2> MYSQLBINLOG_STDERR | MYSQL
+--exec $MYSQL_BINLOG $BINLOG_FILE_PARAM $msbl_args 2> $MYSQLBINLOG_STDERR | $MYSQL
+
+--source include/rpl_check_table_consistency.inc
+
+if ($strict_mode)
+{
+ --echo # Strict mode enabled - checking mysqlbinlog error output for out
+ --echo # of order GTIDs
+ --let SEARCH_FILE=$MYSQLBINLOG_STDERR
+ --let SEARCH_PATTERN=Found out of order GTID
+ if ($strict_mode_err)
+ {
+ --echo # Expecting to find out of order GTID error..
+ }
+ if (!$strict_mode_err)
+ {
+ --echo # Not expecting to find out of order GTID error..
+ }
+ --source include/search_pattern_in_file.inc
+}
+
+--echo # Test finished - resetting $con1 and $con2..
+--connection $con2
+RESET SLAVE;
+RESET MASTER;
+set global gtid_slave_pos="";
+CHANGE MASTER TO DO_DOMAIN_IDS=(), IGNORE_DOMAIN_IDS=(), IGNORE_SERVER_IDS=();
+
+--connection $con1
+RESET MASTER;
+DROP TABLE IF EXISTS t1, t2, t3, t4, t5;
+--source include/save_master_gtid.inc
+
+--connection $con2
+--source include/start_slave.inc
+--source include/wait_for_slave_to_start.inc
+--source include/sync_with_master_gtid.inc
+--source include/stop_slave.inc
+RESET SLAVE;
+set global gtid_slave_pos="";
+RESET MASTER;
+
+--connection $con1
+RESET MASTER;
+
+--connection $con2
+if ($strict_mode)
+{
+ set @@global.gtid_strict_mode=0;
+}
+--source include/start_slave.inc
+
+--connection $con1
+--remove_file $BINLOG_FILE_PARAM
+--remove_file $MYSQLBINLOG_STDERR
+
+--let $include_filename= mysqlbinlog_slave_consistency.inc
+--source include/end_include_file.inc