From 2a4953b697a3464862fd3913336edfd7eede2487 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 19 Jun 2013 17:27:49 -0700 Subject: [PATCH] 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 Reviewed-by: Dan Mick --- src/ceph-disk | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/ceph-disk b/src/ceph-disk index 93864c1c00859..392af4a78b745 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 ######## -- 2.39.5