]> 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, 20 Jun 2013 00:58:31 +0000 (17:58 -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>
src/ceph-disk

index 93864c1c00859832b5bd0e00bcafc0ca4f740afa..392af4a78b745ccc35f8dbed51655a35493b1116 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 ########