summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/docs/basic_usage.rst45
-rw-r--r--lib/spack/spack/architecture.py14
2 files changed, 52 insertions, 7 deletions
diff --git a/lib/spack/docs/basic_usage.rst b/lib/spack/docs/basic_usage.rst
index 29791d98c4..f08a2bb675 100644
--- a/lib/spack/docs/basic_usage.rst
+++ b/lib/spack/docs/basic_usage.rst
@@ -1246,6 +1246,51 @@ several variants:
spack deactivate -a python
+Filesystem requirements
+--------------------------
+
+Spack currently needs to be run from a filesystem that supports
+``flock`` locking semantics. Nearly all local filesystems and recent
+versions of NFS support this, but parallel filesystems may be mounted
+without ``flock`` support enabled. You can determine how your
+filesystems are mounted with ``mount -p``. The output for a Lustre
+filesystem might look like this:
+
+.. code-block:: sh
+
+ $ mount -l | grep lscratch
+ pilsner-mds1-lnet0@o2ib100:/lsd on /p/lscratchd type lustre (rw,nosuid,noauto,_netdev,lazystatfs,flock)
+ porter-mds1-lnet0@o2ib100:/lse on /p/lscratche type lustre (rw,nosuid,noauto,_netdev,lazystatfs,flock)
+
+Note the ``flock`` option on both Lustre mounts. If you do not see
+this or a similar option for your filesystem, you may need ot ask your
+system administrator to enable ``flock``.
+
+This issue typically manifests with the error below:
+
+.. code-block:: sh
+
+ $ ./spack find
+ Traceback (most recent call last):
+ File "./spack", line 176, in <module>
+ main()
+ File "./spack", line 154, in main
+ return_val = command(parser, args)
+ File "./spack/lib/spack/spack/cmd/find.py", line 170, in find
+ specs = set(spack.installed_db.query(**q_args))
+ File "./spack/lib/spack/spack/database.py", line 551, in query
+ with self.read_transaction():
+ File "./spack/lib/spack/spack/database.py", line 598, in __enter__
+ if self._enter() and self._acquire_fn:
+ File "./spack/lib/spack/spack/database.py", line 608, in _enter
+ return self._db.lock.acquire_read(self._timeout)
+ File "./spack/lib/spack/llnl/util/lock.py", line 103, in acquire_read
+ self._lock(fcntl.LOCK_SH, timeout) # can raise LockError.
+ File "./spack/lib/spack/llnl/util/lock.py", line 64, in _lock
+ fcntl.lockf(self._fd, op | fcntl.LOCK_NB)
+ IOError: [Errno 38] Function not implemented
+
+A nicer error message is TBD in future versions of Spack.
Getting Help
-----------------------
diff --git a/lib/spack/spack/architecture.py b/lib/spack/spack/architecture.py
index 2701fab90c..62c25c8003 100644
--- a/lib/spack/spack/architecture.py
+++ b/lib/spack/spack/architecture.py
@@ -34,14 +34,14 @@ import spack.error as serr
class InvalidSysTypeError(serr.SpackError):
def __init__(self, sys_type):
- super(InvalidSysTypeError, self).__init__(
- "Invalid sys_type value for Spack: " + sys_type)
+ super(InvalidSysTypeError,
+ self).__init__("Invalid sys_type value for Spack: " + sys_type)
class NoSysTypeError(serr.SpackError):
def __init__(self):
- super(NoSysTypeError, self).__init__(
- "Could not determine sys_type for this machine.")
+ super(NoSysTypeError,
+ self).__init__("Could not determine sys_type for this machine.")
def get_sys_type_from_spack_globals():
@@ -69,15 +69,15 @@ def get_sys_type_from_platform():
@memoized
def sys_type():
"""Returns a SysType for the current machine."""
- methods = [get_sys_type_from_spack_globals,
- get_sys_type_from_environment,
+ methods = [get_sys_type_from_spack_globals, get_sys_type_from_environment,
get_sys_type_from_platform]
# search for a method that doesn't return None
sys_type = None
for method in methods:
sys_type = method()
- if sys_type: break
+ if sys_type:
+ break
# Couldn't determine the sys_type for this machine.
if sys_type is None: