[ovs-dev] [PATCH V4] Separation of NB & SB dbs.

Michael Arnaldi arnaldimichael at gmail.com
Thu Feb 18 17:18:00 UTC 2016


>From V3 removed any unnecessary code change and removed cloning of the
running ovsdb configuration database. We should address SSL in a specific
patch without depending on the default database.

Signed-off-by: Michael Arnaldi <michael.arnaldi at mymoneyex.com>
---
 NEWS                      |   4 ++
 ovn/northd/ovn-northd.c   |  33 ++++++---
 ovn/utilities/ovn-ctl     | 167 ++++++++++++++++++++++++++++++++++++----------
 ovn/utilities/ovn-nbctl.c |   2 +-
 ovn/utilities/ovn-sbctl.c |   3 +-
 5 files changed, 162 insertions(+), 47 deletions(-)

diff --git a/NEWS b/NEWS
index 18fca10..fabb33b 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,9 @@
 Post-v2.5.0
 ---------------------
+   - ovn:
+     * Separation of NB & SB dbs. OVN was previously using the same instance
+       of ovsdb-server used by ovs-vswitchd now OVN controls separate
+       instances for the northbound and the southbound databases.
    - ovsdb-server:
      * New "monitor2" and "update2" extensions to RFC 7047.
    - OpenFlow:
diff --git a/ovn/northd/ovn-northd.c b/ovn/northd/ovn-northd.c
index e6271cf..051c75a 100644
--- a/ovn/northd/ovn-northd.c
+++ b/ovn/northd/ovn-northd.c
@@ -52,7 +52,8 @@ struct northd_context {
 static const char *ovnnb_db;
 static const char *ovnsb_db;

-static const char *default_db(void);
+static const char *default_nb_db(void);
+static const char *default_sb_db(void);
 
 /* Pipeline stages. */

@@ -167,7 +168,7 @@ Options:\n\
   -h, --help                display this help message\n\
   -o, --options             list available options\n\
   -V, --version             display version information\n\
-", program_name, program_name, default_db(), default_db());
+", program_name, program_name, default_nb_db(), default_sb_db());
     daemon_usage();
     vlog_usage();
     stream_usage("database", true, true, false);
@@ -1786,15 +1787,26 @@ ovnsb_db_run(struct northd_context *ctx)
 }
 

-static char *default_db_;
+static char *default_nb_db_;

 static const char *
-default_db(void)
+default_nb_db(void)
 {
-    if (!default_db_) {
-        default_db_ = xasprintf("unix:%s/db.sock", ovs_rundir());
+    if (!default_nb_db_) {
+        default_nb_db_ = xasprintf("unix:%s/ovnnb_db.sock", ovs_rundir());
     }
-    return default_db_;
+    return default_nb_db_;
+}
+
+static char *default_sb_db_;
+
+static const char *
+default_sb_db(void)
+{
+    if (!default_sb_db_) {
+        default_sb_db_ = xasprintf("unix:%s/ovnsb_db.sock", ovs_rundir());
+    }
+    return default_sb_db_;
 }

 static void
@@ -1856,11 +1868,11 @@ parse_options(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
     }

     if (!ovnsb_db) {
-        ovnsb_db = default_db();
+        ovnsb_db = default_sb_db();
     }

     if (!ovnnb_db) {
-        ovnnb_db = default_db();
+        ovnnb_db = default_nb_db();
     }

     free(short_options);
@@ -1976,7 +1988,8 @@ main(int argc, char *argv[])
     ovsdb_idl_loop_destroy(&ovnsb_idl_loop);
     service_stop();

-    free(default_db_);
+    free(default_nb_db_);
+    free(default_sb_db_);
     exit(res);
 }

diff --git a/ovn/utilities/ovn-ctl b/ovn/utilities/ovn-ctl
index b171934..2ad0eb0 100755
--- a/ovn/utilities/ovn-ctl
+++ b/ovn/utilities/ovn-ctl
@@ -30,32 +30,81 @@ done
 ## start ##
 ## ----- ##

