Commit graph

16394 commits

Author SHA1 Message Date
Todd Gamblin
d7f2a32887 performance: dont' read spec.yaml files twice in view regeneration
`ViewDescriptor.regenerate()` calls `get_all_specs()`, which reads
`spec.yaml` files, which is slow.  It's fine to do this once, but
`view.remove_specs()` *also* calls it immediately afterwards.

- [x] Pass the result of `get_all_specs()` as an optional parameter to
  `view.remove_specs()` to avoid reading `spec.yaml` files twice.
2019-12-23 18:36:56 -08:00
Todd Gamblin
78b84e4ade performance: don't recompute hashes when regenerating environments
`ViewDescriptor.regenerate()` was copying specs and stripping build
dependencies, which clears `_hash` and other cached fields on concrete
specs, which causes a bunch of YAML hashes to be recomputed.

- [x] Preserve the `_hash` and `_normal` fields on stripped specs, as
  these will be unchanged.
2019-12-23 18:36:56 -08:00
Todd Gamblin
9b90d7e801 performance: reduce system calls required for remove_dead_links
`os.path.exists()` will report False if the target of a symlink doesn't
exist, so we can avoid a costly call to realpath here.
2019-12-23 18:36:56 -08:00
Todd Gamblin
c83e365c59 performance: only regenerate env views once in spack install
`spack install` previously concretized, writes the entire environment
out, regenerated views, then wrote and regenerated views
again. Regenerating views is slow, so ensure that we only do that once.

- [x] add an option to env.write() to skip view regeneration

- [x] add a note on whether regenerate_views() shouldn't just be a
  separate operation -- not clear if we want to keep it as part of write
  to ensure consistency, or take it out to avoid performance issues.
2019-12-23 18:36:56 -08:00
Todd Gamblin
0fb3280011 performance: add read transactions for install_all() and install()
Environments need to read the DB a lot when installing all specs.

- [x] Put a read transaction around `install_all()` and `install()`
  to avoid repeated locking
2019-12-23 18:36:56 -08:00
Todd Gamblin
6c9467e8c6 lock transactions: avoid redundant reading in write transactions
Our `LockTransaction` class was reading overly aggressively.  In cases
like this:

```
1  with spack.store.db.read_transaction():
2    with spack.store.db.write_transaction():
3      ...
```

The `ReadTransaction` on line 1 would read in the DB, but the
WriteTransaction on line 2 would read in the DB *again*, even though we
had a read lock the whole time.  `WriteTransaction`s were only
considering nested writes to decide when to read, but they didn't know
when we already had a read lock.

- [x] `Lock.acquire_write()` return `False` in cases where we already had
       a read lock.
2019-12-23 18:36:56 -08:00
Todd Gamblin
bb517fdb84 lock transactions: ensure that nested write transactions write
If a write transaction was nested inside a read transaction, it would not
write properly on release, e.g., in a sequence like this, inside our
`LockTransaction` class:

```
1  with spack.store.db.read_transaction():
2    with spack.store.db.write_transaction():
3      ...
4  with spack.store.db.read_transaction():
   ...
```

The WriteTransaction on line 2 had no way of knowing that its
`__exit__()` call was the last *write* in the nesting, and it would skip
calling its write function.

The `__exit__()` call of the `ReadTransaction` on line 1 wouldn't know
how to write, and the file would never be written.

The DB would be correct in memory, but the `ReadTransaction` on line 4
would re-read the whole DB assuming that other processes may have
modified it.  Since the DB was never written, we got stale data.

- [x] Make `Lock.release_write()` return `True` whenever we release the
      *last write* in a nest.
2019-12-23 18:36:56 -08:00
Todd Gamblin
eb8fc4f3be lock transactions: fix non-transactional writes
Lock transactions were actually writing *after* the lock was
released. The code was looking at the result of `release_write()` before
writing, then writing based on whether the lock was released.  This is
pretty obviously wrong.

- [x] Refactor `Lock` so that a release function can be passed to the
      `Lock` and called *only* when a lock is really released.

- [x] Refactor `LockTransaction` classes to use the release function
  instead of checking the return value of `release_read()` / `release_write()`
