258 lines
11 KiB
Plaintext
258 lines
11 KiB
Plaintext
#
|
|
# Check that Group Replication parallel applier parallelization
|
|
# indexes are corrected according to WL#8440.
|
|
#
|
|
# Steps:
|
|
# 1. Setup a new group with four members.
|
|
# Execute some transactions on member 1, 2 and 3 that will
|
|
# be applied on member 4 through Group Replication applier.
|
|
# Dump Group Replication applier channel relay log and
|
|
# validate its indexes on member 4.
|
|
# 2. Stop and start member 2 to force a relay log flush.
|
|
# Start member 1 again and execute another transactions
|
|
# on members 1 and 2.
|
|
# Purpose of the test: show that local transactions do
|
|
# not interfere with remote transactions, the ones that
|
|
# go through parallel applier.
|
|
# Dump Group Replication applier channel relay log and
|
|
# validate its indexes on members 2 and 1.
|
|
# 3. Wait for stable set propagation and certification info
|
|
# garbage collection.
|
|
# Execute some more transactions and assert that
|
|
# last_committed index was update with previous
|
|
# sequence_number, even when transactions do not
|
|
# depend on previous transactions.
|
|
# Dump Group Replication applier channel relay log and
|
|
# validate its indexes on members 2 and 1.
|
|
# 4. Test cleanup.
|
|
#
|
|
--source include/big_test.inc
|
|
--source include/have_group_replication_plugin.inc
|
|
|
|
--echo
|
|
--echo ############################################################
|
|
--echo # 1. Setup a new group with four members.
|
|
--echo # Four view_change transactions will be logged on member
|
|
--echo # 4. All these transactions, when seen on member 4, will
|
|
--echo # have indexes:
|
|
--echo # server_id=4, last_committed=0, sequence_number=0
|
|
--echo #
|
|
--let $rpl_server_count= 4
|
|
--source include/group_replication.inc
|
|
|
|
--echo
|
|
--echo # Execute some transactions on member 1, 2 and 3 that will
|
|
--echo # be applied on member 4 through Group Replication applier.
|
|
--echo #
|
|
--let $rpl_connection_name= server1
|
|
--source include/rpl_connection.inc
|
|
# Transactions with empty write set need to be executed sequentially,
|
|
# so last_committed of this and next transaction are incremented.
|
|
# server_id=1, last_committed=4, sequence_number=5
|
|
CREATE TABLE t1 (c1 INT NOT NULL PRIMARY KEY) ENGINE=InnoDB;
|
|
--source include/rpl_sync.inc
|
|
|
|
--let $rpl_connection_name= server2
|
|
--source include/rpl_connection.inc
|
|
# Since previous transaction didn't have write set, last_committed
|
|
# was incremented.
|
|
# server_id=2, last_committed=5, sequence_number=6
|
|
SET GTID_NEXT= 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1';
|
|
INSERT INTO t1 VALUES (1);
|
|
SET GTID_NEXT= AUTOMATIC;
|
|
--source include/rpl_sync.inc
|
|
|
|
--let $rpl_connection_name= server3
|
|
--source include/rpl_connection.inc
|
|
# No dependencies from last transaction, last_committed is the same.
|
|
# server_id=1, last_committed=5, sequence_number=7
|
|
INSERT INTO t1 VALUES (3);
|
|
|
|
--let $rpl_connection_name= server1
|
|
--source include/rpl_connection.inc
|
|
# Dependencies found, last_committed will be updated.
|
|
# server_id=1, last_committed=6, sequence_number=8
|
|
UPDATE t1 SET c1=2 WHERE c1=1;
|
|
--source include/rpl_sync.inc
|
|
|
|
--let $rpl_connection_name= server1
|
|
--source include/rpl_connection.inc
|
|
--source include/stop_group_replication.inc
|
|
|
|
|
|
--echo
|
|
--echo # Dump Group Replication applier channel relay log and
|
|
--echo # validate its indexes on member 4.
|
|
--echo #
|
|
--let $rpl_connection_name= server4
|
|
--source include/rpl_connection.inc
|
|
|
|
--let $dump_file=$MYSQLTEST_VARDIR/tmp/group_replication_parallel_applier_indexes.dump
|
|
--exec $MYSQL_BINLOG --force-if-open $server_4_datadir/server-relay-log-group_replication_applier.000002 > $dump_file
|
|
--let $grep_file= $dump_file
|
|
--let $grep_pattern= last_committed
|
|
--let $grep_output= print_each
|
|
--replace_regex /# at [0-9]*/# at #/ /#[0-9]+/#time#/ /[[:space:]]+[0-9]+:[0-9]+:[0-9]+/ ##:##:##/ /end_log_pos [0-9]+/end_log_pos ##/ /original_committed_timestamp=[0-9]*/original_committed_timestamp=##:##:##/ /immediate_commit_timestamp=[0-9]*/immediate_commit_timestamp=##:##:##/ /transaction_length=[0-9]*/transaction_length=#/
|
|
--source include/grep_pattern.inc
|
|
|
|
--let $binlog_file= server-relay-log-group_replication_applier.000002
|
|
--let $logical_timestamps= 0 0;0 0;0 0;0 0;4 5;5 6;5 7;6 8
|
|
--source include/assert_logical_timestamps.inc
|
|
--let $is_relay_log= 1
|
|
--source include/assert_transaction_length.inc
|
|
|
|
|
|
--echo
|
|
--echo ############################################################
|
|
--echo # 2. Stop and start member 2 to force a relay log flush.
|
|
--echo # Start member 1 again and execute another transactions
|
|
--echo # on members 1 and 2.
|
|
--echo # Purpose of the test: show that local transactions do
|
|
--echo # not interfere with remote transactions, the ones that
|
|
--echo # go through parallel applier.
|
|
--echo #
|
|
--let $rpl_connection_name= server2
|
|
--source include/rpl_connection.inc
|
|
--source include/stop_group_replication.inc
|
|
# server_id=2, last_committed=0, sequence_number=0
|
|
--source include/start_group_replication.inc
|
|
|
|
--let $rpl_connection_name= server1
|
|
--source include/rpl_connection.inc
|
|
# server_id=1, last_committed=0, sequence_number=0
|
|
--source include/start_group_replication.inc
|
|
|
|
--let $rpl_connection_name= server3
|
|
--source include/rpl_connection.inc
|
|
# Server 1: server_id=3, last_committed=1, sequence_number=2
|
|
# Server 2: server_id=3, last_committed=2, sequence_number=3
|
|
INSERT INTO t1 VALUES (4);
|
|
--source include/rpl_sync.inc
|
|
|
|
--let $rpl_connection_name= server2
|
|
--source include/rpl_connection.inc
|
|
# This transaction does not increment server 2 last_committed
|
|
# or sequence_number indexes, but increments them on server 1.
|
|
# Server 1: last_committed=2 sequence_number=3
|
|
# Server 2: No effect
|
|
UPDATE t1 SET c1=5 WHERE c1=4;
|
|
--source include/rpl_sync.inc
|
|
|
|
--let $rpl_connection_name= server1
|
|
--source include/rpl_connection.inc
|
|
# This transaction does not increment server 1 last_committed
|
|
# or sequence_number indexes.
|
|
# Server 1: No effect
|
|
# Server 2: last_committed=2 sequence_number=4
|
|
INSERT INTO t1 VALUES (6);
|
|
--source include/rpl_sync.inc
|
|
|
|
--let $rpl_connection_name= server4
|
|
--source include/rpl_connection.inc
|
|
# Server 1: server_id=4, last_committed=1, sequence_number=4
|
|
# Server 2: server_id=4, last_committed=4, sequence_number=5
|
|
UPDATE t1 SET c1=7 WHERE c1=6;
|
|
--source include/rpl_sync.inc
|
|
|
|
|
|
--echo
|
|
--echo # Dump Group Replication applier channel relay log and
|
|
--echo # validate its indexes on member 2.
|
|
--echo #
|
|
--let $rpl_connection_name= server2
|
|
--source include/rpl_connection.inc
|
|
--exec $MYSQL_BINLOG --force-if-open $server_2_datadir/server-relay-log-group_replication_applier.000003 > $dump_file
|
|
--replace_regex /# at [0-9]*/# at #/ /#[0-9]+/#time#/ /[[:space:]]+[0-9]+:[0-9]+:[0-9]+/ ##:##:##/ /end_log_pos [0-9]+/end_log_pos ##/ /original_committed_timestamp=[0-9]*/original_committed_timestamp=##:##:##/ /immediate_commit_timestamp=[0-9]*/immediate_commit_timestamp=##:##:##/ /transaction_length=[0-9]*/transaction_length=#/
|
|
--source include/grep_pattern.inc
|
|
|
|
--let $binlog_file= server-relay-log-group_replication_applier.000003
|
|
--let $logical_timestamps= 0 0;0 0;2 3;2 4;4 5
|
|
--source include/assert_logical_timestamps.inc
|
|
--let $is_relay_log= 1
|
|
--source include/assert_transaction_length.inc
|
|
|
|
--echo
|
|
--echo # Dump Group Replication applier channel relay log and
|
|
--echo # validate its indexes on member 1.
|
|
--echo #
|
|
--let $rpl_connection_name= server1
|
|
--source include/rpl_connection.inc
|
|
--exec $MYSQL_BINLOG --force-if-open $server_1_datadir/server-relay-log-group_replication_applier.000003 > $dump_file
|
|
--replace_regex /# at [0-9]*/# at #/ /#[0-9]+/#time#/ /[[:space:]]+[0-9]+:[0-9]+:[0-9]+/ ##:##:##/ /end_log_pos [0-9]+/end_log_pos ##/ /original_committed_timestamp=[0-9]*/original_committed_timestamp=##:##:##/ /immediate_commit_timestamp=[0-9]*/immediate_commit_timestamp=##:##:##/ /transaction_length=[0-9]*/transaction_length=#/
|
|
--source include/grep_pattern.inc
|
|
|
|
--let $binlog_file= server-relay-log-group_replication_applier.000003
|
|
--let $logical_timestamps= 0 0;1 2;2 3;1 4
|
|
--source include/assert_logical_timestamps.inc
|
|
--let $is_relay_log= 1
|
|
--source include/assert_transaction_length.inc
|
|
|
|
|
|
--echo
|
|
--echo ############################################################
|
|
--echo # 3. Wait for stable set propagation and certification info
|
|
--echo # garbage collection.
|
|
--let $rpl_connection_name= server1
|
|
--source include/rpl_connection.inc
|
|
--let $wait_timeout= 180
|
|
--let $wait_condition= SELECT Transactions_committed_all_members<>"" FROM performance_schema.replication_group_member_stats where member_id in (SELECT @@server_uuid)
|
|
--source include/wait_condition.inc
|
|
|
|
--echo
|
|
--echo # Execute some more transactions and assert that
|
|
--echo # last_committed index was update with previous
|
|
--echo # sequence_number, even when transactions do not
|
|
--echo # depend on previous transactions.
|
|
--let $rpl_connection_name= server1
|
|
--source include/rpl_connection.inc
|
|
# Server 1: No effect
|
|
# Server 2: server_id=1, last_committed=6, sequence_number=7
|
|
INSERT INTO t1 VALUES (8);
|
|
|
|
--let $rpl_connection_name= server2
|
|
--source include/rpl_connection.inc
|
|
# Server 1: server_id=2, last_committed=5, sequence_number=6
|
|
# Server 2: No effect
|
|
INSERT INTO t1 VALUES (9);
|
|
--source include/rpl_sync.inc
|
|
|
|
--echo
|
|
--echo # Dump Group Replication applier channel relay log and
|
|
--echo # validate its indexes on member 2.
|
|
--echo #
|
|
--let $rpl_connection_name= server2
|
|
--source include/rpl_connection.inc
|
|
--exec $MYSQL_BINLOG --force-if-open $server_2_datadir/server-relay-log-group_replication_applier.000003 > $dump_file
|
|
--replace_regex /# at [0-9]*/# at #/ /#[0-9]+/#time#/ /[[:space:]]+[0-9]+:[0-9]+:[0-9]+/ ##:##:##/ /end_log_pos [0-9]+/end_log_pos ##/ /original_committed_timestamp=[0-9]*/original_committed_timestamp=##:##:##/ /immediate_commit_timestamp=[0-9]*/immediate_commit_timestamp=##:##:##/ /transaction_length=[0-9]*/transaction_length=#/
|
|
--source include/grep_pattern.inc
|
|
|
|
--let $binlog_file= server-relay-log-group_replication_applier.000003
|
|
--let $logical_timestamps= 0 0;0 0;2 3;2 4;4 5;6 7
|
|
--source include/assert_logical_timestamps.inc
|
|
--let $is_relay_log= 1
|
|
--source include/assert_transaction_length.inc
|
|
|
|
--echo
|
|
--echo # Dump Group Replication applier channel relay log and
|
|
--echo # validate its indexes on member 1.
|
|
--echo #
|
|
--let $rpl_connection_name= server1
|
|
--source include/rpl_connection.inc
|
|
--exec $MYSQL_BINLOG --force-if-open $server_1_datadir/server-relay-log-group_replication_applier.000003 > $dump_file
|
|
--replace_regex /# at [0-9]*/# at #/ /#[0-9]+/#time#/ /[[:space:]]+[0-9]+:[0-9]+:[0-9]+/ ##:##:##/ /end_log_pos [0-9]+/end_log_pos ##/ /original_committed_timestamp=[0-9]*/original_committed_timestamp=##:##:##/ /immediate_commit_timestamp=[0-9]*/immediate_commit_timestamp=##:##:##/ /transaction_length=[0-9]*/transaction_length=#/
|
|
--source include/grep_pattern.inc
|
|
|
|
--let $binlog_file= server-relay-log-group_replication_applier.000003
|
|
--let $logical_timestamps= 0 0;1 2;2 3;1 4;5 6
|
|
--source include/assert_logical_timestamps.inc
|
|
--let $is_relay_log= 1
|
|
--source include/assert_transaction_length.inc
|
|
|
|
|
|
--echo
|
|
--echo ############################################################
|
|
--echo # 4. Test cleanup.
|
|
DROP TABLE t1;
|
|
--source include/group_replication_end.inc
|
|
--remove_file $dump_file
|