summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGurucharan Shetty <shettyg@nicira.com>2015-10-01 15:09:56 -0700
committerGurucharan Shetty <gshetty@nicira.com>2015-10-02 10:39:40 -0700
commit2db1b5d8c9b6bd8dbafa078c5ad3704dc8c3ecf1 (patch)
treeba464b42639f802a53360438b7fa0cc877cf0dd8
parent04b29c3421cd63f193e1b7e1b5f9625df543376c (diff)
downloadopenvswitch-2db1b5d8c9b6bd8dbafa078c5ad3704dc8c3ecf1.tar.gz
ovn-ctl: Ability to upgrade databases.
Signed-off-by: Gurucharan Shetty <gshetty@nicira.com> Acked-by: Ben Pfaff <blp@nicira.com>
-rwxr-xr-xovn/utilities/ovn-ctl37
-rwxr-xr-xutilities/ovs-ctl.in41
-rw-r--r--utilities/ovs-lib.in42
3 files changed, 60 insertions, 60 deletions
diff --git a/ovn/utilities/ovn-ctl b/ovn/utilities/ovn-ctl
index 9f1602195..3e2ccf9a6 100755
--- a/ovn/utilities/ovn-ctl
+++ b/ovn/utilities/ovn-ctl
@@ -30,31 +30,28 @@ done
## start ##
## ----- ##
-check_ovn_dbs () {
- if test ! -e "$DB_NB_FILE"; then
- create_db "$DB_NB_FILE" "$DB_NB_SCHEMA"
- fi
-
- if test ! -e "$DB_SB_FILE"; then
- create_db "$DB_SB_FILE" "$DB_SB_SCHEMA"
- fi
-
- running_ovn_dbs=$(ovs-appctl -t ovsdb-server ovsdb-server/list-dbs | grep OVN | wc -l)
- if [ "$running_ovn_dbs" != "2" ] ; then
- ovs-appctl -t ovsdb-server ovsdb-server/add-db $DB_NB_FILE
- ovs-appctl -t ovsdb-server ovsdb-server/add-db $DB_SB_FILE
- running_ovn_dbs=$(ovs-appctl -t ovsdb-server ovsdb-server/list-dbs | grep OVN | wc -l)
- if [ "$running_ovn_dbs" != "2" ] ; then
- echo >&2 "$0: Failed to add OVN dbs to ovsdb-server"
- exit 1
- fi
- fi
+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
}
start_northd () {
# We expect ovn-northd to be co-located with ovsdb-server handling both the
# OVN_Northbound and OVN_Southbound dbs.
- check_ovn_dbs
+ upgrade_ovn_dbs
set ovn-northd
set "$@" -vconsole:emer -vsyslog:err -vfile:info
diff --git a/utilities/ovs-ctl.in b/utilities/ovs-ctl.in
index 322e42005..0082bedf1 100755
--- a/utilities/ovs-ctl.in
+++ b/utilities/ovs-ctl.in
@@ -76,45 +76,6 @@ ovs_vsctl () {
ovs-vsctl --no-wait "$@"
}
-upgrade_db () {
- schemaver=`ovsdb_tool schema-version "$DB_SCHEMA"`
- if test ! -e "$DB_FILE"; then
- log_warning_msg "$DB_FILE does not exist"
- install -d -m 755 -o root -g root `dirname $DB_FILE`
- create_db "$DB_FILE" "$DB_SCHEMA"
- elif test X"`ovsdb_tool needs-conversion "$DB_FILE" "$DB_SCHEMA"`" != Xno; then
- # Back up the old version.
- version=`ovsdb_tool db-version "$DB_FILE"`
- cksum=`ovsdb_tool db-cksum "$DB_FILE" | awk '{print $1}'`
- backup=$DB_FILE.backup$version-$cksum
- action "Backing up database to $backup" cp "$DB_FILE" "$backup" || return 1
-
- # Compact database. This is important if the old schema did not enable
- # garbage collection (i.e. if it did not have any tables with "isRoot":
- # true) but the new schema does. In that situation the old database
- # may contain a transaction that creates a record followed by a
- # transaction that creates the first use of the record. Replaying that
- # series of transactions against the new database schema (as "convert"
- # does) would cause the record to be dropped by the first transaction,
- # then the second transaction would cause a referential integrity
- # failure (for a strong reference).
- #
- # Errors might occur on an Open vSwitch downgrade if ovsdb-tool doesn't
- # understand some feature of the schema used in the OVSDB version that
- # we're downgrading from, so we don't give up on error.
- action "Compacting database" ovsdb_tool compact "$DB_FILE"
-
- # Upgrade or downgrade schema.
- if action "Converting database schema" ovsdb_tool convert "$DB_FILE" "$DB_SCHEMA"; then
- :
- else
- log_warning_msg "Schema conversion failed, using empty database instead"
- rm -f "$DB_FILE"
- create_db "$DB_FILE" "$DB_SCHEMA"
- fi
- fi
-}
-
set_system_ids () {
set ovs_vsctl set Open_vSwitch .
@@ -182,7 +143,7 @@ start_ovsdb () {
log_success_msg "ovsdb-server is already running"
else
# Create initial database or upgrade database schema.
- upgrade_db || return 1
+ upgrade_db $DB_FILE $DB_SCHEMA || return 1
# Start ovsdb-server.
set ovsdb-server "$DB_FILE"
diff --git a/utilities/ovs-lib.in b/utilities/ovs-lib.in
index ef3150ad2..dd8a1e931 100644
--- a/utilities/ovs-lib.in
+++ b/utilities/ovs-lib.in
@@ -335,3 +335,45 @@ create_db () {
DB_SCHEMA="$2"
action "Creating empty database $DB_FILE" ovsdb_tool create "$DB_FILE" "$DB_SCHEMA"
}
+
+upgrade_db () {
+ DB_FILE="$1"
+ DB_SCHEMA="$2"
+
+ schemaver=`ovsdb_tool schema-version "$DB_SCHEMA"`
+ if test ! -e "$DB_FILE"; then
+ log_warning_msg "$DB_FILE does not exist"
+ install -d -m 755 -o root -g root `dirname $DB_FILE`
+ create_db "$DB_FILE" "$DB_SCHEMA"
+ elif test X"`ovsdb_tool needs-conversion "$DB_FILE" "$DB_SCHEMA"`" != Xno; then
+ # Back up the old version.
+ version=`ovsdb_tool db-version "$DB_FILE"`
+ cksum=`ovsdb_tool db-cksum "$DB_FILE" | awk '{print $1}'`
+ backup=$DB_FILE.backup$version-$cksum
+ action "Backing up database to $backup" cp "$DB_FILE" "$backup" || return 1
+
+ # Compact database. This is important if the old schema did not enable
+ # garbage collection (i.e. if it did not have any tables with "isRoot":
+ # true) but the new schema does. In that situation the old database
+ # may contain a transaction that creates a record followed by a
+ # transaction that creates the first use of the record. Replaying that
+ # series of transactions against the new database schema (as "convert"
+ # does) would cause the record to be dropped by the first transaction,
+ # then the second transaction would cause a referential integrity
+ # failure (for a strong reference).
+ #
+ # Errors might occur on an Open vSwitch downgrade if ovsdb-tool doesn't
+ # understand some feature of the schema used in the OVSDB version that
+ # we're downgrading from, so we don't give up on error.
+ action "Compacting database" ovsdb_tool compact "$DB_FILE"
+
+ # Upgrade or downgrade schema.
+ if action "Converting database schema" ovsdb_tool convert "$DB_FILE" "$DB_SCHEMA"; then
+ :
+ else
+ log_warning_msg "Schema conversion failed, using empty database instead"
+ rm -f "$DB_FILE"
+ create_db "$DB_FILE" "$DB_SCHEMA"
+ fi
+ fi
+}