summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/lock.cc9
-rw-r--r--sql/wsrep_mysqld.cc4
-rw-r--r--sql/wsrep_mysqld.h1
3 files changed, 11 insertions, 3 deletions
diff --git a/sql/lock.cc b/sql/lock.cc
index fea28753739..7153b85d740 100644
--- a/sql/lock.cc
+++ b/sql/lock.cc
@@ -1073,7 +1073,8 @@ void Global_read_lock::unlock_global_read_lock(THD *thd)
{
wsrep_locked_seqno= WSREP_SEQNO_UNDEFINED;
wsrep->resume(wsrep);
- if (!wsrep_desync && !wsrep_node_is_donor())
+ /* resync here only if we did implicit desync earlier */
+ if (!wsrep_desync && wsrep_node_is_synced())
{
int ret = wsrep->resync(wsrep);
if (ret != WSREP_OK)
@@ -1149,8 +1150,10 @@ bool Global_read_lock::make_global_read_lock_block_commit(THD *thd)
DBUG_RETURN(FALSE);
}
- /* if already desynced or donor, avoid double desyncing */
- if (wsrep_desync || wsrep_node_is_donor())
+ /* if already desynced or donor, avoid double desyncing
+ if not in PC and synced, desyncing is not possible either
+ */
+ if (wsrep_desync || !wsrep_node_is_synced())
{
WSREP_DEBUG("desync set upfont, skipping implicit desync for FTWRL: %d",
wsrep_desync);
diff --git a/sql/wsrep_mysqld.cc b/sql/wsrep_mysqld.cc
index 734406080e9..e392aef32eb 100644
--- a/sql/wsrep_mysqld.cc
+++ b/sql/wsrep_mysqld.cc
@@ -1592,3 +1592,7 @@ bool wsrep_node_is_donor()
{
return (WSREP_ON) ? (local_status.get() == 2) : false;
}
+bool wsrep_node_is_synced()
+{
+ return (WSREP_ON) ? (local_status.get() == 4) : false;
+}
diff --git a/sql/wsrep_mysqld.h b/sql/wsrep_mysqld.h
index 514c1f32cff..f499443ca2c 100644
--- a/sql/wsrep_mysqld.h
+++ b/sql/wsrep_mysqld.h
@@ -331,4 +331,5 @@ void wsrep_init_sidno(const wsrep_uuid_t&);
#endif /* GTID_SUPPORT */
bool wsrep_node_is_donor();
+bool wsrep_node_is_synced();
#endif /* WSREP_MYSQLD_H */