On Tue, Feb 9, 2016 at 5:24 AM, Michael <michael.arna...@mymoneyex.com> wrote:
> 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.
>
I think that needs to be refactored to accept a pid file name so we
can have it generate separate pidfiles for the different DBs.

> - 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)
>
I think fundamentally we need the starting of the NB and SB DBs in
ovn-ctl to be done by calling start_ovsdb() from ovs-ctl. See comments
below.

> 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
> +}
> +

I think it makes sense to move stop_ovsdb and start_ovsdb out of
ovs-ctl.in and into ovs-lib so they can be consumed by ovs-ctl rather
than re-writing them above and losing some functionality which exists
in the current versions.

> +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
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to