From cbf8553406c9b7d7ec529751f39ebbad331cbdc7 Mon Sep 17 00:00:00 2001 From: Todd Gamblin Date: Mon, 16 Dec 2019 17:37:47 -0800 Subject: [PATCH] concretization: improve performance by avoiding database locks Checks for deprecated specs were repeatedly taking out read locks on the database, which can be very slow. - [x] put a read transaction around the deprecation check --- lib/spack/spack/spec.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/spack/spack/spec.py b/lib/spack/spack/spec.py index 050f027679..86ac62e0d7 100644 --- a/lib/spack/spack/spec.py +++ b/lib/spack/spack/spec.py @@ -2243,10 +2243,12 @@ def concretize(self, tests=False): # If any spec in the DAG is deprecated, throw an error deprecated = [] - for x in self.traverse(): - _, rec = spack.store.db.query_by_spec_hash(x.dag_hash()) - if rec and rec.deprecated_for: - deprecated.append(rec) + with spack.store.db.read_transaction(): + for x in self.traverse(): + _, rec = spack.store.db.query_by_spec_hash(x.dag_hash()) + if rec and rec.deprecated_for: + deprecated.append(rec) + if deprecated: msg = "\n The following specs have been deprecated" msg += " in favor of specs with the hashes shown:\n"