diff options
Diffstat (limited to 'mysql-test/suite/galera_3nodes_sr/t/galera_sr_threeway_split_no_primary.test')
-rw-r--r-- | mysql-test/suite/galera_3nodes_sr/t/galera_sr_threeway_split_no_primary.test | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/mysql-test/suite/galera_3nodes_sr/t/galera_sr_threeway_split_no_primary.test b/mysql-test/suite/galera_3nodes_sr/t/galera_sr_threeway_split_no_primary.test new file mode 100644 index 00000000000..f9aab8316f1 --- /dev/null +++ b/mysql-test/suite/galera_3nodes_sr/t/galera_sr_threeway_split_no_primary.test @@ -0,0 +1,126 @@ +# +# This test verifies that an orphaned SR gets cleanup upon cluster +# reconnection. Specifically, the case where the cluster goes through +# a state of no primary components, and the nodes rejoin with the +# same IDs. +# + +--source include/galera_cluster.inc + +--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1 +--connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2 +--connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3 +--connect node_3a, 127.0.0.1, root, , test, $NODE_MYPORT_3 + +# Save original auto_increment_offset values. +--let $node_1=node_1 +--let $node_2=node_2 +--let $node_3=node_3 +--source ../galera/include/auto_increment_offset_save.inc + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY); +SET SESSION wsrep_trx_fragment_size=1; +BEGIN; +INSERT INTO t1 VALUES (11); +INSERT INTO t1 VALUES (12); + +--connection node_2 +SET SESSION wsrep_trx_fragment_size=1; +BEGIN; +INSERT INTO t1 VALUES (21); +INSERT INTO t1 VALUES (22); + +--connection node_3 +SET SESSION wsrep_trx_fragment_size=1; +BEGIN; +INSERT INTO t1 VALUES (31); +INSERT INTO t1 VALUES (32); + +--connection node_2a +SET GLOBAL wsrep_provider_options = 'gmcast.isolate = 1'; + +--connection node_3a +SET GLOBAL wsrep_provider_options = 'gmcast.isolate = 1'; + +--connection node_1a +# wait until cluster is partitioned +SET SESSION wsrep_sync_wait = 0; +--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc +SHOW STATUS LIKE 'wsrep_cluster_status'; +SET SESSION wsrep_sync_wait = DEFAULT; + +--connection node_2a +# wait until cluster is partitioned +SET SESSION wsrep_sync_wait = 0; +--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc +SHOW STATUS LIKE 'wsrep_cluster_status'; +SET SESSION wsrep_sync_wait = DEFAULT; + +--connection node_3a +# wait until cluster is partitioned +SET SESSION wsrep_sync_wait = 0; +--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc +SHOW STATUS LIKE 'wsrep_cluster_status'; +SET SESSION wsrep_sync_wait = DEFAULT; + +--connection node_2a +# reconnect node 2 +SET GLOBAL wsrep_provider_options = 'gmcast.isolate = 0'; + +--connection node_3a +# reconnect node 3 +SET GLOBAL wsrep_provider_options = 'gmcast.isolate = 0'; + +# wait for the cluster to whole again +--connection node_1a +--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc +--source include/galera_wait_ready.inc + +--connection node_2a +--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc +--source include/galera_wait_ready.inc + +--connection node_3a +--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc +--source include/galera_wait_ready.inc + +--connection node_1a +# check that the streaming log has been cleared and there are no locks +# from the SRs by issuing conflicting inserts +SELECT COUNT(*) `expect 0` FROM mysql.wsrep_streaming_log; +INSERT INTO t1 VALUES(11); +INSERT INTO t1 VALUES(21); +INSERT INTO t1 VALUES(31); +SELECT * FROM t1; + +--connection node_2a +SELECT COUNT(*) `expect 0` FROM mysql.wsrep_streaming_log; +--connection node_3a +SELECT COUNT(*) `expect 0` FROM mysql.wsrep_streaming_log; + + +# check that all 3 SRs have been rolled back +--connection node_1 +--error ER_LOCK_DEADLOCK +INSERT INTO t1 VALUES(103); + +--connection node_2 +--error ER_LOCK_DEADLOCK +INSERT INTO t1 VALUES(203); + +--connection node_3 +--error ER_LOCK_DEADLOCK +INSERT INTO t1 VALUES(303); + +--connection node_1 +DROP TABLE t1; + +# Restore original auto_increment_offset values. +--source ../galera/include/auto_increment_offset_restore.inc |