mirror of
https://github.com/MariaDB/server.git
synced 2025-02-12 00:15:35 +01:00
190 lines
5.7 KiB
Text
190 lines
5.7 KiB
Text
#
|
|
# Check that the node can cleanly shutdown in case of inconsistency
|
|
# (no locked up threads)
|
|
#
|
|
|
|
--source include/galera_cluster.inc
|
|
--source include/have_innodb.inc
|
|
--source include/have_debug.inc
|
|
--source include/have_debug_sync.inc
|
|
--source include/galera_have_debug_sync.inc
|
|
|
|
# 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_2
|
|
SELECT @@wsrep_slave_threads = 8;
|
|
|
|
#
|
|
# 1. Inconsistency on slave
|
|
#
|
|
--connection node_1
|
|
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 INT);
|
|
INSERT INTO t1 VALUES (1, 0),(2, 0),(3, 0),(4, 0),(5, 0),(6, 0),(7, 0),(8, 0);
|
|
|
|
--connection node_2
|
|
# Allow 1K slave queue woithout flow control
|
|
SET GLOBAL wsrep_provider_options='gcs.fc_limit=1K';
|
|
# Introduce 2 inconsistencies
|
|
SET wsrep_on=OFF;
|
|
DELETE FROM t1 WHERE f1 = 2;
|
|
DELETE FROM t1 WHERE f1 = 4;
|
|
SET wsrep_on=ON;
|
|
|
|
# Build up slave queue:
|
|
# - first 8 events will be picked by slave threads
|
|
# - one moreevent will be waiting in slave queue
|
|
LOCK TABLES t1 WRITE;
|
|
--connection node_1
|
|
UPDATE t1 SET f2 = 1 WHERE f1 = 1;
|
|
UPDATE t1 SET f2 = 1 WHERE f1 = 2;
|
|
UPDATE t1 SET f2 = 1 WHERE f1 = 3;
|
|
UPDATE t1 SET f2 = 1 WHERE f1 = 4;
|
|
UPDATE t1 SET f2 = 2 WHERE f1 = 4; /* dependent applier */
|
|
UPDATE t1 SET f2 = 3 WHERE f1 = 4; /* dependent applier */
|
|
UPDATE t1 SET f2 = 1 WHERE f1 = 5;
|
|
UPDATE t1 SET f2 = 1 WHERE f1 = 6;
|
|
UPDATE t1 SET f2 = 1 WHERE f1 = 7;
|
|
UPDATE t1 SET f2 = 1 WHERE f1 = 8;
|
|
|
|
--connection node_2
|
|
# make sure all events landed to slave queue
|
|
SET wsrep_on=OFF;
|
|
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_recv_queue';
|
|
--source include/wait_condition.inc
|
|
SET wsrep_on=ON;
|
|
UNLOCK TABLES;
|
|
--source include/wsrep_wait_disconnect.inc
|
|
# Wait for the node to shutdown replication
|
|
--let $members=0
|
|
--source include/wsrep_wait_membership.inc
|
|
|
|
--connection node_1
|
|
--let $members=2
|
|
--source include/wsrep_wait_membership.inc
|
|
--source include/wait_until_ready.inc
|
|
SHOW STATUS LIKE 'wsrep_cluster_size';
|
|
SELECT * FROM t1;
|
|
|
|
--connection node_2
|
|
#Gracefully restart the node
|
|
SET GLOBAL wsrep_on=OFF;
|
|
--source include/shutdown_mysqld.inc
|
|
--source include/start_mysqld.inc
|
|
--source include/galera_wait_ready.inc
|
|
|
|
--let $wait_condition = SELECT COUNT(*)=1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1';
|
|
--source include/wait_condition.inc
|
|
DROP TABLE t1;
|
|
|
|
#
|
|
# 2. Inconsistency on master
|
|
#
|
|
--connection node_1
|
|
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 INT);
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (1, 0);
|
|
INSERT INTO t1 VALUES (2, 0);
|
|
INSERT INTO t1 VALUES (3, 0);
|
|
INSERT INTO t1 VALUES (4, 0);
|
|
INSERT INTO t1 VALUES (5, 0);
|
|
INSERT INTO t1 VALUES (6, 0);
|
|
INSERT INTO t1 VALUES (7, 0);
|
|
INSERT INTO t1 VALUES (8, 0);
|
|
COMMIT;
|
|
CREATE TABLE t2 (f1 INTEGER PRIMARY KEY, f2 INT);
|
|
|
|
--connection node_2
|
|
# Allow 1K slave queue without flow control
|
|
SET GLOBAL wsrep_provider_options='gcs.fc_limit=1K';
|
|
# Introduce inconsistency
|
|
SET wsrep_on=OFF;
|
|
--let $wait_condition = SELECT COUNT(*)=1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't2';
|
|
--source include/wait_condition.inc
|
|
DROP TABLE t2;
|
|
SET wsrep_on=ON;
|
|
|
|
# set up sync point to ensure DROP TABLE replication order below
|
|
--let galera_sync_point = after_replicate_sync
|
|
--source include/galera_set_sync_point.inc
|
|
|
|
# Build up slave queue:
|
|
# - first 8 events will be picked by slave threads
|
|
# - one more event will be waiting in slave queue
|
|
LOCK TABLES t1 READ;
|
|
|
|
--connection node_1
|
|
UPDATE t1 SET f2 = 1 WHERE f1 = 1;
|
|
UPDATE t1 SET f2 = 1 WHERE f1 = 2;
|
|
UPDATE t1 SET f2 = 1 WHERE f1 = 3;
|
|
UPDATE t1 SET f2 = 1 WHERE f1 = 4;
|
|
UPDATE t1 SET f2 = 2 WHERE f1 = 4; /* dependent applier */;
|
|
|
|
# interleave a failing statement
|
|
--connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2
|
|
--connection node_2a
|
|
--send DROP TABLE t2;
|
|
|
|
# make sure DROP TABLE from above has replicated
|
|
--connection node_2
|
|
SET wsrep_on=OFF;
|
|
--echo "Wait for DROP TABLE to replicate"
|
|
--source include/galera_wait_sync_point.inc
|
|
--source include/galera_signal_sync_point.inc
|
|
--source include/galera_clear_sync_point.inc
|
|
--echo "DROP TABLE replicated"
|
|
SET wsrep_on=ON;
|
|
|
|
--connection node_1
|
|
UPDATE t1 SET f2 = 3 WHERE f1 = 4; /* dependent applier */
|
|
UPDATE t1 SET f2 = 1 WHERE f1 = 5;
|
|
UPDATE t1 SET f2 = 1 WHERE f1 = 6;
|
|
UPDATE t1 SET f2 = 1 WHERE f1 = 7;
|
|
UPDATE t1 SET f2 = 1 WHERE f1 = 8;
|
|
|
|
--connection node_2
|
|
# make sure all events landed to slave queue
|
|
SET wsrep_on=OFF;
|
|
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_recv_queue';
|
|
--source include/wait_condition.inc
|
|
SET wsrep_on=ON;
|
|
UNLOCK TABLES;
|
|
|
|
--connection node_2a
|
|
--error ER_BAD_TABLE_ERROR
|
|
--reap
|
|
|
|
--connection node_1
|
|
--let $members=2
|
|
--source include/wsrep_wait_membership.inc
|
|
--source include/wait_until_ready.inc
|
|
SHOW STATUS LIKE 'wsrep_cluster_size';
|
|
SELECT * FROM t1;
|
|
|
|
--connection node_2
|
|
--source include/wsrep_wait_disconnect.inc
|
|
# Wait for the node to shutdown replication
|
|
--let $members=0
|
|
--source include/wsrep_wait_membership.inc
|
|
# Gracefully restart the node
|
|
SET GLOBAL wsrep_on=OFF;
|
|
--source include/shutdown_mysqld.inc
|
|
--source include/start_mysqld.inc
|
|
--source include/galera_wait_ready.inc
|
|
|
|
--let $wait_condition = SELECT COUNT(*)=1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1';
|
|
--source include/wait_condition.inc
|
|
|
|
DROP TABLE t1;
|
|
|
|
CALL mtr.add_suppression("Can't find record in 't1'");
|
|
CALL mtr.add_suppression("Update_rows_v1 apply failed");
|
|
CALL mtr.add_suppression("Inconsistency detected: Inconsistent by consensus on");
|
|
CALL mtr.add_suppression("last left .* greater than drain seqno");
|
|
CALL mtr.add_suppression("WSREP: Failed to apply write set: ");
|
|
|
|
# Restore original auto_increment_offset values.
|
|
--source ../galera/include/auto_increment_offset_restore.inc
|