############################################################################### # 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;