-upgrade_ovn_dbs () {
-    ovn_dbs=$(ovs-appctl -t ovsdb-server ovsdb-server/list-dbs 2>/dev/null)
-    for db in $ovn_dbs; do
-        case $db in
-            OVN*)
-                action "Removing $db from ovsdb-server" \
-                    ovs-appctl -t ovsdb-server ovsdb-server/remove-db $db
-                ;;
-        esac
-    done
-    upgrade_db "$DB_NB_FILE" "$DB_NB_SCHEMA"
-    upgrade_db "$DB_SB_FILE" "$DB_SB_SCHEMA"
-    for db in $DB_NB_FILE $DB_SB_FILE; do
-        action "Adding $db to ovsdb-server" \
-            ovs-appctl -t ovsdb-server ovsdb-server/add-db $db || exit 1
-    done
+pidfile_is_running () {
+    pidfile=$1
+    test -e "$pidfile" && pid=`cat "$pidfile"` && pid_exists "$pid"
+} >/dev/null 2>&1
+
+stop_ovsdb () {
+    if pidfile_is_running $DB_NB_PID; then
+        kill -9 $(cat $DB_NB_PID) 1>/dev/null 2>/dev/null
+        rm -f $DB_NB_PID 1>/dev/null 2>/dev/null
+    fi
+
+    if pidfile_is_running $DB_SB_PID; then
+        kill -9 $(cat $DB_SB_PID) 1>/dev/null 2>/dev/null
+        rm -f $DB_SB_PID 1>/dev/null 2>/dev/null
+    fi
+}
+
+start_ovsdb () {
+    # Check and eventually start ovsdb-server for Northbound DB
+    if ! pidfile_is_running $DB_NB_PID; then
+        upgrade_db "$DB_NB_FILE" "$DB_NB_SCHEMA" 1>/dev/null 2>/dev/null
+
+        set ovsdb-server
+
+        set "$@" --detach $OVN_OVSDB_LOG --remote=punix:$DB_NB_SOCK --remote=ptcp:$DB_NB_PORT --pidfile=$DB_NB_PID
+
+        $@ $DB_NB_FILE
+    fi
+
+    # Check and eventually start ovsdb-server for Southbound DB
+    if ! pidfile_is_running $DB_SB_PID; then
+        upgrade_db "$DB_SB_FILE" "$DB_SB_SCHEMA" 1>/dev/null 2>/dev/null
+
+        set ovsdb-server
+
+        set "$@" --detach $OVN_OVSDB_LOG --remote=punix:$DB_SB_SOCK --remote=ptcp:$DB_SB_PORT --pidfile=$DB_SB_PID
+        $@ $DB_SB_FILE
+    fi
+}
+
+status_ovsdb () {
+  if ! pidfile_is_running $DB_NB_PID; then
+      log_success_msg "OVN Northbound DB is not running"
+  else
+      log_success_msg "OVN Northbound DB is running"
+  fi
+
+  if ! pidfile_is_running $DB_SB_PID; then
+      log_success_msg "OVN Southbound DB is not running"
+  else
+      log_success_msg "OVN Southbound DB is running"
+  fi
 }

 start_northd () {
-    # We expect ovn-northd to be co-located with ovsdb-server handling both the
-    # OVN_Northbound and OVN_Southbound dbs.
-    upgrade_ovn_dbs
+  if test X"$OVN_MANAGE_OVSDB" = Xyes; then
+      start_ovsdb
+  fi

-    set ovn-northd
-    set "$@" -vconsole:emer -vsyslog:err -vfile:info
-    OVS_RUNDIR=${OVN_RUNDIR} start_daemon "$OVN_NORTHD_PRIORITY" "$OVN_NORTHD_WRAPPER" "$@"
+  if ! pidfile_is_running $DB_NB_PID; then
+      log_failure_msg "OVN Northbound DB is not running"
+      exit
+  fi
+  if ! pidfile_is_running $DB_SB_PID; then
+      log_failure_msg "OVN Southbound DB is not running"
+      exit
+  fi
+
+  if daemon_is_running ovn-northd; then
+      log_success_msg "OVN Northbound is already running"
+  else
+      set ovn-northd
+      set "$@" $OVN_NORTHD_LOG --ovnnb-db=unix:$DB_NB_SOCK --ovnsb-db=unix:$DB_SB_SOCK
+      OVS_RUNDIR=${OVN_RUNDIR} start_daemon "$OVN_NORTHD_PRIORITY" "$OVN_NORTHD_WRAPPER" "$@"
+  fi
 }

 start_controller () {
@@ -70,6 +119,10 @@ start_controller () {

 stop_northd () {
     OVS_RUNDIR=${OVN_RUNDIR} stop_daemon ovn-northd
+
+    if test X"$OVN_MANAGE_OVSDB" = Xyes; then
+        stop_ovsdb
+    fi
 }

 stop_controller () {
@@ -90,24 +143,46 @@ restart_controller () {
     start_controller
 }

+restart_ovsdb () {
+    stop_ovsdb
+    start_ovsdb
+}
+
 ## ---- ##
 ## main ##
 ## ---- ##

 set_defaults () {
-    DB_SOCK=$rundir/db.sock
-    DB_NB_FILE=$dbdir/ovnnb.db
-    DB_SB_FILE=$dbdir/ovnsb.db
-    DB_NB_SCHEMA=$datadir/ovn-nb.ovsschema
-    DB_SB_SCHEMA=$datadir/ovn-sb.ovsschema
-
-    OVN_NORTHD_PRIORITY=-10
-    OVN_NORTHD_WRAPPER=
-    OVN_CONTROLLER_PRIORITY=-10
-    OVN_CONTROLLER_WRAPPER=
-
-    OVS_RUNDIR=${OVS_RUNDIR:-${rundir}}
-    OVN_RUNDIR=${OVN_RUNDIR:-${OVS_RUNDIR}}
+  OVN_DIR=$rundir
+  OVN_MANAGE_OVSDB=yes
+
+  DB_NB_SOCK=$OVN_DIR/ovnnb_db.sock
+  DB_NB_PID=$OVN_DIR/ovnnb_db.pid
+  DB_NB_FILE=$OVN_DIR/ovnnb_db.db
+  DB_NB_PORT=6641
+
+  DB_SB_SOCK=$OVN_DIR/ovnsb_db.sock
+  DB_SB_PID=$OVN_DIR/ovnsb_db.pid
+  DB_SB_FILE=$OVN_DIR/ovnsb_db.db
+  DB_SB_PORT=6642
+
+  DB_NB_SCHEMA=$datadir/ovn-nb.ovsschema
+  DB_SB_SCHEMA=$datadir/ovn-sb.ovsschema
+
+  DB_SOCK=$rundir/db.sock
+  DB_CONF_FILE=$dbdir/conf.db
+
+  OVN_NORTHD_PRIORITY=-10
+  OVN_NORTHD_WRAPPER=
+  OVN_CONTROLLER_PRIORITY=-10
+  OVN_CONTROLLER_WRAPPER=
+
+  OVS_RUNDIR=${OVS_RUNDIR:-${rundir}}
+  OVN_RUNDIR=${OVN_RUNDIR:-${OVS_RUNDIR}}
+
+  OVN_CONTROLLER_LOG="-vconsole:emer -vsyslog:err -vfile:info"
+  OVN_NORHD_LOG="-vconsole:emer -vsyslog:err -vfile:info"
+  OVN_OVSDB_LOG="-vconsole:off"
 }

 set_option () {
@@ -134,10 +209,13 @@ startup scripts.  System administrators should not normally invoke it directly.

 Commands:
   start_northd           start ovn-northd
+  start_ovsdb            start ovn related ovsdb-server processes
   start_controller       start ovn-controller
   stop_northd            stop ovn-northd
+  stop_ovsdb             stop ovn related ovsdb-server processes
   stop_controller        stop ovn-controller
   restart_northd         restart ovn-northd
+  restart_ovsdb          restart ovn related ovsdb-server processes
   restart_controller     restart ovn-controller

 Options:
@@ -145,6 +223,10 @@ Options:
   --ovn-northd-wrapper=WRAPPER   run with a wrapper like valgrind for debugging
   --ovn-controller-priority=NICE     set ovn-northd's niceness (default: $OVN_CONTROLLER_PRIORITY)
   --ovn-controller-wrapper=WRAPPER   run with a wrapper like valgrind for debugging
+  --ovn-manage-ovsdb=no              manage ovsdb separately from start_northd and stop_northd
+  --ovn-controller-log=STRING        ovn controller process logging params (default: $OVN_CONTROLLER_LOG)
+  --ovn-northd-log=STRING            ovn northd process logging params (default: $OVN_NORTHD_LOG)
+  --ovn-ovsdb-log=STRING             ovn ovsdb-server processes logging params (default: $OVN_OVSDB_LOG)
   -h, --help                     display this help message

 File location options:
@@ -153,6 +235,9 @@ File location options:
   --db-sb-file=FILE    OVN_Southbound db file (default: $DB_SB_FILE)
   --db-nb-schema=FILE  OVN_Northbound db file (default: $DB_NB_SCHEMA)
   --db-sb-schema=FILE  OVN_Southbound db file (default: $DB_SB_SCHEMA)
+  --db-nb-port=PORT    OVN Northbound db ptcp port (default: $DB_NB_PORT)
+  --db-sb-port=PORT    OVN Southbound db ptcp port (default: $DB_SB_PORT)
+  --ovn-dir=FILE       OVN Databases directory (default: $OVN_DIR)

 Default directories with "configure" option and environment variable override:
   logs: /usr/local/var/log/openvswitch (--with-logdir, OVS_LOGDIR)
@@ -210,24 +295,36 @@ case $command in
     start_northd)
         start_northd
         ;;
+    start_ovsdb)
+        start_ovsdb
+        ;;
     start_controller)
         start_controller
         ;;
     stop_northd)
         stop_northd
         ;;
