[ovs-dev] [db-backup 5/5] Avoid unneeded database compaction at startup, and improve backups.

Ben Pfaff blp at nicira.com
Tue Feb 15 18:19:05 UTC 2011


On Mon, Feb 14, 2011 at 04:19:42PM -0800, Ethan Jackson wrote:
> I think this is fine.  However, we could alternatively always use the
> db-version and the checksum in the backup file name saving the need to
> check if it exists and having the added benefit of consistency.  At
> any rate, looks good go ahead and merge when you're ready.

I like your idea.  Much simpler and cleaner than mine.  Here's the
revised version.  Can you look it over?  There are many pitfalls in
shell programming, so I'm nervous.  Thanks!

--8<--------------------------cut here-------------------------->8--

From: Ben Pfaff <blp at nicira.com>
Date: Tue, 15 Feb 2011 10:17:44 -0800
Subject: [PATCH] Avoid unneeded database compaction at startup, and improve backups.

Until now, Open vSwitch "start" has always converted the database to the
current database schema.  This compacts the database, which as a side
effect throws away useful information about the transactions that were
executed to bring the database into its current state.  This can make
debugging database-related problems more difficult.

This commit changes the "start" command to only convert the database if
the database schema has changed.  It also adds the database checksum to
the backup file name, to avoid overwriting backups in the case where the
checksum changed but the developer neglected to update the version number.

I tested an earlier version of the xenserver changes but not any version
of the Debian changes.
---
 debian/openvswitch-switch.init   |   11 +++++------
 xenserver/etc_init.d_openvswitch |   13 +++++--------
 2 files changed, 10 insertions(+), 14 deletions(-)

diff --git a/debian/openvswitch-switch.init b/debian/openvswitch-switch.init
index 60cc369..29c8c65 100755
--- a/debian/openvswitch-switch.init
+++ b/debian/openvswitch-switch.init
@@ -226,12 +226,11 @@ case "$1" in
         if test ! -e $conf_file; then
             # Create configuration database.
             ovsdb-tool -vANY:console:emer create $conf_file $schema_file
-        else
-            # If schema version changed, then back up the old version.
-            old_ver=`ovsdb-tool db-version "$conf_file"`
-            if test "X$old_ver" != "X$schema_ver"; then
-                cp "$conf_file" "$conf_file.backup$old_ver"
-            fi
+        elif test "X`ovsdb-tool needs-conversion $conf_file $schema_file`" != Xno; then
+            # Back up the old version.
+            version=`ovsdb-tool db-version "$conf_file"`
+            cksum=`ovsdb-tool db-cksum "$conf_file" | awk '{print $1}'`
+            cp "$conf_file" "$conf_file.backup$version-$cksum"
             
             # Upgrade or downgrade schema and compact database.
             ovsdb-tool -vANY:console:emer convert $conf_file $schema_file
diff --git a/xenserver/etc_init.d_openvswitch b/xenserver/etc_init.d_openvswitch
index 34fbc97..cbd2eee 100755
--- a/xenserver/etc_init.d_openvswitch
+++ b/xenserver/etc_init.d_openvswitch
@@ -335,14 +335,11 @@ function start {
 
         action "Creating empty database $OVSDB_SERVER_DB" true
         $ovsdb_tool -vANY:console:emer create "$OVSDB_SERVER_DB" "$VSWITCHD_OVSDB_SCHEMA"
-    else
-        # If schema version changed, then back up the old version.
-        oldver=`$ovsdb_tool db-version "$OVSDB_SERVER_DB"`
-        if test "X$oldver" != "X$schemaver"; then
-            backup=$OVSDB_SERVER_DB.backup$oldver
-            action "Backing up $OVSDB_SERVER_DB in $backup before converting from schema version \"$oldver\" to \"$schemaver\"" true
-            cp "$OVSDB_SERVER_DB" "$backup"
-        fi
+    elif test "X`$ovsdb_tool needs-conversion "$OVSDB_SERVER_DB" "$VSWITCHD_OVSDB_SCHEMA"`" != Xno; then
+        # Back up the old version.
+        version=`$ovsdb_tool db-version "$OVSDB_SERVER_DB"`
+        cksum=`$ovsdb_tool db-cksum "$OVSDB_SERVER_DB" | awk '{print $1}'`
+        cp "$OVSDB_SERVER_DB" "$OVSDB_SERVER_DB.backup$version-$cksum"
 
         # Upgrade or downgrade schema and compact database.
         $ovsdb_tool -vANY:console:emer convert "$OVSDB_SERVER_DB" "$VSWITCHD_OVSDB_SCHEMA"
-- 
1.7.1





More information about the dev mailing list