Skip to content

Commit

Permalink
Separating OVN NB and SB database processes
Browse files Browse the repository at this point in the history
OVN NB & SB DB's should be run in separate ovsdb-server processes
and should run with ovn-ctl start_northd / stop_northd.  This patch
includes changes to unit tests, tutorial and debian scripts to remain
self-consistent.

Signed-off-by: RYAN D. MOATS <[email protected]>
Signed-off-by: Michael Arnaldi <[email protected]>
Co-authored-by: Michael Arnaldi <[email protected]>
Signed-off-by: Russell Bryant <[email protected]>
  • Loading branch information
2 people authored and russellb committed Mar 24, 2016
1 parent 9a4457e commit 60bdd01
Show file tree
Hide file tree
Showing 11 changed files with 212 additions and 53 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,7 @@ Martino Fornasa [email protected]
Maryam Tahhan [email protected]
Mauricio Vásquez [email protected]
Mehak Mahajan [email protected]
Michael Arnaldi [email protected]
Michal Weglicki [email protected]
Mijo Safradin [email protected]
Minoru TAKAHASHI [email protected]
Expand Down
8 changes: 7 additions & 1 deletion debian/ovn-central.init
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,18 @@ start () {
"$@" || exit $?
}

stop_northd () {
set /usr/share/openvswitch/scripts/ovn-ctl ${1-stop_northd}
set "$@" $OVN_CTL_OPTS
"$@" || exit $?
}

case $1 in
start)
start
;;
stop)
/usr/share/openvswitch/scripts/ovn-ctl stop_northd
stop_northd
;;
restart)
start restart_northd
Expand Down
33 changes: 23 additions & 10 deletions ovn/northd/ovn-northd.c
Original file line number Diff line number Diff line change
Expand Up @@ -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. */

Expand Down Expand Up @@ -172,7 +173,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);
Expand Down Expand Up @@ -2238,15 +2239,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
Expand Down Expand Up @@ -2308,11 +2320,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);
Expand Down Expand Up @@ -2428,7 +2440,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);
}

Expand Down
156 changes: 131 additions & 25 deletions ovn/utilities/ovn-ctl
Original file line number Diff line number Diff line change
Expand Up @@ -30,32 +30,79 @@ 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
ovs-appctl -t ovnnb_db exit
fi

if pidfile_is_running $DB_SB_PID; then
ovs-appctl -t ovnsb_db exit
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_NB_LOG --log-file=$OVN_NB_LOGFILE --remote=punix:$DB_NB_SOCK --remote=ptcp:$DB_NB_PORT --pidfile=$DB_NB_PID --unixctl=ovnnb_db

$@ $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_SB_LOG --log-file=$OVN_SB_LOGFILE --remote=punix:$DB_SB_SOCK --remote=ptcp:$DB_SB_PORT --pidfile=$DB_SB_PID --unixctl=ovnsb_db
$@ $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-northd 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 () {
Expand All @@ -70,6 +117,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 () {
Expand All @@ -90,24 +141,49 @@ 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

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_NORTHD_LOG="-vconsole:emer -vsyslog:err -vfile:info"
OVN_NB_LOG="-vconsole:off"
OVN_SB_LOG="-vconsole:off"
OVN_NB_LOGFILE="$OVS_LOGDIR/ovsdb-server-nb.log"
OVN_SB_LOGFILE="$OVS_LOGDIR/ovsdb-server-sb.log"
}

set_option () {
Expand All @@ -134,17 +210,30 @@ 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-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=yes|no Whether or not the OVN databases should be
automatically started and stopped along
with ovn-northd. The default is "yes". If
this is set to "no", the "start_ovsdb" and
"stop_ovsdb" commands must be used to start
and stop the OVN databases.
--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-nb-log=STRING ovn NB ovsdb-server processes logging params (default: $OVN_NB_LOG)
--ovn-sb-log=STRING ovn SB ovsdb-server processes logging params (default: $OVN_SB_LOG)
-h, --help display this help message
File location options:
Expand All @@ -153,6 +242,11 @@ 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)
--ovn-nb-logfile=FILE OVN Northbound log file (default: $OVS_LOGDIR/ovsdb-server-nb.log)
--ovn-sb-logfile=FILE OVN Southbound log file (default: $OVS_LOGDIR/ovsdb-server-sb.log)
Default directories with "configure" option and environment variable override:
logs: /usr/local/var/log/openvswitch (--with-logdir, OVS_LOGDIR)
Expand Down Expand Up @@ -210,24 +304,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
;;
Expand Down
2 changes: 1 addition & 1 deletion ovn/utilities/ovn-nbctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
3 changes: 2 additions & 1 deletion ovn/utilities/ovn-sbctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include <unistd.h>

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

#include "command-line.h"
#include "compiler.h"
Expand Down Expand Up @@ -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;
Expand Down
Loading

0 comments on commit 60bdd01

Please sign in to comment.