]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-disk: use unix lock instead of lockfile class
authorSage Weil <sage@inktank.com>
Thu, 20 Jun 2013 00:27:49 +0000 (17:27 -0700)
committerSage Weil <sage@inktank.com>
Thu, 27 Jun 2013 01:42:29 +0000 (18:42 -0700)
The lockfile class relies on file system trickery to get safe mutual
exclusion.  However, the unix syscalls do this for us.  More
importantly, the unix locks go away when the owning process dies, which
is behavior that we want here.

Fixes: #5387
Backport: cuttlefish
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Dan Mick <dan.mick@inktank.com>
(cherry picked from commit 2a4953b697a3464862fd3913336edfd7eede2487)

src/ceph-disk

index f13ab88d8dfe2bd98047d58ac87e58d59dfa6cea..0c1ffb965af642cced2e083c400e9160e4de5137 100755 (executable)
@@ -2,6 +2,7 @@
 
 import argparse
 import errno
+import fcntl
 import logging
 import os
 import os.path
@@ -12,7 +13,6 @@ import stat
 import sys
 import tempfile
 import uuid
-import lockfile
 
 """
 Prepare:
@@ -110,8 +110,30 @@ if LOG_NAME == '__main__':
     LOG_NAME = os.path.basename(sys.argv[0])
 LOG = logging.getLogger(LOG_NAME)
 
-prepare_lock = lockfile.FileLock('/var/lib/ceph/tmp/ceph-disk.prepare.lock')
-activate_lock = lockfile.FileLock('/var/lib/ceph/tmp/ceph-disk.activate.lock')
+
+
+
+###### lock ########
+
+class filelock(object):
+    def __init__(self, fn):
+        self.fn = fn
+        self.fd = None
+
+    def acquire(self):
+        assert not self.fd
+        self.fd = file(self.fn, 'w')
+        fcntl.lockf(self.fd, fcntl.LOCK_EX)
+
+    def release(self):
+        assert self.fd
+        fcntl.lockf(self.fd, fcntl.LOCK_UN)
+        self.fd = None
+
+
+prepare_lock = filelock('/var/lib/ceph/tmp/ceph-disk.prepare.lock')
+activate_lock = filelock('/var/lib/ceph/tmp/ceph-disk.activate.lock')
+
 
 ###### exceptions ########