Prepare Open vSwitch 1.1.2 release.
[sliver-openvswitch.git] / debian / openvswitch-switch.init
index 935ea48..8ea5866 100755 (executable)
@@ -29,7 +29,7 @@ DODTIME=1                   # Time to wait for the server to die, in seconds
                             # let some servers to die gracefully and
                             # 'restart' will not work
 
-# Include ovs-openflowd defaults if available
+# Include openvswitch-switch defaults if available
 unset OVSDB_SERVER_OPTS
 unset OVS_VSWITCHD_OPTS
 unset CORE_LIMIT
@@ -193,8 +193,29 @@ unload_modules() {
     unload_module openvswitch_mod
 }
 
+set_system_info() {
+    ovs_version=`ovs-vswitchd --version | sed 's/.*) //;1q'`
+    ovs-vsctl --no-wait --timeout=5 set Open_vSwitch . \
+        ovs-version="$ovs_version"
+
+    if (lsb_release --id) >/dev/null 2>&1; then
+        system_type=`lsb_release --id -s`
+        system_release=`lsb_release --release -s`
+        system_codename=`lsb_release --codename -s`
+        system_version="${system_release}-${system_codename}"
+
+        ovs-vsctl --no-wait --timeout=5 set Open_vSwitch . \
+            system-type="$system_type" \
+            system-version="$system_version"
+    fi
+}
+
 case "$1" in
     start)
+        conf_file=/etc/openvswitch/conf.db
+        schema_file=/usr/share/openvswitch/vswitch.ovsschema
+        schema_ver=`ovsdb-tool schema-version "$schema_file"`
+
         load_module openvswitch_mod
 
         if test -n "$CORE_LIMIT"; then
@@ -202,16 +223,29 @@ case "$1" in
         fi
 
         # Create an empty configuration database if it doesn't exist.
-        if test ! -e /etc/openvswitch/conf.db; then
+        if test ! -e $conf_file; then
             # Create configuration database.
-            ovsdb-tool -vANY:console:emer \
-                create /etc/openvswitch/conf.db \
-                /usr/share/openvswitch/vswitch.ovsschema
-        elif ! running ovsdb-server; then
+            ovsdb-tool -vANY:console:emer create $conf_file $schema_file
+        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"
+            
+            # 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).
+            ovsdb-tool -vANY:console:emer compact $conf_file
+
             # Upgrade or downgrade schema and compact database.
-            ovsdb-tool -vANY:console:emer \
-                convert /etc/openvswitch/conf.db \
-                /usr/share/openvswitch/vswitch.ovsschema
+            ovsdb-tool -vANY:console:emer convert $conf_file $schema_file
         fi
 
         if test "$ENABLE_MONITOR" = y; then
@@ -234,12 +268,12 @@ case "$1" in
 
         # Start ovsdb-server.
         set --
-        set -- "$@" /etc/openvswitch/conf.db
+        set -- "$@" $conf_file
         set -- "$@" --verbose=ANY:console:emer --verbose=ANY:syslog:err
         set -- "$@" --log-file=/var/log/openvswitch/ovsdb-server.log
         set -- "$@" --detach --no-chdir --pidfile $monitor_opt
         set -- "$@" --remote punix:/var/run/openvswitch/db.sock
-        set -- "$@" --remote db:Open_vSwitch,managers
+        set -- "$@" --remote db:Open_vSwitch,manager_options
         set -- "$@" --private-key=db:SSL,private_key
         set -- "$@" --certificate=db:SSL,certificate
         set -- "$@" --bootstrap-ca-cert=db:SSL,ca_cert
@@ -255,7 +289,9 @@ case "$1" in
             echo " ERROR."
         fi
 
-        ovs-vsctl --no-wait --timeout=5 init
+        ovs-vsctl --no-wait --timeout=5 init -- set Open_vSwitch . db-version="$schema_ver"
+
+        set_system_info
 
         # Start ovs-vswitchd.
         set --
@@ -327,7 +363,7 @@ case "$1" in
             if running $daemon;  then
                 echo "running"
             else
-                echo " not running."
+                echo "not running."
                 exit 1
             fi
         done