[ovs-dev] [PATCH ovn v2] northd: Add `is-active` management command

Numan Siddique numans at ovn.org
Mon Nov 18 07:11:11 UTC 2019


On Sat, Nov 16, 2019 at 2:46 AM Frode Nordahl
<frode.nordahl at canonical.com> wrote:
>
> 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>

Thanks for the patch. This command would be useful.
HA for ovn-northd (active/standby) is supported using the lock
mechanism and it doesn't
matter if ovn-northd connects to the clustered db or standalone. This
patch assumes
that locking feature is used only for clustered deployment which is wrong.

Also we have commands - "is-paused", "pause" and "resume". "is-active"
command could confuse
the user.

So can you please update the documentation properly ?

Thanks
Numan


> ---
>  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.

You could probably say  something like -
"Returns true if ovn-northd has acquired OVSDB lock and 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>

We probably don't need this section as the documentation here [1]
already mentions about it.

[1] - https://github.com/ovn-org/ovn/blob/master/northd/ovn-northd.8.xml#L95

Thanks
Numan


> +
>      <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
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>


More information about the dev mailing list