MINI MINI MANI MO
################################################################################
# This test confirms that when START GR and UNINSTALL PLUGIN GR commands are
# executed concurrently, no deadlock happens.
#
# Test:
# 0. The test requires one server.
# 1. Setup GR environment and execute START GR.
# 2. Block start, so we can execute UNINSTALL.
# 3. Execute UNINSTALL PLUGIN GR should fail with error
# ER_PLUGIN_CANNOT_BE_UNINSTALLED as START GR is already running.
# 4. SIGNAL START GR to resume processing.
# 5. Confirm GR is started
# 6. Cleanup
#
################################################################################
--source include/have_debug.inc
--source include/have_debug_sync.inc
--source ../inc/have_group_replication_plugin.inc
--let $rpl_skip_group_replication_start= 1
--source ../inc/group_replication.inc
--echo
--echo # 1. Setup GR environment and execute START GR.
--echo
--let $rpl_connection_name= server1
--source include/rpl_connection.inc
SET GLOBAL group_replication_bootstrap_group=ON;
--replace_result $group_replication_group_name GROUP_REPLICATION_GROUP_NAME
--eval SET GLOBAL group_replication_group_name= "$group_replication_group_name"
--echo
--echo # 2. Block start, so we can execute UNINSTALL.
--echo
## If START GR gets lock and UNINSTALL blocks SQL Query execution,
## GR used to deadlock.
SET @debug_save= @@GLOBAL.DEBUG;
SET @@GLOBAL.DEBUG= '+d,group_replication_wait_on_start';
--send START GROUP_REPLICATION
--echo
--echo # 3. Execute UNINSTALL PLUGIN GR should fail with error
--echo # ER_PLUGIN_CANNOT_BE_UNINSTALLED as START GR is already running.
--echo
--let $rpl_connection_name= server_1
--source include/rpl_connection.inc
# Wait for the debug sync to be reached.
SET DEBUG_SYNC= "now WAIT_FOR signal.start_waiting";
--error ER_PLUGIN_CANNOT_BE_UNINSTALLED
UNINSTALL PLUGIN group_replication;
--echo
--echo # 4. SIGNAL START GR to resume processing.
--echo
SET DEBUG_SYNC= 'now SIGNAL signal.start_continue';
--let $rpl_connection_name= server1
--source include/rpl_connection.inc
--reap
--echo
--echo # 5. Confirm GR is started
--echo
--let $group_replication_member_state= ONLINE
--source ../inc/gr_wait_for_member_state.inc
--echo
--echo # 6. Cleanup
--echo
SET @@GLOBAL.DEBUG= @debug_save;
--source ../inc/group_replication_end.inc
OHA YOOOO