[Tarantool-patches] [RFC 2/4] qsync: move synchro quorum update to separate routine

Cyrill Gorcunov gorcunov at gmail.com
Thu Nov 19 22:40:58 MSK 2020


We will be updating replication_synchro_quorum parameter
dynamically once we add support for number evaluation
via symbolic formula, thus the update will be called
not only from manual configuration changes but from
cluster updates as well.

Thus to reuse the code lets gather it into a separate
routine.

Part-of #5446

Signed-off-by: Cyrill Gorcunov <gorcunov at gmail.com>
---
 src/box/box.cc         |  4 +---
 src/box/replication.cc | 18 ++++++++++++++++++
 src/box/replication.h  |  3 +++
 3 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/src/box/box.cc b/src/box/box.cc
index 1f7dec362..5fcf28cb3 100644
--- a/src/box/box.cc
+++ b/src/box/box.cc
@@ -924,9 +924,7 @@ box_set_replication_synchro_quorum(void)
 	int value = box_check_replication_synchro_quorum();
 	if (value < 0)
 		return -1;
-	replication_synchro_quorum = value;
-	txn_limbo_on_parameters_change(&txn_limbo);
-	raft_cfg_election_quorum(box_raft());
+	replication_synchro_quorum_update(value);
 	return 0;
 }
 
diff --git a/src/box/replication.cc b/src/box/replication.cc
index 65512cf0f..c83392f81 100644
--- a/src/box/replication.cc
+++ b/src/box/replication.cc
@@ -40,7 +40,9 @@
 #include "gc.h"
 #include "error.h"
 #include "relay.h"
+#include "raft.h"
 #include "sio.h"
+#include "txn_limbo.h"
 
 uint32_t instance_id = REPLICA_ID_NIL;
 struct tt_uuid INSTANCE_UUID;
@@ -82,6 +84,22 @@ replicaset_quorum(void)
 	return MIN(replication_connect_quorum, replicaset.applier.total);
 }
 
+/**
+ * Update the synchro quorum number and propagate the
+ * change to dependent subsystems.
+ */
+void
+replication_synchro_quorum_update(int value)
+{
+	assert(value > 0 && value < VCLOCK_MAX);
+
+	say_info("replication: replication_synchro_quorum = %d", value);
+
+	replication_synchro_quorum = value;
+	txn_limbo_on_parameters_change(&txn_limbo);
+	raft_cfg_election_quorum(box_raft());
+}
+
 void
 replication_init(void)
 {
diff --git a/src/box/replication.h b/src/box/replication.h
index e57912848..ced519612 100644
--- a/src/box/replication.h
+++ b/src/box/replication.h
@@ -175,6 +175,9 @@ replication_disconnect_timeout(void)
 	return replication_timeout * 4;
 }
 
+void
+replication_synchro_quorum_update(int value);
+
 void
 replication_init(void);
 
-- 
2.26.2



More information about the Tarantool-patches mailing list