aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2011-05-08 21:51:47 -0700
committerZac Medico <zmedico@gentoo.org>2011-05-08 21:51:47 -0700
commita983fc1c83402dbfe0a423bf729c72eeb795388c (patch)
treef138333714f85912b11c4b16b254a962e24089db /pym/portage
parentLinkageMapELF: remove unused imports (diff)
downloadportage-a983fc1c83402dbfe0a423bf729c72eeb795388c.tar.gz
portage-a983fc1c83402dbfe0a423bf729c72eeb795388c.tar.bz2
portage-a983fc1c83402dbfe0a423bf729c72eeb795388c.zip
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.
Diffstat (limited to 'pym/portage')
-rw-r--r--pym/portage/dbapi/_MergeProcess.py3
-rw-r--r--pym/portage/dbapi/vartree.py8
2 files changed, 10 insertions, 1 deletions
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