+    stop_ovsdb)
+       stop_ovsdb
+        ;;
     stop_controller)
         stop_controller
         ;;
     restart_northd)
         restart_northd
         ;;
+    restart_ovsdb)
+        restart_ovsdb
+        ;;
     restart_controller)
         restart_controller
         ;;
     status_northd)
         daemon_status ovn-northd || exit 1
         ;;
+    status_ovsdb)
+        status_ovsdb
+        ;;
     status_controller)
         daemon_status ovn-controller || exit 1
         ;;
diff --git a/ovn/utilities/ovn-nbctl.c b/ovn/utilities/ovn-nbctl.c
index c0b6981..bdad368 100644
--- a/ovn/utilities/ovn-nbctl.c
+++ b/ovn/utilities/ovn-nbctl.c
@@ -142,7 +142,7 @@ nbctl_default_db(void)
     if (!def) {
         def = getenv("OVN_NB_DB");
         if (!def) {
-            def = ctl_default_db();
+            def = xasprintf("unix:%s/ovnnb_db.sock", ovs_rundir());
         }
     }
     return def;
diff --git a/ovn/utilities/ovn-sbctl.c b/ovn/utilities/ovn-sbctl.c
index b9e3c10..407f5f8 100644
--- a/ovn/utilities/ovn-sbctl.c
+++ b/ovn/utilities/ovn-sbctl.c
@@ -28,6 +28,7 @@
 #include <unistd.h>

 #include "db-ctl-base.h"
+#include "dirs.h"

 #include "command-line.h"
 #include "compiler.h"
@@ -154,7 +155,7 @@ sbctl_default_db(void)
     if (!def) {
         def = getenv("OVN_SB_DB");
         if (!def) {
-            def = ctl_default_db();
+            def = xasprintf("unix:%s/ovnsb_db.sock", ovs_rundir());
         }
     }
     return def;
--
2.4.9 (Apple Git-60)



More information about the dev mailing list