[ovs-dev] [PATCH] ovsdb: raft: introduce cluster/connected and cluster/role commands
Lorenzo Bianconi
lorenzo.bianconi at redhat.com
Fri Jul 24 14:10:18 UTC 2020
Introduce the following commands for a cluster db running raft in order to
dump the connection status and the db role in the cluster:
$ovs-appctl -t /var/run/ovn/ovnnb_db.ctl cluster/connected OVN_Northbound
connected
$ovs-appctl -t /var/run/ovn/ovnnb_db.ctl cluster/role OVN_Northbound
leader
Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi at redhat.com>
---
ovsdb/raft.c | 43 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 43 insertions(+)
diff --git a/ovsdb/raft.c b/ovsdb/raft.c
index 708b0624c..6da3fdef3 100644
--- a/ovsdb/raft.c
+++ b/ovsdb/raft.c
@@ -4409,6 +4409,45 @@ raft_put_sid(const char *title, const struct uuid *sid,
ds_put_char(s, '\n');
}
+static void
+raft_unixctl_role(struct unixctl_conn *conn,
+ int argc OVS_UNUSED, const char *argv[],
+ void *aux OVS_UNUSED)
+{
+ struct raft *raft = raft_lookup_by_name(argv[1]);
+ if (!raft) {
+ unixctl_command_reply_error(conn, "unknown cluster");
+ return;
+ }
+
+ struct ds s = DS_EMPTY_INITIALIZER;
+ ds_put_format(&s, "%s\n",
+ raft->role == RAFT_LEADER ? "leader"
+ : raft->role == RAFT_CANDIDATE ? "candidate"
+ : raft->role == RAFT_FOLLOWER ? "follower"
+ : "<error>");
+ unixctl_command_reply(conn, ds_cstr(&s));
+ ds_destroy(&s);
+}
+
+static void
+raft_unixctl_connected(struct unixctl_conn *conn,
+ int argc OVS_UNUSED, const char *argv[],
+ void *aux OVS_UNUSED)
+{
+ struct raft *raft = raft_lookup_by_name(argv[1]);
+ if (!raft) {
+ unixctl_command_reply_error(conn, "unknown cluster");
+ return;
+ }
+
+ struct ds s = DS_EMPTY_INITIALIZER;
+ bool connected = raft_is_connected(raft);
+ ds_put_format(&s, "%s\n", connected ? "connected" : "unconnected");
+ unixctl_command_reply(conn, ds_cstr(&s));
+ ds_destroy(&s);
+}
+
static void
raft_unixctl_status(struct unixctl_conn *conn,
int argc OVS_UNUSED, const char *argv[],
@@ -4763,6 +4802,10 @@ raft_init(void)
raft_unixctl_cid, NULL);
unixctl_command_register("cluster/sid", "DB", 1, 1,
raft_unixctl_sid, NULL);
+ unixctl_command_register("cluster/role", "DB", 1, 1,
+ raft_unixctl_role, NULL);
+ unixctl_command_register("cluster/connected", "DB", 1, 1,
+ raft_unixctl_connected, NULL);
unixctl_command_register("cluster/status", "DB", 1, 1,
raft_unixctl_status, NULL);
unixctl_command_register("cluster/leave", "DB", 1, 1,
--
2.26.2
More information about the dev
mailing list