|
| 1 | +################################################################################ |
| 2 | +# This test resolves Deadlock. GR deadlocks when START GR and |
| 3 | +# UNINSTALL happens at same time. |
| 4 | +# |
| 5 | +# Test: |
| 6 | +# 0. The test requires one server. |
| 7 | +# 1. Setup GR environment and execute START GR. |
| 8 | +# 2. Block start, so we can execute UNINSTALL. |
| 9 | +# 3. Execute UNINSTALL PLUGIN GR. |
| 10 | +# 4. SIGNAL START GR to resume processing. |
| 11 | +# 5. Confirm plugin is UNINSTALLED |
| 12 | +# 6. Cleanup |
| 13 | +# |
| 14 | +################################################################################ |
| 15 | +--source ../inc/have_group_replication_plugin.inc |
| 16 | +--let $rpl_skip_group_replication_start= 1 |
| 17 | +--source ../inc/group_replication.inc |
| 18 | + |
| 19 | +--echo |
| 20 | +--echo # 1. Setup GR environment and execute START GR. |
| 21 | +--echo |
| 22 | + |
| 23 | +--let $rpl_connection_name= server1 |
| 24 | +--source include/rpl_connection.inc |
| 25 | + |
| 26 | +SET GLOBAL group_replication_bootstrap_group=ON; |
| 27 | +SET GLOBAL group_replication_group_name = '8a94f357-bbbb-22aa-33bb-cccaaa420000'; |
| 28 | + |
| 29 | +--echo |
| 30 | +--echo # 2. Block start, so we can execute UNINSTALL. |
| 31 | +--echo |
| 32 | + |
| 33 | +## If START GR gets lock and UNINSTALL blocks SQL Query execution, |
| 34 | +## GR used to deadlock. |
| 35 | + |
| 36 | +SET @debug_save= @@GLOBAL.DEBUG; |
| 37 | +SET @@GLOBAL.DEBUG= 'd,group_replication_wait_on_start'; |
| 38 | + |
| 39 | +--send START GROUP_REPLICATION |
| 40 | + |
| 41 | +--echo |
| 42 | +--echo # 3. Execute UNINSTALL PLUGIN GR from second connection. |
| 43 | +--echo |
| 44 | +--let $rpl_connection_name= server_1 |
| 45 | +--source include/rpl_connection.inc |
| 46 | +# Wait for the debug sync to be reached. |
| 47 | +SET DEBUG_SYNC= "now WAIT_FOR signal.start_waiting"; |
| 48 | + |
| 49 | +UNINSTALL PLUGIN group_replication; |
| 50 | + |
| 51 | +--echo Wait for group replication plugin to be deleted. |
| 52 | +--let $wait_condition= SELECT COUNT(*)=1 from information_schema.plugins where PLUGIN_NAME like 'group_replication' and PLUGIN_STATUS like 'DELETED'; |
| 53 | +--source include/wait_condition.inc |
| 54 | + |
| 55 | +--echo |
| 56 | +--echo # 4. SIGNAL START GR to resume processing. |
| 57 | +--echo |
| 58 | +SET DEBUG_SYNC= 'now SIGNAL signal.start_continue'; |
| 59 | + |
| 60 | +--let $rpl_connection_name= server1 |
| 61 | +--source include/rpl_connection.inc |
| 62 | +--reap |
| 63 | + |
| 64 | +--echo |
| 65 | +--echo # 5. Confirm plugin is UNINSTALLED. |
| 66 | +--echo |
| 67 | + |
| 68 | +--echo Wait for group replication plugin to be removed. |
| 69 | +--let $wait_condition= SELECT COUNT(*)=0 from information_schema.plugins where PLUGIN_NAME like 'group_replication'; |
| 70 | +--source include/wait_condition.inc |
| 71 | + |
| 72 | +--echo |
| 73 | +--echo # 6. Cleanup |
| 74 | +--echo |
| 75 | +--replace_result $GROUP_REPLICATION GROUP_REPLICATION |
| 76 | +--eval INSTALL PLUGIN group_replication SONAME '$GROUP_REPLICATION' |
| 77 | +--enable_warnings |
| 78 | + |
| 79 | +SET @@GLOBAL.DEBUG= @debug_save; |
| 80 | +--source ../inc/group_replication_end.inc |
0 commit comments