[ovs-dev] [PATCH ovn v2] Create daemon pidfiles in ovn run dir.

numans at ovn.org numans at ovn.org
Thu Apr 23 07:23:23 UTC 2020


From: Numan Siddique <numans at ovn.org>

If an OVN service is started with --pidfile option, the pidfile
is created in the ovs rundir. This patch fixes it by using the ovn rundir
if either the pidfile is not specified or if specified, it is not
absolute path.

Signed-off-by: Numan Siddique <numans at ovn.org>
---

v1 -> v2
----
  * Addressed review comments from Dumitru

 controller-vtep/ovn-controller-vtep.c |  6 +--
 controller/ovn-controller.c           |  6 +--
 ic/ovn-ic.c                           |  6 +--
 lib/ovn-util.c                        | 26 ++++++++++++
 lib/ovn-util.h                        | 60 +++++++++++++++++++++++++++
 northd/ovn-northd.c                   |  6 +--
 utilities/ovn-nbctl.c                 | 10 ++---
 utilities/ovn-trace.c                 |  6 +--
 8 files changed, 106 insertions(+), 20 deletions(-)

diff --git a/controller-vtep/ovn-controller-vtep.c b/controller-vtep/ovn-controller-vtep.c
index 253a709ab..c13280bc0 100644
--- a/controller-vtep/ovn-controller-vtep.c
+++ b/controller-vtep/ovn-controller-vtep.c
@@ -169,7 +169,7 @@ parse_options(int argc, char *argv[])
         OPT_PEER_CA_CERT = UCHAR_MAX + 1,
         OPT_BOOTSTRAP_CA_CERT,
         VLOG_OPTION_ENUMS,
-        DAEMON_OPTION_ENUMS,
+        OVN_DAEMON_OPTION_ENUMS,
         SSL_OPTION_ENUMS,
     };
 
@@ -179,7 +179,7 @@ parse_options(int argc, char *argv[])
         {"help", no_argument, NULL, 'h'},
         {"version", no_argument, NULL, 'V'},
         VLOG_LONG_OPTIONS,
-        DAEMON_LONG_OPTIONS,
+        OVN_DAEMON_LONG_OPTIONS,
         STREAM_SSL_LONG_OPTIONS,
         {"peer-ca-cert", required_argument, NULL, OPT_PEER_CA_CERT},
         {"bootstrap-ca-cert", required_argument, NULL, OPT_BOOTSTRAP_CA_CERT},
@@ -212,7 +212,7 @@ parse_options(int argc, char *argv[])
             exit(EXIT_SUCCESS);
 
         VLOG_OPTION_HANDLERS
-        DAEMON_OPTION_HANDLERS
+        OVN_DAEMON_OPTION_HANDLERS
         STREAM_SSL_OPTION_HANDLERS
 
         case OPT_PEER_CA_CERT:
diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c
index 4d21ba0fd..6ff897325 100644
--- a/controller/ovn-controller.c
+++ b/controller/ovn-controller.c
@@ -2268,7 +2268,7 @@ parse_options(int argc, char *argv[])
         OPT_PEER_CA_CERT = UCHAR_MAX + 1,
         OPT_BOOTSTRAP_CA_CERT,
         VLOG_OPTION_ENUMS,
-        DAEMON_OPTION_ENUMS,
+        OVN_DAEMON_OPTION_ENUMS,
         SSL_OPTION_ENUMS,
     };
 
@@ -2276,7 +2276,7 @@ parse_options(int argc, char *argv[])
         {"help", no_argument, NULL, 'h'},
         {"version", no_argument, NULL, 'V'},
         VLOG_LONG_OPTIONS,
-        DAEMON_LONG_OPTIONS,
+        OVN_DAEMON_LONG_OPTIONS,
         STREAM_SSL_LONG_OPTIONS,
         {"peer-ca-cert", required_argument, NULL, OPT_PEER_CA_CERT},
         {"bootstrap-ca-cert", required_argument, NULL, OPT_BOOTSTRAP_CA_CERT},
@@ -2301,7 +2301,7 @@ parse_options(int argc, char *argv[])
             exit(EXIT_SUCCESS);
 
         VLOG_OPTION_HANDLERS
