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