mirror of
https://github.com/MariaDB/server.git
synced 2026-05-16 20:07:13 +02:00
Test galera_suspend_slave checks that after suspending a galera
node, like this:
```
--perl
my $pid_filename = $ENV{'NODE_2_PIDFILE'};
my $mysqld_pid = `cat $pid_filename`;
chomp($mysqld_pid);
system("kill -SIGSTOP $mysqld_pid");
exit(0);
EOF
```
the remaining one node cluster is no longer able to successfully
INSERT new rows:
```
--error ER_UNKNOWN_COM_ERROR,ER_LOCK_WAIT_TIMEOUT,ER_LOCK_DEADLOCK,ER_ERROR_DURING_COMMIT
INSERT INTO t1 VALUES (1);
```
On rare occasions when the system is overloaded, it appears that
suspending the process with ```system("kill -SIGSTOP $mysqld_pid")```
takes some time, enough for the subsequent INSERT to succeed. In which
case the test fails because it rightly expects the INSERT to fail.
To fix the problem, the patch makes sure that the cluster has shrinked
to one node, before trying to INSERT the new value.
67 lines
1.7 KiB
Text
67 lines
1.7 KiB
Text
##
|
|
## This test tests that transactions on the master will fail if the slave
|
|
## is made completely unresponsive by suspending the process. Resuming the
|
|
## process should allow replication to continue to run.
|
|
##
|
|
|
|
--source include/galera_cluster.inc
|
|
--source include/have_innodb.inc
|
|
|
|
# Save original auto_increment_offset values.
|
|
--let $node_1=node_1
|
|
--let $node_2=node_2
|
|
--source include/auto_increment_offset_save.inc
|
|
|
|
--connection node_1
|
|
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
|
|
|
--connection node_2
|
|
--let NODE_2_PIDFILE = `SELECT @@pid_file`
|
|
--disconnect node_2
|
|
|
|
--connection node_1
|
|
--echo Suspending node_2 ...
|
|
--perl
|
|
my $pid_filename = $ENV{'NODE_2_PIDFILE'};
|
|
my $mysqld_pid = `cat $pid_filename`;
|
|
chomp($mysqld_pid);
|
|
system("kill -SIGSTOP $mysqld_pid");
|
|
exit(0);
|
|
EOF
|
|
|
|
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
|
|
|
|
--error ER_UNKNOWN_COM_ERROR,ER_LOCK_WAIT_TIMEOUT,ER_LOCK_DEADLOCK,ER_ERROR_DURING_COMMIT
|
|
INSERT INTO t1 VALUES (1);
|
|
|
|
--echo Resuming node_2 ...
|
|
--perl
|
|
my $pid_filename = $ENV{'NODE_2_PIDFILE'};
|
|
my $mysqld_pid = `cat $pid_filename`;
|
|
chomp($mysqld_pid);
|
|
system("kill -SIGCONT $mysqld_pid");
|
|
exit(0);
|
|
EOF
|
|
|
|
--source include/wait_until_ready.inc
|
|
INSERT INTO t1 VALUES (1);
|
|
|
|
--let $galera_connection_name = node_2a
|
|
--let $galera_server_number = 2
|
|
--source include/galera_connect.inc
|
|
--connection node_2a
|
|
|
|
SET SESSION wsrep_sync_wait = 0;
|
|
--source include/wait_until_ready.inc
|
|
SELECT COUNT(*) = 1 FROM t1;
|
|
|
|
SET SESSION wsrep_sync_wait = 15;
|
|
DROP TABLE t1;
|
|
|
|
# Restore original auto_increment_offset values.
|
|
--let $node_2=node_2a
|
|
--source include/auto_increment_offset_restore.inc
|
|
|