Options for running ovsdb separately is done and also described in the help 
file.

NEWS file is updated.

I just have to rise a few points:

- the way thing are running with start/stop daemon from ova-lib require
the daemon to have a pidfile named daemon.pid and this is impossible
to use in our case because we will end up having conflict between
nb and sb db because they both will appear ad ovsdb-server.

- the way SSL is handles in ovs-ctl make usage of 
db:Open_vSwitch,SSL,private_key and I suppose we don’t have this vars
using ovsdb-server without cons.db (please correct me if I’m wrong)

Said that I will wait feedback to proceed.

Signed-off-by: Michael Arnaldi <m...@mymoneyex.com>
---
 NEWS                      |   2 +
 ovn/northd/ovn-northd.c   |  33 ++++++++----
 ovn/utilities/ovn-ctl     | 125 ++++++++++++++++++++++++++++++++++++----------
 ovn/utilities/ovn-nbctl.c |   2 +-
 ovn/utilities/ovn-sbctl.c |   3 +-
 5 files changed, 127 insertions(+), 38 deletions(-)

diff --git a/NEWS b/NEWS
index 3e33871..aa53e8c 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,7 @@
 Post-v2.5.0
 ---------------------
+   - ovn:
+     * Separation of NB & SB db
    - 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..eb7302e 100755
--- a/ovn/utilities/ovn-ctl
+++ b/ovn/utilities/ovn-ctl
@@ -30,31 +30,66 @@ 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 () {
+    if ! pidfile_is_running $DB_NB_PID; then
+        upgrade_db "$DB_NB_FILE" "$DB_NB_SCHEMA" 1>/dev/null 2>/dev/null
+        ovsdb-server --detach -vconsole:off --remote=punix:$DB_NB_SOCK 
--remote=ptcp:$DB_NB_PORT --pidfile=$DB_NB_PID $DB_NB_FILE
+    fi
+
+    if ! pidfile_is_running $DB_SB_PID; then
+        upgrade_db "$DB_SB_FILE" "$DB_SB_SCHEMA" 1>/dev/null 2>/dev/null
+        ovsdb-server --detach -vconsole:off --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
+
+    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
 
     set ovn-northd
-    set "$@" -vconsole:emer -vsyslog:err -vfile:info
+    set "$@" -vconsole:emer -vsyslog:err -vfile:info 
--ovnnb-db=unix:$DB_NB_SOCK --ovnsb-db=unix:$DB_SB_SOCK
     OVS_RUNDIR=${OVN_RUNDIR} start_daemon "$OVN_NORTHD_PRIORITY" 
"$OVN_NORTHD_WRAPPER" "$@"
 }
 
@@ -70,6 +105,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,17 +129,34 @@ 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
+    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
+
     OVN_NORTHD_PRIORITY=-10
     OVN_NORTHD_WRAPPER=
     OVN_CONTROLLER_PRIORITY=-10
@@ -134,18 +190,22 @@ 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:
-  --ovn-northd-priority=NICE     set ovn-northd's niceness (default: 
$OVN_NORTHD_PRIORITY)
-  --ovn-northd-wrapper=WRAPPER   run with a wrapper like valgrind for debugging
+  --ovn-northd-priority=NICE         set ovn-northd's niceness (default: 
$OVN_NORTHD_PRIORITY)
+  --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
-  -h, --help                     display this help message
+  --ovn-manage-ovsdb=no              manage ovsdb separately from start_northd 
and stop_northd
+  -h, --help                         display this help message
 
 File location options:
   --db-sock=SOCKET     JSON-RPC socket name (default: $DB_SOCK)
@@ -153,12 +213,13 @@ 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)
   pidfiles and sockets: /usr/local/var/run/openvswitch (--with-rundir, 
OVS_RUNDIR)
-  ovn-nb.db: /usr/local/etc/openvswitch (--with-dbdir, OVS_DBDIR)
-  ovn-sb.db: /usr/local/etc/openvswitch (--with-dbdir, OVS_DBDIR)
   system configuration: /usr/local/etc (--sysconfdir, OVS_SYSCONFDIR)
   data files: /usr/local/share/openvswitch (--pkgdatadir, OVS_PKGDATADIR)
   user binaries: /usr/local/bin (--bindir, OVS_BINDIR)
@@ -210,24 +271,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 324a0a4..9ce65b7 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 b428a35..8bbfdfd 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)


Michael Arnaldi - Chief Technology Officer (CTO)

MyMoneyEx Limited
c/o Buzzacott LLP
130 Wood Street
London EC2V 6DL - United Kingdom

Mail: michael.arna...@mymoneyex.com
Web: https://www.mymoneyex.com
--------------------------------------------------------------------------------------------
This message is private and confidential.
If you have received this message in error, please notify us and remove it from 
your system.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to