[ovs-dev] [PATCH ovn v2] northd: Add `is-active` management command
Frode Nordahl
frode.nordahl at canonical.com
Fri Nov 15 19:51:26 UTC 2019
When ovn-northd is connected to clustered OVN DB servers a OVSDB
locking feature is used to ensure only one ovn-northd process is
active at a time.
This patch adds a `is-active` management command that allows the
operator to query whether a ovn-northd process is currently active
or not.
At present this information is only available in the log.
Signed-off-by: Frode Nordahl <frode.nordahl at canonical.com>
---
northd/ovn-northd.8.xml | 19 +++++++++++++++++++
northd/ovn-northd.c | 18 +++++++++++++++++-
2 files changed, 36 insertions(+), 1 deletion(-)
diff --git a/northd/ovn-northd.8.xml b/northd/ovn-northd.8.xml
index 344cc0dbf..e712000f3 100644
--- a/northd/ovn-northd.8.xml
+++ b/northd/ovn-northd.8.xml
@@ -87,6 +87,12 @@
<dd>
Returns "true" if ovn-northd is currently paused, "false" otherwise.
</dd>
+
+ <dt><code>is-active</code></dt>
+ <dd>
+ When ovn-northd is connected to clustered OVN DB servers, this returns
+ "true" if ovn-northd is currently active, "false" otherwise.
+ </dd>
</dl>
</p>
@@ -130,6 +136,19 @@
DB changes.
</p>
+ <h2> Active-Standby with clustered OVN DB servers</h2>
+ <p>
+ When <code>ovn-northd</code> is connected to clustered OVN DB servers a
+ OVSDB locking feature will be used to ensure only one
+ <code>ovn-northd</code> process is active at a time.
+ </p>
+
+ <p>
+ The <code>ovn-northd</code> daemon will write an entry in its log when
+ it becomes active. You may query the active status at any time with
+ the <code>is-active</code> management command.
+ </p>
+
<h1>Logical Flow Table Structure</h1>
<p>
diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c
index 6742bc002..31a744f4d 100644
--- a/northd/ovn-northd.c
+++ b/northd/ovn-northd.c
@@ -55,6 +55,7 @@ static unixctl_cb_func ovn_northd_exit;
static unixctl_cb_func ovn_northd_pause;
static unixctl_cb_func ovn_northd_resume;
static unixctl_cb_func ovn_northd_is_paused;
+static unixctl_cb_func ovn_northd_is_active;
struct northd_context {
struct ovsdb_idl *ovnnb_idl;
@@ -10425,6 +10426,7 @@ main(int argc, char *argv[])
int retval;
bool exiting;
bool paused;
+ bool had_lock;
fatal_ignore_sigpipe();
ovs_cmdl_proctitle_init(argc, argv);
@@ -10450,6 +10452,8 @@ main(int argc, char *argv[])
unixctl_command_register("resume", "", 0, 0, ovn_northd_resume, &paused);
unixctl_command_register("is-paused", "", 0, 0, ovn_northd_is_paused,
&paused);
+ unixctl_command_register("is-active", "", 0, 0, ovn_northd_is_active,
+ &had_lock);
daemonize_complete();
@@ -10636,11 +10640,11 @@ main(int argc, char *argv[])
* acquiring a lock called "ovn_northd" on the southbound database
* and then only performing DB transactions if the lock is held. */
ovsdb_idl_set_lock(ovnsb_idl_loop.idl, "ovn_northd");
- bool had_lock = false;
/* Main loop. */
exiting = false;
paused = false;
+ had_lock = false;
while (!exiting) {
if (!paused) {
struct northd_context ctx = {
@@ -10748,3 +10752,15 @@ ovn_northd_is_paused(struct unixctl_conn *conn, int argc OVS_UNUSED,
unixctl_command_reply(conn, "false");
}
}
+
+static void
+ovn_northd_is_active(struct unixctl_conn *conn, int argc OVS_UNUSED,
+ const char *argv[] OVS_UNUSED, void *had_lock_)
+{
+ bool *had_lock = had_lock_;
+ if (*had_lock) {
+ unixctl_command_reply(conn, "true");
+ } else {
+ unixctl_command_reply(conn, "false");
+ }
+}
--
2.20.1
More information about the dev
mailing list