diff options
author | Tom Scogland <scogland1@llnl.gov> | 2021-12-22 07:25:05 -0800 |
---|---|---|
committer | Massimiliano Culpo <massimiliano.culpo@gmail.com> | 2021-12-23 16:02:09 +0100 |
commit | 8e659f512e00534c6af427ef3832db68fcd2f2d3 (patch) | |
tree | d3324116f769b88ac8a2535a12237f83d9c8a635 /bin/sbang | |
parent | 5daf023aecf3d72943cff0a010dfafd95edfdf3b (diff) | |
download | spack-8e659f512e00534c6af427ef3832db68fcd2f2d3.tar.gz spack-8e659f512e00534c6af427ef3832db68fcd2f2d3.tar.bz2 spack-8e659f512e00534c6af427ef3832db68fcd2f2d3.tar.xz spack-8e659f512e00534c6af427ef3832db68fcd2f2d3.zip |
locks: allow locks to work under high contention (#27846)
* locks: allow locks to work under high contention
This is a bug found by Harshitha Menon.
The `lock=None` line shouldn't be a release but should be
```
return (lock_type, None)
```
to inform the caller it couldn't get the lock type requested without
disturbing the existing lock object in the database. There were also a
couple of bugs due to taking write locks at the beginning without any
checking or release, and not releasing read locks before requeueing.
This version no longer gives me read upgrade to write errors, even
running 200 instances on one box.
* Change lock in check_deps_status to read, release if not installed,
not sure why this was ever write, but read definitely is more
appropriate here, and the read lock is only held out of the scope if
the package is installed.
* Release read lock before requeueing to reduce chance of livelock, the
timeout that caused the original issue now happens in roughly 3 of 200
workers instead of 199 on average.
Diffstat (limited to 'bin/sbang')
0 files changed, 0 insertions, 0 deletions