]> git.proxmox.com Git - pve-cluster.git/commitdiff
add ability to update cfs locks, bump version to 3.0-17
authorDietmar Maurer <dietmar@proxmox.com>
Thu, 19 Feb 2015 11:09:05 +0000 (12:09 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Thu, 19 Feb 2015 11:09:05 +0000 (12:09 +0100)
Makefile
data/README
data/src/memdb.c
debian/changelog

index adfa74fab5383531002112d3809d396150672b35..13a83e8bf4b9fe4527970ad6f0cc417d76168cca 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@ RELEASE=3.3
 
 PACKAGE=pve-cluster
 PKGVER=3.0
-PKGREL=16
+PKGREL=17
 
 ARCH:=$(shell dpkg-architecture -qDEB_BUILD_ARCH)
 GITVERSION:=$(shell cat .git/refs/heads/master)
index 044f99ba06c7cc39ef9c5821bc21a5c7f90b652d..4d884e028529919fc1500a48b896eb4b62f5eca2 100644 (file)
@@ -358,6 +358,13 @@ be a time drift between nodes. Instead each node stores the local time when
 it first see a lock file. This time is used to calculate the age of
 the lock.
 
+With version 3.0-17, it is possible to update an existing lock using
+
+  utime 0, time();
+
+This succeeds if run from the same node you created the lock, and updates
+the lock lifetime for another 120 seconds. 
+
 
 References
 ==========
index 7a3ce83ba3a201995061421686746f5169f71e2c..94c590a7fe7c9d4e6c20a990de9d8c0cc386650d 100644 (file)
@@ -894,18 +894,26 @@ memdb_mtime(
                goto ret;
        }
 
+        int is_lock = (strcmp(dirname, "priv/lock") == 0) && (te->type == DT_DIR);
+
        /* NOTE: we use utime(0,0) to trigger 'unlock', so we do not
         * allow to change mtime for locks (only it mtime is newer).
         * See README for details about locks.
         */
-       if (mtime < te->mtime && te->type == DT_DIR && 
-           strcmp(dirname, "priv/lock") == 0) {
+        if (is_lock) {
+            if (mtime < te->mtime) {
                cfs_debug("dir is locked");
                ret = -EACCES;          
                goto ret;
+            } else {
+                /* only allow lock updates if the writer is the same */
+                if (te->writer != writer) { 
+                    ret = -EACCES;             
+                    goto ret;
+                }
+            }
        }
        
-
        memdb->root->version++;
        memdb->root->mtime = mtime;
        memdb->root->writer = writer;
@@ -926,6 +934,15 @@ memdb_mtime(
                goto ret;
        }
 
+        if (is_lock) {
+            cfs_debug("update cfs lock");
+            g_hash_table_remove(memdb->locks, path);
+            guchar csum[32];
+            if (memdb_tree_entry_csum(te, csum)) {
+                memdb_lock_expired(memdb, path, csum); // insert a new entry
+            }
+        }
+
        ret = 0;
 
  ret:
index 679751d576f97bec77d9b70381e3ddd5494d3c81..31997bee784773e462ccde87167e1ce1cc6c39dd 100644 (file)
@@ -1,3 +1,9 @@
+pve-cluster (3.0-17) unstable; urgency=low
+
+  * add ability to update cfs locks
+
+ -- Proxmox Support Team <support@proxmox.com>  Thu, 19 Feb 2015 11:56:06 +0100
+
 pve-cluster (3.0-16) unstable; urgency=low
 
   * recompile, and include new package with debug information