Fix vardbapi.flush_cache() so that it only updates the cache when the
authorZac Medico <zmedico@gentoo.org>
Wed, 4 Jun 2008 01:23:05 +0000 (01:23 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 4 Jun 2008 01:23:05 +0000 (01:23 -0000)
number of uncached packages reaches a certain threshold (currently 5).
The cache file can be several megabytes in size, so updating it for
every vdb change is wasteful. (trunk r10548)

svn path=/main/branches/2.1.2/; revision=10568

pym/portage.py

index 8ae940641bfb6c1d3cb2a3e2cec2b03be1db8126..c61ed00cdbe849744391a0414fb804e04291133b 100644 (file)
@@ -6727,6 +6727,10 @@ class vardbapi(dbapi):
        _excluded_dirs = re.compile(r'^(\..*|-MERGING-.*|' + \
                "|".join(_excluded_dirs) + r')$')
 
+       # Number of uncached packages to trigger cache update, since
+       # it's wasteful to update it for every vdb change.
+       _aux_cache_threshold = 5
+
        _aux_multi_line_re = re.compile(r'^(CONTENTS|NEEDED\..*)$')
 
        """
@@ -7023,7 +7027,7 @@ class vardbapi(dbapi):
                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 \
-                       self._aux_cache["modified"] and \
+                       self._aux_cache["modified"] >= self._aux_cache_threshold and \
                        secpass >= 2:
                        valid_nodes = set(self.cpv_all())
                        for cpv in self._aux_cache["packages"].keys():
@@ -7038,7 +7042,7 @@ class vardbapi(dbapi):
                                        self._aux_cache_filename, gid=portage_gid, mode=0644)
                        except (IOError, OSError), e:
                                pass
-                       self._aux_cache["modified"] = False
+                       self._aux_cache["modified"] = 0
 
        def aux_get(self, mycpv, wants):
                """This automatically caches selected keys that are frequently needed
@@ -7080,7 +7084,7 @@ class vardbapi(dbapi):
                                not self._aux_cache.get("packages"):
                                self._aux_cache = {"version": self._aux_cache_version}
                                self._aux_cache["packages"] = {}
-                       self._aux_cache["modified"] = False
+                       self._aux_cache["modified"] = 0
                mydir = os.path.join(self.root, VDB_PATH, mycpv)
                mydir_stat = None
                try:
@@ -7125,7 +7129,7 @@ class vardbapi(dbapi):
                                for aux_key in cache_these:
                                        cache_data[aux_key] = mydata[aux_key]
                                self._aux_cache["packages"][mycpv] = (mydir_mtime, cache_data)
-                               self._aux_cache["modified"] = True
+                               self._aux_cache["modified"] += 1
                return [mydata[x] for x in wants]
 
        def _aux_get(self, mycpv, wants):