mirror of
https://github.com/MariaDB/server.git
synced 2025-08-24 14:48:09 +03:00
Fix the bug properly (plugin cannot be unloaded as long as it's locked). Enable and fix the test case. Significantly reduce number of LOCK_plugin locks for semisync (practically all locks were removed)
131 lines
5.3 KiB
Plaintext
131 lines
5.3 KiB
Plaintext
###############################################################################
|
|
# Bug#17638477 UNINSTALL AND INSTALL SEMI-SYNC PLUGIN CAUSES SLAVES TO BREAK
|
|
# Problem: Uninstallation of Semi sync plugin should be blocked when it is
|
|
# in use.
|
|
# Test case: Uninstallation of semi sync should be allowed
|
|
# On Master:
|
|
# 1) When there is no dump thread
|
|
# 2) When there are no semi sync slaves (i.e., async replication).
|
|
# On Slave:
|
|
# 1) When there is no I/O thread
|
|
# 2) When there are no semi sync enabled I/O thread (i.e.,async replication).
|
|
###############################################################################
|
|
|
|
--source include/have_semisync_plugin.inc
|
|
--source include/not_embedded.inc
|
|
--source include/have_binlog_format_statement.inc
|
|
--source include/master-slave.inc
|
|
|
|
###############################################################################
|
|
# Case 1: Uninstallation of semi sync plugins should be allowed when it is
|
|
# not in use i.e., when asynchronous replication is active.
|
|
###############################################################################
|
|
# Step 1.1: Install semi sync master plugin on master
|
|
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master';
|
|
|
|
# Step 1.2: Install semi sync slave plugin on slave
|
|
--connection slave
|
|
--echo [connection slave]
|
|
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave';
|
|
|
|
# Step 1.3: Uninstallation of semisync plugin on master and slave should be
|
|
# allowed at this state as there is no semi sync replication enabled between
|
|
# master and slave.
|
|
UNINSTALL PLUGIN rpl_semi_sync_slave;
|
|
--connection master
|
|
--echo [connection master]
|
|
UNINSTALL PLUGIN rpl_semi_sync_master;
|
|
|
|
# Step 1.4: Check that replication is working fine at the end of the test case.
|
|
CREATE TABLE t1(i int);
|
|
INSERT INTO t1 values (1);
|
|
DROP TABLE t1;
|
|
--sync_slave_with_master
|
|
--echo [connection slave]
|
|
|
|
###############################################################################
|
|
# Case 2: Uninstallation of semi sync plugins should be disallowed
|
|
# when it is in use i.e., when semi sync replication is active
|
|
###############################################################################
|
|
# Step 2.1: Install and enable semi sync replication between master and slave
|
|
--source include/install_semisync.inc
|
|
|
|
# Step 2.2: Check that rpl_semi_sync_slave uninstallation on Slave is not
|
|
# possible at this state
|
|
--connection slave
|
|
--echo [connection slave]
|
|
UNINSTALL PLUGIN rpl_semi_sync_slave;
|
|
select plugin_name,plugin_status from information_schema.plugins where plugin_name like 'rpl_%';
|
|
|
|
# Step 2.3: Check that rpl_semi_sync_master uninstallation on Master is not
|
|
# possible at this state
|
|
--connection master
|
|
--echo [connection master]
|
|
UNINSTALL PLUGIN rpl_semi_sync_master;
|
|
select plugin_name,plugin_status from information_schema.plugins where plugin_name like 'rpl_%';
|
|
|
|
# Step 2.4: Check that replication is working fine at the end of the test case.
|
|
CREATE TABLE t1(i int);
|
|
INSERT INTO t1 values (2);
|
|
DROP TABLE t1;
|
|
--sync_slave_with_master
|
|
--echo [connection slave]
|
|
|
|
# Step 2.5: Make sure rpl_semi_sync_master_status on Master and
|
|
# rpl_semi_sync_slave_staus on Slave are ON
|
|
show status like "Rpl_semi_sync_slave_status";
|
|
|
|
###############################################################################
|
|
# Case 3: Uninstallation of semi sync plugin should be disallowed when there
|
|
# are semi sync slaves even though rpl_semi_sync_master_enabled= OFF;.
|
|
###############################################################################
|
|
# Step 3.1: Disable semi sync on master
|
|
--connection master
|
|
--echo [connection master]
|
|
show status like "Rpl_semi_sync_master_status";
|
|
|
|
# Step 3.2: Check that still Rpl_semi_sync_master_clients is 1
|
|
show status like "Rpl_semi_sync_master_clients";
|
|
|
|
# Step 3.3: Since Rpl_semi_sync_master_clients is 1, uninstallation of
|
|
# rpl_semi_sync_master should be disallowed.
|
|
select plugin_name,plugin_status from information_schema.plugins where plugin_name like 'rpl_%';
|
|
|
|
###############################################################################
|
|
# Case 4: Uninstallation of semi sync plugin should be allowed when it is not
|
|
# in use. Same as Case 1 but this case is to check the case after enabling and
|
|
# disabling semi sync replication.
|
|
###############################################################################
|
|
|
|
# Step 4.1: Stop IO thread on slave.
|
|
--connection slave
|
|
--echo [connection slave]
|
|
--source include/stop_slave.inc
|
|
|
|
# Step 4.2: Disable semi sync on slave.
|
|
select plugin_name,plugin_status from information_schema.plugins where plugin_name like 'rpl_%';
|
|
|
|
# Step 4.3: Start IO thread on slave.
|
|
--source include/start_slave.inc
|
|
|
|
# Step 4.4: Uninstall semi sync plugin, it should be successful now.
|
|
select plugin_name,plugin_status from information_schema.plugins where plugin_name like 'rpl_%';
|
|
|
|
# Step 4.5: On Master, check that semi sync slaves are now '0'.
|
|
--connection master
|
|
--echo [connection master]
|
|
show status like "Rpl_semi_sync_master_clients";
|
|
|
|
# Step 4.6: So uninstalling semi sync plugin should be allowed
|
|
select plugin_name,plugin_status from information_schema.plugins where plugin_name like 'rpl_%';
|
|
|
|
# Step 4.7: Check that replication is working fine at the end of the test case
|
|
CREATE TABLE t1(i int);
|
|
INSERT INTO t1 values (3);
|
|
DROP TABLE t1;
|
|
--sync_slave_with_master
|
|
--echo [connection slave]
|
|
|
|
# Cleanup
|
|
source include/rpl_end.inc;
|