From b2fb48762f32279e73feb83b220339fea31275e9 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 (cherry picked from commit 2a4953b697a3464862fd3913336edfd7eede2487) --- src/ceph-disk | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/ceph-disk b/src/ceph-disk index f13ab88d8dfe2..0c1ffb965af64 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