2019-12-23 18:36:56 -08:00
Todd Gamblin
779ac9fe3e performance: avoid repeated DB locking on view generation
`ViewDescriptor.regenerate()` checks repeatedly whether packages are
installed and also does a lot of DB queries.  Put a read transaction
around the whole thing to avoid repeatedly locking and unlocking the DB.
2019-12-23 18:36:56 -08:00
Gregory Lee
99dee90372 added master branch version to mpip (#14284) 2019-12-23 17:24:19 -06:00
Christoph Junghans
643cc95055 gromacs: add v2019.5 (#14285) 2019-12-23 17:24:03 -06:00
Nicholas Sly
9573fa2299 Added conflict with %pgi in libpciaccess package.py with relevant links in comments. (#14281) 2019-12-23 15:31:59 -06:00
Piotr Luszczek
ae8a72c0da netlib-scalapack: Add int overflow patch (#14276) 2019-12-23 13:06:29 -06:00
Adam J. Stewart
e2ec1c76ce
Add py-boto3 1.10.44 (#14271) 2019-12-22 21:39:25 -06:00
Timo Heister
fa0d710626 add new package : libdap4 (#14267) 2019-12-22 21:36:47 -06:00
Adam J. Stewart
ded5cbec70
Add py-numpy 1.18.0 (#14269) 2019-12-22 21:36:28 -06:00
Adam J. Stewart
0950442ea0
Add awscli 1.16.308 (#14270) 2019-12-22 21:36:14 -06:00
Adam J. Stewart
013ff54731
Add py-botocore 1.13.44 (#14272) 2019-12-22 21:35:39 -06:00
Piotr Luszczek
2a3bf87484 Add new release and remove extraneous patches (#14273) 2019-12-22 18:10:19 -08:00
Glenn Johnson
3690bc44bd Set full xiar path when building cp2k with intel compiler (#14268) 2019-12-22 16:19:12 -06:00
justbennet
b83365c945 Updating preferred OpenMPI version to 3.1.5 (#14266) 2019-12-22 11:59:21 -08:00
Axel Huebl
249c1d9d81 openPMD-api: 0.10.3 (#14265)
Add latest release.
2019-12-22 10:01:28 -06:00
xfzhao
a10253a667 new module beagle (#14257) 2019-12-21 18:22:56 -06:00
Sajid Ali
8fe2c0a4fe Bump py-slepc4py version, update url (#14264)
* version bump

	modified:   var/spack/repos/builtin/packages/py-slepc4py/package.py

* slepc: update URL
slepc4py: add 3.11.0 and update maintainers

Co-authored-by: Satish Balay <balay@mcs.anl.gov>
2019-12-21 18:22:40 -06:00
Sajid Ali
96063f9168 use sys.executable instead of python in _source_single_file (#14252) 2019-12-21 00:02:28 -08:00
Sajid Ali
8522d1f0cf build bazel with jdk (#14258)
* build bazel with jdk

* Flake 8

* Fix typo
2019-12-20 19:40:05 -06:00
Massimiliano Culpo
80495d83ed microarchitectures: fix ppc flags for clang (#14196) 2019-12-20 14:40:54 -08:00
Adam J. Stewart
87d0ac804e
npm: add Python 3 support (#14255) 2019-12-20 16:38:35 -06:00
Massimiliano Culpo
497fddfcb9 Fetching from URLs falls back to mirrors if they exist (#13881)
Users can now list mirrors of the main url in packages.

- [x] Instead of just a single `url` attribute, users can provide a list (`urls`) in the package, and these will be tried by in order by the fetch strategy.

- [x] To handle one of the most common mirror cases, define a `GNUMirrorPackage` mixin to handle all the standard GNU mirrors.  GNU packages can set `gnu_mirror_path` to define the path within a mirror, and the mixin handles setting up all the requisite GNU mirror URLs.

- [x] update all GNU packages in `builtin` to use the `GNUMirrorPackage` mixin.
2019-12-20 14:32:18 -08:00
Nichols A. Romero
1b93320848 PGMATH library symbols patch (#14254)
* Add symbols patch

* Apply symbols patch to pgmath

* Add github issue number for symbols patch.

* Add naromero77 as a maintainer.

* Patch only applied to March 2019 release and master.
2019-12-20 16:23:38 -06:00
Adam J. Stewart
abf8e09fe5
Add py-pyinstrument package (#14241) 2019-12-20 16:17:22 -06:00
Adam J. Stewart
73dbda8c5a
node-js: add Python 3 support (#14242)
* node-js: add Python 3 support

* Update node-js, fix Python 3 support in v12
2019-12-20 16:17:04 -06:00
Hadrien G
3dd59c569e Latest versions of CMake need a hand for Python detection (#14247) 2019-12-20 14:52:53 -06:00
Hadrien G
3bb9d0feb4 root: Record that old versions of ROOT don't support modern GCC (#14250)
* Record that old versions of ROOT don't support modern GCC

* Well, actually I don't know about 6.07

* Fix typo and follow odd version recommendation from @chissg
2019-12-20 12:55:16 -06:00
Nichols A. Romero
f408535f2d QE Update Dec 2019 (#14238)
* Add QE 6.5

* Support for serial HDF5 case with serial (no mpi) QE is now supported but requires a patch for 6.4.1 and 6.5.

* Add naromero77 as a maintainer.
2019-12-20 12:53:36 -06:00
Hadrien G
97afe560d5 Do not apply the unuran patch to ROOT 6.06/xy, it is not compatible (#14245) 2019-12-20 12:53:20 -06:00
Adam J. Stewart
d01ceabca2
Add py-pyinstrument-cext package (#14240) 2019-12-20 11:59:18 -06:00
Hadrien G
71d10d76dc Adding myself as a ROOT maintainer (#14251) 2019-12-20 11:48:54 -06:00
Andras Wacha
72eef17ff9 Added hwloc dependency to gromacs (#14244) 2019-12-20 08:49:35 -07:00
Patrick Schratz
48fb5b8b17 R: added v3.6.2 (#14248) 2019-12-20 16:25:09 +01:00
Hadrien G
a5cab03d10 ACTS: added v0.13.0 and v0.12.1 (#14246) 2019-12-20 16:05:48 +01:00
Ethan Stam
e89915eacc New package: cinema_lib (#14231)
* Start cinema package

* Remove boilerplate and add description

* Formatting for pep8

* Correct milestone tag

* 'master' instead of 'develop'

Co-Authored-By: Adam J. Stewart <ajstewart426@gmail.com>

* Two variants, both with numpy and other small changes

* When +image for scikit

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2019-12-19 19:37:22 -06:00
Chris Green
dc17d548c8 Add missing __init__.py under test, and correct bad file name from #13889. (#14228) 2019-12-19 17:27:53 -06:00
Chris Green
530a67c280 root: Add chissg as maintainer. (#14235) 2019-12-19 17:27:35 -06:00
Adam J. Stewart
01edc28fde
Add py-scipy 1.4.1 (#14230) 2019-12-19 14:33:20 -06:00
Adam J. Stewart
ae52f41448
dmd: setup dependent build environment (#14198)
* dmd: setup dependent build environment

* Fix call signature of setup_dependent_build_environment
2019-12-19 12:47:04 -06:00
Hadrien G
5940ec0d74 Remove python2-ism in root package (#14223) 2019-12-19 12:45:09 -06:00
Todd Gamblin
af249d3cf6 package_sanity: add a test to enforce no nonexisting dependencies in builtin
We shouldn't allow packages to have missing dependencies in the mainline.

- [x] Add a test to enforce this.
2019-12-18 21:10:31 -08:00
Todd Gamblin
531f370e0d possible_dependencies() now reports missing dependencies
- Add an optional argument so that `possible_dependencies()` will report
  missing dependencies.
- Add a test to ensure it works.
- Ignore missing dependencies in `possible_dependencies()` by default.
2019-12-18 21:10:31 -08:00
Todd Gamblin
81b147cc0a package: add spack.package.possible_dependencies method
- this version allows getting possible dependencies of multiple packages
  or specs at once.

- New method handles calling `PackageBase.possible_dependencies` multiple
  times and passing `visited` dict around.
2019-12-18 21:10:31 -08:00