summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-06-19 17:27:49 -0700
committerSage Weil <sage@inktank.com>2013-06-19 17:58:31 -0700
commit2a4953b697a3464862fd3913336edfd7eede2487 (patch)
treef9eab22561eca22e0047e9e9e74c472fe5041495
parentcb6bc95a9cb9e272230e080471787b63fa080755 (diff)
downloadceph-2a4953b697a3464862fd3913336edfd7eede2487.tar.gz
ceph-disk: use unix lock instead of lockfile class
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>
-rwxr-xr-xsrc/ceph-disk28
1 files changed, 25 insertions, 3 deletions
diff --git a/src/ceph-disk b/src/ceph-disk
index 93864c1c008..392af4a78b7 100755
--- a/src/ceph-disk
+++ b/src/ceph-disk
@@ -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 ########