-        DAEMON_OPTION_HANDLERS
+        OVN_DAEMON_OPTION_HANDLERS
         STREAM_SSL_OPTION_HANDLERS
 
         case OPT_PEER_CA_CERT:
diff --git a/ic/ovn-ic.c b/ic/ovn-ic.c
index d931ca50f..a1ed25623 100644
--- a/ic/ovn-ic.c
+++ b/ic/ovn-ic.c
@@ -1461,7 +1461,7 @@ static void
 parse_options(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
 {
     enum {
-        DAEMON_OPTION_ENUMS,
+        OVN_DAEMON_OPTION_ENUMS,
         VLOG_OPTION_ENUMS,
         SSL_OPTION_ENUMS,
     };
@@ -1474,7 +1474,7 @@ parse_options(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
         {"help", no_argument, NULL, 'h'},
         {"options", no_argument, NULL, 'o'},
         {"version", no_argument, NULL, 'V'},
-        DAEMON_LONG_OPTIONS,
+        OVN_DAEMON_LONG_OPTIONS,
         VLOG_LONG_OPTIONS,
         STREAM_SSL_LONG_OPTIONS,
         {NULL, 0, NULL, 0},
@@ -1490,7 +1490,7 @@ parse_options(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
         }
 
         switch (c) {
-        DAEMON_OPTION_HANDLERS;
+        OVN_DAEMON_OPTION_HANDLERS;
         VLOG_OPTION_HANDLERS;
         STREAM_SSL_OPTION_HANDLERS;
 
diff --git a/lib/ovn-util.c b/lib/ovn-util.c
index 1b30c2e9a..3482edb8d 100644
--- a/lib/ovn-util.c
+++ b/lib/ovn-util.c
@@ -15,6 +15,7 @@
 #include <config.h>
 #include <unistd.h>
 
+#include "daemon.h"
 #include "ovn-util.h"
 #include "ovn-dirs.h"
 #include "openvswitch/vlog.h"
@@ -394,6 +395,31 @@ get_abs_unix_ctl_path(const char *path)
     return abs_path;
 }
 
+void
+ovn_set_pidfile(const char *name)
+{
+    char *pidfile_name = NULL;
+
+#ifndef _WIN32
+    pidfile_name = name ? abs_file_name(ovn_rundir(), name)
+                        : xasprintf("%s/%s.pid", ovn_rundir(), program_name);
+#else
+    if (name) {
+        if (strchr(name, ':')) {
+            pidfile_name = xstrdup(name);
+        } else {
+            pidfile_name = xasprintf("%s/%s", ovn_rundir(), name);
+        }
+    } else {
+        pidfile_name = xasprintf("%s/%s.pid", ovn_rundir(), program_name);
+    }
+#endif
+
+    /* Call openvswitch lib function. */
+    set_pidfile(pidfile_name);
+    free(pidfile_name);
+}
+
 /* l3gateway, chassisredirect, and patch
  * are not in this list since they are
  * only set in the SB DB by northd
diff --git a/lib/ovn-util.h b/lib/ovn-util.h
index 4076e8b9a..ec5f2cf5a 100644
--- a/lib/ovn-util.h
+++ b/lib/ovn-util.h
@@ -112,6 +112,7 @@ uint32_t ovn_allocate_tnlid(struct hmap *set, const char *name, uint32_t min,
                             uint32_t max, uint32_t *hint);
 
 char *ovn_chassis_redirect_name(const char *port_name);
+void ovn_set_pidfile(const char *name);
 
 /* An IPv4 or IPv6 address */
 struct v46_ip {
@@ -129,4 +130,63 @@ bool ip46_equals(const struct v46_ip *addr1, const struct v46_ip *addr2);
  * Caller must free the returned string.
  */
 char *str_tolower(const char *orig);
+
+/* OVN daemon options. Taken from ovs/lib/daemon.h. */
+#define OVN_DAEMON_OPTION_ENUMS                     \
+    OVN_OPT_DETACH,                                 \
+    OVN_OPT_NO_SELF_CONFINEMENT,                    \
+    OVN_OPT_NO_CHDIR,                               \
+    OVN_OPT_OVERWRITE_PIDFILE,                      \
+    OVN_OPT_PIDFILE,                                \
+    OVN_OPT_MONITOR,                                \
+    OVN_OPT_USER_GROUP
+
+#define OVN_DAEMON_LONG_OPTIONS                                              \
+        {"detach",            no_argument, NULL, OVN_OPT_DETACH},            \
+        {"no-self-confinement", no_argument, NULL,                           \
+         OVN_OPT_NO_SELF_CONFINEMENT},                                       \
+        {"no-chdir",          no_argument, NULL, OVN_OPT_NO_CHDIR},          \
+        {"pidfile",           optional_argument, NULL, OVN_OPT_PIDFILE},     \
+        {"overwrite-pidfile", no_argument, NULL, OVN_OPT_OVERWRITE_PIDFILE}, \
+        {"monitor",           no_argument, NULL, OVN_OPT_MONITOR},           \
+        {"user",              required_argument, NULL, OVN_OPT_USER_GROUP}
+
+#define OVN_DAEMON_OPTION_HANDLERS                  \
+        case OVN_OPT_DETACH:                        \
+            set_detach();                           \
+            break;                                  \
+                                                    \
+        case OVN_OPT_NO_SELF_CONFINEMENT:           \
+            daemon_disable_self_confinement();      \
+            break;                                  \
+                                                    \
+        case OVN_OPT_NO_CHDIR:                      \
+            set_no_chdir();                         \
+            break;                                  \
+                                                    \
+        case OVN_OPT_PIDFILE:                       \
+            ovn_set_pidfile(optarg);                \
+            break;                                  \
+                                                    \
+        case OVN_OPT_OVERWRITE_PIDFILE:             \
+            ignore_existing_pidfile();              \
+            break;                                  \
+                                                    \
+        case OVN_OPT_MONITOR:                       \
+            daemon_set_monitor();                   \
+            break;                                  \
+                                                    \
+        case OVN_OPT_USER_GROUP:                    \
+            daemon_set_new_user(optarg);            \
+            break;
+
+#define OVN_DAEMON_OPTION_CASES                     \
+        case OVN_OPT_DETACH:                        \
+        case OVN_OPT_NO_SELF_CONFINEMENT:           \
+        case OVN_OPT_NO_CHDIR:                      \
+        case OVN_OPT_PIDFILE:                       \
+        case OVN_OPT_OVERWRITE_PIDFILE:             \
+        case OVN_OPT_MONITOR:                       \
+        case OVN_OPT_USER_GROUP:
+
 #endif
diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c
index f02dc5d5e..c4675bd68 100644
--- a/northd/ovn-northd.c
+++ b/northd/ovn-northd.c
@@ -11640,7 +11640,7 @@ static void
 parse_options(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
 {
     enum {
-        DAEMON_OPTION_ENUMS,
+        OVN_DAEMON_OPTION_ENUMS,
         VLOG_OPTION_ENUMS,
         SSL_OPTION_ENUMS,
     };
@@ -11651,7 +11651,7 @@ parse_options(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
         {"help", no_argument, NULL, 'h'},
         {"options", no_argument, NULL, 'o'},
         {"version", no_argument, NULL, 'V'},
-        DAEMON_LONG_OPTIONS,
+        OVN_DAEMON_LONG_OPTIONS,
         VLOG_LONG_OPTIONS,
         STREAM_SSL_LONG_OPTIONS,
         {NULL, 0, NULL, 0},
@@ -11667,7 +11667,7 @@ parse_options(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
         }
 
         switch (c) {
-        DAEMON_OPTION_HANDLERS;
+        OVN_DAEMON_OPTION_HANDLERS;
         VLOG_OPTION_HANDLERS;
         STREAM_SSL_OPTION_HANDLERS;
 
diff --git a/utilities/ovn-nbctl.c b/utilities/ovn-nbctl.c
index cb46d3aa5..c86fa3886 100644
--- a/utilities/ovn-nbctl.c
+++ b/utilities/ovn-nbctl.c
@@ -324,7 +324,7 @@ enum {
     OPT_NO_SHUFFLE_REMOTES,
     OPT_BOOTSTRAP_CA_CERT,
     MAIN_LOOP_OPTION_ENUMS,
-    DAEMON_OPTION_ENUMS,
+    OVN_DAEMON_OPTION_ENUMS,
     VLOG_OPTION_ENUMS,
     TABLE_OPTION_ENUMS,
     SSL_OPTION_ENUMS,
@@ -428,7 +428,7 @@ get_all_options(void)
         {"version", no_argument, NULL, 'V'},
         {"unixctl", required_argument, NULL, 'u'},
         MAIN_LOOP_LONG_OPTIONS,
-        DAEMON_LONG_OPTIONS,
+        OVN_DAEMON_LONG_OPTIONS,
         VLOG_LONG_OPTIONS,
         STREAM_SSL_LONG_OPTIONS,
         {"bootstrap-ca-cert", required_argument, NULL, OPT_BOOTSTRAP_CA_CERT},
@@ -460,7 +460,7 @@ has_option(const struct ovs_cmdl_parsed_option *parsed_options, size_t n,
 static bool
 will_detach(const struct ovs_cmdl_parsed_option *parsed_options, size_t n)
 {
-    return has_option(parsed_options, n, OPT_DETACH);
+    return has_option(parsed_options, n, OVN_OPT_DETACH);
 }
 
 static char * OVS_WARN_UNUSED_RESULT
@@ -547,7 +547,7 @@ apply_options_direct(const struct ovs_cmdl_parsed_option *parsed_options,
             printf("DB Schema %s\n", nbrec_get_db_version());
             exit(EXIT_SUCCESS);
 
-        DAEMON_OPTION_HANDLERS
+        OVN_DAEMON_OPTION_HANDLERS
         VLOG_OPTION_HANDLERS
         TABLE_OPTION_HANDLERS(&table_style)
         STREAM_SSL_OPTION_HANDLERS
@@ -6611,7 +6611,7 @@ nbctl_client(const char *socket_name,
         case OPT_NO_SHUFFLE_REMOTES:
         case OPT_BOOTSTRAP_CA_CERT:
         STREAM_SSL_CASES
-        DAEMON_OPTION_CASES
+        OVN_DAEMON_OPTION_CASES
             VLOG_INFO("using ovn-nbctl daemon, ignoring %s option",
                       po->o->name);
             break;
diff --git a/utilities/ovn-trace.c b/utilities/ovn-trace.c
index eae9622d3..c9d72285c 100644
--- a/utilities/ovn-trace.c
+++ b/utilities/ovn-trace.c
@@ -239,7 +239,7 @@ parse_options(int argc, char *argv[])
         OPT_CT,
         OPT_FRIENDLY_NAMES,
         OPT_NO_FRIENDLY_NAMES,
-        DAEMON_OPTION_ENUMS,
+        OVN_DAEMON_OPTION_ENUMS,
         SSL_OPTION_ENUMS,
         VLOG_OPTION_ENUMS,
         OPT_LB_DST,
@@ -260,7 +260,7 @@ parse_options(int argc, char *argv[])
         {"version", no_argument, NULL, 'V'},
         {"lb-dst", required_argument, NULL, OPT_LB_DST},
         {"select-id", required_argument, NULL, OPT_SELECT_ID},
-        DAEMON_LONG_OPTIONS,
+        OVN_DAEMON_LONG_OPTIONS,
         VLOG_LONG_OPTIONS,
         STREAM_SSL_LONG_OPTIONS,
         {NULL, 0, NULL, 0},
@@ -333,7 +333,7 @@ parse_options(int argc, char *argv[])
             printf("DB Schema %s\n", sbrec_get_db_version());
             exit(EXIT_SUCCESS);
 
-        DAEMON_OPTION_HANDLERS
+        OVN_DAEMON_OPTION_HANDLERS
         VLOG_OPTION_HANDLERS
         STREAM_SSL_OPTION_HANDLERS
 
-- 
2.25.1



More information about the dev mailing list