[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-4.0-testing] Remus: add file locking and modprobe utility functions
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1277188199 -3600 # Node ID 95f9be32fabfe33b05c2c7cbffabf1f1e3d67db9 # Parent 1d09d8eecc3aa002d51a9ffd0bc5c1bd0ce67ad3 Remus: add file locking and modprobe utility functions Signed-off-by: Brendan Cully <brendan@xxxxxxxxx> xen-unstable changeset: 21243:ca9519f09563 xen-unstable date: Tue May 04 09:35:42 2010 +0100 --- tools/python/xen/remus/util.py | 51 ++++++++++++++++++++++++++++++++++++++++- 1 files changed, 50 insertions(+), 1 deletion(-) diff -r 1d09d8eecc3a -r 95f9be32fabf tools/python/xen/remus/util.py --- a/tools/python/xen/remus/util.py Tue Jun 22 07:29:26 2010 +0100 +++ b/tools/python/xen/remus/util.py Tue Jun 22 07:29:59 2010 +0100 @@ -1,6 +1,6 @@ # utility functions -import os, subprocess +import fcntl, os, subprocess class PipeException(Exception): def __init__(self, message, errno): @@ -8,8 +8,49 @@ class PipeException(Exception): message = '%s: %d, %s' % (message, errno, os.strerror(errno)) Exception.__init__(self, message) +class Lock(object): + """advisory lock""" + + def __init__(self, filename): + """lock using filename for synchronization""" + self.filename = filename + '.lock' + + self.fd = None + + self.lock() + + def __del__(self): + self.unlock() + + def lock(self): + if self.fd: + return + + self.fd = open(self.filename, 'w') + fcntl.lockf(self.fd, fcntl.LOCK_EX) + + def unlock(self): + if not self.fd: + return + + fcntl.lockf(self.fd, fcntl.LOCK_UN) + self.fd = None + try: + os.remove(self.filename) + except OSError: + # harmless race + pass + def canonifymac(mac): return ':'.join(['%02x' % int(field, 16) for field in mac.split(':')]) + +def checkpid(pid): + """return True if pid is live""" + try: + os.kill(pid, 0) + return True + except OSError: + return False def runcmd(args, cwd=None): # TODO: stdin handling @@ -29,3 +70,11 @@ def runcmd(args, cwd=None): return stdout except (OSError, IOError), inst: raise PipeException('could not run %s' % args[0], inst.errno) + +def modprobe(modname): + """attempt to load kernel module modname""" + try: + runcmd(['modprobe', '-q', modname]) + return True + except PipeException: + return False _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |