[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