ovsdb: Implement garbage collection.
[sliver-openvswitch.git] / debian / openvswitch-switch.init
index 92ab775..8ea5866 100755 (executable)
@@ -232,6 +232,18 @@ case "$1" in
             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 $conf_file $schema_file
         fi