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

Message ID 1455816362-16647-1-git-send-email-arnaldimichael@gmail.com
State Changes Requested
Headers show

Commit Message

Michael Arnaldi Feb. 18, 2016, 5:26 p.m.
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 <arnaldimichael@gmail.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(-)

--
2.4.9 (Apple Git-60)

Comments

Ben Pfaff Feb. 25, 2016, 7:25 p.m. | #1
On Thu, Feb 18, 2016 at 06:26:02PM +0100, Michael Arnaldi wrote:
> 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 <arnaldimichael@gmail.com>

I think I'd drop the NEWS item.  So far, we haven't been putting
anything about OVN in NEWS because we're still considering it somewhat
experimental.  We'll start adding items for OVN as we begin to consider
it more stable.

This changes some of the indentation in ovn-ctl from 4 spaces to 2
spaces.  It would be better to maintain it.

This breaks all the OVN end-to-end tests:

2006: ovn-nbctl - basic lswitch commands              FAILED (ovn-nbctl.at:35)
2007: ovn-nbctl - basic lport commands                FAILED (ovn-nbctl.at:59)
2008: ovn-nbctl - addresses                           FAILED (ovn-nbctl.at:84)
2009: ovn-nbctl - port security                       FAILED (ovn-nbctl.at:107)
2010: ovn-nbctl - ACLs                                FAILED (ovn-nbctl.at:130)
2012: ovn-sbctl - test                                FAILED (ovn-sbctl.at:78)
2014: ovn-controller-vtep - test chassis              FAILED (ovn-controller-vtep.at:114)
2015: ovn-controller-vtep - test binding 1            FAILED (ovn-controller-vtep.at:181)
2016: ovn-controller-vtep - test binding 2            FAILED (ovn-controller-vtep.at:245)
2017: ovn-controller-vtep - test vtep-lswitch         FAILED (ovn-controller-vtep.at:284)
2018: ovn-controller-vtep - test vtep-macs 1          FAILED (ovn-controller-vtep.at:336)
2019: ovn-controller-vtep - test vtep-macs 2          FAILED (ovn-controller-vtep.at:407)

Thanks,

Ben.

Patch

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;