From a983fc1c83402dbfe0a423bf729c72eeb795388c Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sun, 8 May 2011 21:51:47 -0700 Subject: vardbapi: disable subprocess vdb cache updates Since commit 7535cabdf2fab76fc55df83643157613dfd66be9, vardbapi.flush_cache() is often called within subprocesses spawned from MergeProcess. The _aux_cache_threshold doesn't work as designed if the cache is flushed from a subprocess like this, can lead to the vdb cache being flushed for every single merge. This is a waste of disk IO, so disable vdb cache updates in subprocesses. --- pym/portage/dbapi/_MergeProcess.py | 3 +++ pym/portage/dbapi/vartree.py | 8 +++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/pym/portage/dbapi/_MergeProcess.py b/pym/portage/dbapi/_MergeProcess.py index afb2e084d..12a0baf55 100644 --- a/pym/portage/dbapi/_MergeProcess.py +++ b/pym/portage/dbapi/_MergeProcess.py @@ -176,6 +176,9 @@ class MergeProcess(SpawnProcess): # is triggered when mylink._scheduler is None. mylink._scheduler = None + # Avoid wastful updates of the vdb cache. + self.vartree.dbapi._flush_cache_enabled = False + # In this subprocess we don't want PORTAGE_BACKGROUND to # suppress stdout/stderr output since they are pipes. We # also don't want to open PORTAGE_LOG_FILE, since it will diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index a34f1ec01..c81e99b9e 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -108,6 +108,11 @@ class vardbapi(dbapi): # have been added or removed. self._pkgs_changed = False + # The _aux_cache_threshold doesn't work as designed + # if the cache is flushed from a subprocess, so we + # use this to avoid waste vdb cache updates. + self._flush_cache_enabled = True + #cache for category directory mtimes self.mtdircache = {} @@ -467,7 +472,8 @@ class vardbapi(dbapi): superuser privileges (since that's required to obtain a lock), but all users have read access and benefit from faster metadata lookups (as long as at least part of the cache is still valid).""" - if self._aux_cache is not None and \ + if self._flush_cache_enabled and \ + self._aux_cache is not None and \ len(self._aux_cache["modified"]) >= self._aux_cache_threshold and \ secpass >= 2: self._owners.populate() # index any unindexed contents -- cgit v1.2.3-1-g7c22