Added a check on pid in start_northd
Added ssl params option cloning the conf db of normal openvswitch db (in this 
way ssl should follow exactly the same behaviour as in normal ovsdb)
Added configuration options for logging

Signed-off-by: Michael Arnaldi <m...@mymoneyex.com>
---
NEWS                      |   2 +
ovn/northd/ovn-northd.c   |  33 ++++++---
ovn/utilities/ovn-ctl     | 172 ++++++++++++++++++++++++++++++++++++++--------
ovn/utilities/ovn-nbctl.c |   2 +-
ovn/utilities/ovn-sbctl.c |   3 +-
5 files changed, 171 insertions(+), 41 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..4563279 100755
--- a/ovn/utilities/ovn-ctl
+++ b/ovn/utilities/ovn-ctl
@@ -30,37 +30,102 @@ 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
+
+        if [ ! -f $DB_NB_CONF_FILE ]; then
+            cp -f $DB_CONF_FILE $DB_NB_CONF_FILE
+        fi
+
+        set ovsdb-server
+
+        set "$@" --detach $OVN_OVSDB_LOG --remote=punix:$DB_NB_SOCK 
--remote=ptcp:$DB_NB_PORT --pidfile=$DB_NB_PID
+        set "$@" --private-key=db:Open_vSwitch,SSL,private_key
+        set "$@" --certificate=db:Open_vSwitch,SSL,certificate
+        set "$@" --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert
+
+        $@ $DB_NB_FILE $DB_NB_CONF_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
+
+        if [ ! -f $DB_SB_CONF_FILE ]; then
+            cp -f $DB_CONF_FILE $DB_SB_CONF_FILE
+        fi
+
+        set ovsdb-server
+
+        set "$@" --detach $OVN_OVSDB_LOG --remote=punix:$DB_SB_SOCK 
--remote=ptcp:$DB_SB_PORT --pidfile=$DB_SB_PID
+        set "$@" --private-key=db:Open_vSwitch,SSL,private_key
+        set "$@" --certificate=db:Open_vSwitch,SSL,certificate
+        set "$@" --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert
+
+        $@ $DB_SB_FILE $DB_SB_CONF_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 () {
 set ovn-controller "unix:$DB_SOCK"
-    set "$@" -vconsole:emer -vsyslog:err -vfile:info
+    set "$@" $OVN_CONTROLLER_LOG
 OVS_RUNDIR=${OVN_RUNDIR} start_daemon "$OVN_CONTROLLER_PRIORITY" 
"$OVN_CONTROLLER_WRAPPER" "$@"
}

@@ -70,6 +135,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 +159,38 @@ 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
+    DB_CONF_FILE=$dbdir/conf.db
+
+    DB_NB_CONF_FILE=$OVN_DIR/ovnnb_conf.db
+    DB_SB_CONF_FILE=$OVN_DIR/ovnsb_conf.db
+
 OVN_NORTHD_PRIORITY=-10
 OVN_NORTHD_WRAPPER=
 OVN_CONTROLLER_PRIORITY=-10
@@ -108,6 +198,10 @@ set_defaults () {

 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,18 +228,25 @@ 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
+  --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:
--db-sock=SOCKET     JSON-RPC socket name (default: $DB_SOCK)
@@ -153,12 +254,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 +312,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