ovsdb-tool: Do not lock source db for compacting or converting to new db.
authorBen Pfaff <blp@nicira.com>
Mon, 8 Mar 2010 22:01:16 +0000 (14:01 -0800)
committerBen Pfaff <blp@nicira.com>
Mon, 8 Mar 2010 23:28:12 +0000 (15:28 -0800)
"ovsdb-tool compact SRC DST" and "ovsdb-tool convert SRC SCHEMA DST" do not
need to lock SRC, because they do not modify it.

Reported-by: Justin Pettit <jpettit@nicira.com>
ovsdb/ovsdb-tool.c

index 26f9003bd9c1f8bef8e94dd5e9d2ee6df5a76787..b2e200cbb8df38614e7b91208ee1112cb01ecbc0 100644 (file)
@@ -187,17 +187,18 @@ compact_or_convert(const char *src_name, const char *dst_name,
     struct ovsdb *db;
     int retval;
 
-    /* Get (temporary) destination. */
+    /* Lock the source, if we will be replacing it. */
     if (in_place) {
-        dst_name = xasprintf("%s.tmp", src_name);
+        retval = lockfile_lock(src_name, INT_MAX, &src_lock);
+        if (retval) {
+            ovs_fatal(retval, "%s: failed to lock lockfile", src_name);
+        }
     }
 
-    /* Lock source and (temporary) destination. */
-    retval = lockfile_lock(src_name, INT_MAX, &src_lock);
-    if (retval) {
-        ovs_fatal(retval, "%s: failed to lock lockfile", src_name);
+    /* Get (temporary) destination and lock it. */
+    if (in_place) {
+        dst_name = xasprintf("%s.tmp", src_name);
     }
-
     retval = lockfile_lock(dst_name, INT_MAX, &dst_lock);
     if (retval) {
         ovs_fatal(retval, "%s: failed to lock lockfile", dst_name);
@@ -217,7 +218,6 @@ compact_or_convert(const char *src_name, const char *dst_name,
                       dst_name, src_name);
         }
         fsync_parent_dir(dst_name);
-    } else {
         lockfile_unlock(src_lock);
     }