Commit dfb19c06 authored by mkaruza's avatar mkaruza

MDEV-15933 Cannot resume Node SYNCED state when wsrep_desync is done after FTWRL

Manually setting wsrep_desync after FTWRL should not be allowed.
parent 1d10c9af
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1); INSERT INTO t1 VALUES (1);
SET GLOBAL wsrep_provider_options = 'gcs.fc_limit=1'; SET GLOBAL wsrep_provider_options = 'gcs.fc_limit=1';
SET GLOBAL wsrep_desync = TRUE;
FLUSH TABLES WITH READ LOCK; FLUSH TABLES WITH READ LOCK;
INSERT INTO t1 VALUES (2); INSERT INTO t1 VALUES (2);
INSERT INTO t1 VALUES (3); INSERT INTO t1 VALUES (3);
...@@ -16,7 +15,6 @@ SET SESSION wsrep_sync_wait = 0; ...@@ -16,7 +15,6 @@ SET SESSION wsrep_sync_wait = 0;
SELECT COUNT(*) = 1 FROM t1; SELECT COUNT(*) = 1 FROM t1;
COUNT(*) = 1 COUNT(*) = 1
1 1
SET GLOBAL wsrep_desync = FALSE;
UNLOCK TABLES; UNLOCK TABLES;
SET SESSION wsrep_sync_wait = 1; SET SESSION wsrep_sync_wait = 1;
SELECT COUNT(*) = 10 FROM t1; SELECT COUNT(*) = 10 FROM t1;
......
# #
# Test wsrep_desync = ON . Node should temporarily not participate in flow control # Desync will be done once the global read lock is acquired and resync will be done when
# it is released.
# Node should temporarily not participate in flow control
# so even if fc_limit has been reached, the master should be able to continue to # so even if fc_limit has been reached, the master should be able to continue to
# commit transactions. # commit transactions.
# #
...@@ -13,7 +15,6 @@ INSERT INTO t1 VALUES (1); ...@@ -13,7 +15,6 @@ INSERT INTO t1 VALUES (1);
--connection node_2 --connection node_2
--let $wsrep_provider_options_orig = `SELECT @@wsrep_provider_options` --let $wsrep_provider_options_orig = `SELECT @@wsrep_provider_options`
SET GLOBAL wsrep_provider_options = 'gcs.fc_limit=1'; SET GLOBAL wsrep_provider_options = 'gcs.fc_limit=1';
SET GLOBAL wsrep_desync = TRUE;
# Block the slave applier thread # Block the slave applier thread
FLUSH TABLES WITH READ LOCK; FLUSH TABLES WITH READ LOCK;
...@@ -37,8 +38,6 @@ SET SESSION wsrep_sync_wait = 0; ...@@ -37,8 +38,6 @@ SET SESSION wsrep_sync_wait = 0;
# No updates have arrived after the FLUSH TABLES # No updates have arrived after the FLUSH TABLES
SELECT COUNT(*) = 1 FROM t1; SELECT COUNT(*) = 1 FROM t1;
# Resync the slave
SET GLOBAL wsrep_desync = FALSE;
--disable_query_log --disable_query_log
--eval SET GLOBAL wsrep_provider_options = '$wsrep_provider_options_orig'; --eval SET GLOBAL wsrep_provider_options = '$wsrep_provider_options_orig';
--enable_query_log --enable_query_log
......
...@@ -587,6 +587,12 @@ bool wsrep_desync_check (sys_var *self, THD* thd, set_var* var) ...@@ -587,6 +587,12 @@ bool wsrep_desync_check (sys_var *self, THD* thd, set_var* var)
return true; return true;
} }
if (thd->global_read_lock.is_acquired())
{
my_message (ER_CANNOT_USER, "Global read lock acquired. Can't set 'wsrep_desync'", MYF(0));
return true;
}
bool new_wsrep_desync= (bool) var->save_result.ulonglong_value; bool new_wsrep_desync= (bool) var->save_result.ulonglong_value;
if (wsrep_desync == new_wsrep_desync) { if (wsrep_desync == new_wsrep_desync) {
if (new_wsrep_desync) { if (new_wsrep_desync) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment