1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
|
#
# MDEV-32282
#
# A node remains in paused state after two interleaving FTWRLs,
# and the following CREATE TABLE fails with
#
# ER_UNKNOWN_COM_ERROR (1047): Aborting TOI: Replication paused on
# node for FTWRL/BACKUP STAGE.
#
# node_1 node_1_a
# ----------------------------------------------------------------------
# FTWRL
# UNLOCK TABLES wait after resume_and_resync()
# FTWRL wait after desync_and_pause()
# continue
# continue
# UNLOCK TABLES
# CREATE TABLE fails
#
--source include/galera_cluster.inc
--source include/have_innodb.inc
--source include/have_debug_sync.inc
# Connection to control sync points
--connect node_1_ctrl, 127.0.0.1, root, , test, $NODE_MYPORT_1
SET SESSION wsrep_sync_wait=0;
--echo #
--echo # Case 1: FTWRL
--echo #
--connection node_1
SET SESSION wsrep_sync_wait=0;
FLUSH TABLES WITH READ LOCK;
SHOW STATUS LIKE 'wsrep_local_state_comment';
SET SESSION debug_sync = "wsrep_unlock_global_read_lock_after_resume_and_resync SIGNAL unlock_ready WAIT_FOR unlock_continue";
--send UNLOCK TABLES
--connection node_1_ctrl
SET debug_sync = "now WAIT_FOR unlock_ready";
--connect node_1_a, 127.0.0.1, root, , test, $NODE_MYPORT_1
--connection node_1_a
SET SESSION debug_sync = "wsrep_global_read_lock_block_commit_after_pause SIGNAL lock_ready WAIT_FOR lock_continue";
--send FLUSH TABLES WITH READ LOCK
--connection node_1_ctrl
SET debug_sync = "now WAIT_FOR lock_ready";
SET debug_sync = "now SIGNAL unlock_continue";
--connection node_1
--reap
--connection node_1_ctrl
SET debug_sync = "now SIGNAL lock_continue";
--connection node_1_a
--reap
UNLOCK TABLES;
--let $wait_condition = SELECT VARIABLE_VALUE = "Synced" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = "wsrep_local_state_comment"
--source include/wait_condition.inc
CREATE TABLE t1 (f1 INT PRIMARY KEY) ENGINE=InnoDB;
DROP TABLE t1;
--connection node_1_ctrl
SET debug_sync = "RESET";
--echo #
--echo # Case 2: BACKUP STAGE
--echo #
# Although BACKUP STAGE was not involved in MDEV-32282, add a testcase
# as it uses similar mechanism to pause and desync the node.
#
--connection node_1
SET SESSION wsrep_sync_wait=0;
BACKUP STAGE START;
BACKUP STAGE BLOCK_DDL;
SHOW STATUS LIKE 'wsrep_local_state_comment';
SET SESSION debug_sync = "wsrep_backup_stage_after_resume_and_resync SIGNAL resume_and_resync_ready WAIT_FOR resume_and_resync_continue";
--send BACKUP STAGE END
--connection node_1_ctrl
SET debug_sync = "now WAIT_FOR resume_and_resync_ready";
--connection node_1_a
BACKUP STAGE START;
SET SESSION debug_sync = "wsrep_backup_stage_after_desync_and_pause SIGNAL desync_and_pause_ready WAIT_FOR desync_and_pause_continue";
--send BACKUP STAGE BLOCK_DDL
--connection node_1_ctrl
SET debug_sync = "now WAIT_FOR desync_and_pause_ready";
SET debug_sync = "now SIGNAL resume_and_resync_continue";
--connection node_1
--reap
--connection node_1_ctrl
SET debug_sync = "now SIGNAL desync_and_pause_continue";
--connection node_1_a
--reap
BACKUP STAGE END;
--let $wait_condition = SELECT VARIABLE_VALUE = "Synced" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = "wsrep_local_state_comment"
--source include/wait_condition.inc
CREATE TABLE t1 (f1 INT PRIMARY KEY) ENGINE=InnoDB;
DROP TABLE t1;
--connection node_1_ctrl
SET debug_sync = "RESET";
--echo #
--echo # Case 3: FTWRL first, BACKUP STAGE second
--echo #
--connection node_1
SET SESSION wsrep_sync_wait=0;
SET SESSION wsrep_sync_wait=0;
FLUSH TABLES WITH READ LOCK;
SHOW STATUS LIKE 'wsrep_local_state_comment';
SET SESSION debug_sync = "wsrep_unlock_global_read_lock_after_resume_and_resync SIGNAL unlock_ready WAIT_FOR unlock_continue";
--send UNLOCK TABLES
--connection node_1_ctrl
SET debug_sync = "now WAIT_FOR unlock_ready";
--connection node_1_a
BACKUP STAGE START;
SET SESSION debug_sync = "wsrep_backup_stage_after_desync_and_pause SIGNAL desync_and_pause_ready WAIT_FOR desync_and_pause_continue";
--send BACKUP STAGE BLOCK_DDL
--connection node_1_ctrl
SET debug_sync = "now WAIT_FOR desync_and_pause_ready";
SET debug_sync = "now SIGNAL unlock_continue";
--connection node_1
--reap
--connection node_1_ctrl
SET debug_sync = "now SIGNAL desync_and_pause_continue";
--connection node_1_a
--reap
BACKUP STAGE END;
--let $wait_condition = SELECT VARIABLE_VALUE = "Synced" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = "wsrep_local_state_comment"
--source include/wait_condition.inc
CREATE TABLE t1 (f1 INT PRIMARY KEY) ENGINE=InnoDB;
DROP TABLE t1;
--connection node_1_ctrl
SET debug_sync = "RESET";
--echo #
--echo # Case 4: BACKUP STAGE first, then FTWRL
--echo #
--connection node_1
SET SESSION wsrep_sync_wait=0;
BACKUP STAGE START;
BACKUP STAGE BLOCK_DDL;
SHOW STATUS LIKE 'wsrep_local_state_comment';
SET SESSION debug_sync = "wsrep_backup_stage_after_resume_and_resync SIGNAL resume_and_resync_ready WAIT_FOR resume_and_resync_continue";
--send BACKUP STAGE END
--connection node_1_ctrl
SET debug_sync = "now WAIT_FOR resume_and_resync_ready";
--connection node_1_a
SET SESSION debug_sync = "wsrep_global_read_lock_block_commit_after_pause SIGNAL lock_ready WAIT_FOR lock_continue";
--send FLUSH TABLES WITH READ LOCK
--connection node_1_ctrl
SET debug_sync = "now WAIT_FOR lock_ready";
SET debug_sync = "now SIGNAL resume_and_resync_continue";
--connection node_1
--reap
--connection node_1_ctrl
SET debug_sync = "now SIGNAL lock_continue";
--connection node_1_a
--reap
UNLOCK TABLES;
--let $wait_condition = SELECT VARIABLE_VALUE = "Synced" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = "wsrep_local_state_comment"
--source include/wait_condition.inc
CREATE TABLE t1 (f1 INT PRIMARY KEY) ENGINE=InnoDB;
DROP TABLE t1;
--connection node_1_ctrl
SET debug_sync = "RESET";
|