Parametrized lock test and make it work with MPI

- Lock test can be run either as a node-local test or as an MPI test.

- Lock test is now parametrized by filesystem, so you can test the
  locking capabilities of your NFS, Lustre, or GPFS filesystem.  See docs
  for details.
This commit is contained in:
Todd Gamblin
2017-07-03 17:30:18 -07:00
parent bd7a591df1
commit b4d1654e68
2 changed files with 255 additions and 46 deletions

View File

@@ -127,8 +127,9 @@ def _lock(self, op, timeout=_default_timeout):
return
except IOError as error:
if error.errno == errno.EAGAIN or error.errno == errno.EACCES:
except IOError as e:
if e.errno in (errno.EAGAIN, errno.EACCES):
# EAGAIN and EACCES == locked by another process
pass
else:
raise
@@ -197,6 +198,8 @@ def acquire_read(self, timeout=_default_timeout):
tty.debug('READ LOCK: {0.path}[{0._start}:{0._length}] [Acquiring]'
.format(self))
self._lock(fcntl.LOCK_SH, timeout=timeout) # can raise LockError.
tty.debug('READ LOCK: {0.path}[{0._start}:{0._length}] [Acquired]'
.format(self))
self._reads += 1
return True
else:
@@ -219,6 +222,8 @@ def acquire_write(self, timeout=_default_timeout):
'WRITE LOCK: {0.path}[{0._start}:{0._length}] [Acquiring]'
.format(self))
self._lock(fcntl.LOCK_EX, timeout=timeout) # can raise LockError.
tty.debug('WRITE LOCK: {0.path}[{0._start}:{0._length}] [Acquired]'
.format(self))
self._writes += 1
return True
else: