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.
This commit is contained in:
parent
91ea90c253
commit
a85b9070cb
@ -516,20 +516,23 @@ def regenerate(self, all_specs, roots):
|
||||
if spec.concrete: # Do not link unconcretized roots
|
||||
specs_for_view.append(spec.copy(deps=('link', 'run')))
|
||||
|
||||
installed_specs_for_view = set(s for s in specs_for_view
|
||||
if s in self and s.package.installed)
|
||||
# regeneration queries the database quite a bit; this read
|
||||
# transaction ensures that we don't repeatedly lock/unlock.
|
||||
with spack.store.db.read_transaction():
|
||||
installed_specs_for_view = set(
|
||||
s for s in specs_for_view if s in self and s.package.installed)
|
||||
|
||||
view = self.view()
|
||||
view = self.view()
|
||||
|
||||
view.clean()
|
||||
specs_in_view = set(view.get_all_specs())
|
||||
tty.msg("Updating view at {0}".format(self.root))
|
||||
view.clean()
|
||||
specs_in_view = set(view.get_all_specs())
|
||||
tty.msg("Updating view at {0}".format(self.root))
|
||||
|
||||
rm_specs = specs_in_view - installed_specs_for_view
|
||||
view.remove_specs(*rm_specs, with_dependents=False)
|
||||
rm_specs = specs_in_view - installed_specs_for_view
|
||||
view.remove_specs(*rm_specs, with_dependents=False)
|
||||
|
||||
add_specs = installed_specs_for_view - specs_in_view
|
||||
view.add_specs(*add_specs, with_dependencies=False)
|
||||
add_specs = installed_specs_for_view - specs_in_view
|
||||
view.add_specs(*add_specs, with_dependencies=False)
|
||||
|
||||
|
||||
class Environment(object):
|
||||
|
Loading…
Reference in New Issue
Block a user