Use sets for more accurate cache modification counts in BlockerCache and
authorZac Medico <zmedico@gentoo.org>
Wed, 4 Jun 2008 20:41:35 +0000 (20:41 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 4 Jun 2008 20:41:35 +0000 (20:41 -0000)
vardbapi. (trunk r10578)

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

bin/emerge
pym/portage.py

index 12743c9d11f482de3a7ec008332f598d49698af1..199a7b618b7d9f4e58a1652951c5cc332df6c718 100755 (executable)
@@ -1605,7 +1605,7 @@ class BlockerCache(DictMixin):
                        portage.CACHE_PATH.lstrip(os.path.sep), "vdb_blockers.pickle")
                self._cache_version = "1"
                self._cache_data = None
-               self._modified = 0
+               self._modified = set()
                self._load()
 
        def _load(self):
@@ -1674,7 +1674,7 @@ class BlockerCache(DictMixin):
                        self._cache_data = {"version":self._cache_version}
                        self._cache_data["blockers"] = {}
                        self._cache_data["virtuals"] = self._virtuals
-               self._modified = 0
+               self._modified.clear()
 
        def flush(self):
                """If the current user has permission and the internal blocker cache
@@ -1692,7 +1692,7 @@ class BlockerCache(DictMixin):
                        "virtuals" : vardb.settings.getvirtuals()
                }
                """
-               if self._modified >= self._cache_threshold and \
+               if len(self._modified) >= self._cache_threshold and \
                        secpass >= 2:
                        try:
                                f = portage_util.atomic_ofstream(self._cache_filename)
@@ -1702,7 +1702,7 @@ class BlockerCache(DictMixin):
                                        self._cache_filename, gid=portage.portage_gid, mode=0644)
                        except (IOError, OSError), e:
                                pass
-                       self._modified = 0
+                       self._modified.clear()
 
        def __setitem__(self, cpv, blocker_data):
                """
@@ -1716,7 +1716,7 @@ class BlockerCache(DictMixin):
                """
                self._cache_data["blockers"][cpv] = \
                        (blocker_data.counter, tuple(str(x) for x in blocker_data.atoms))
-               self._modified += 1
+               self._modified.add(cpv)
 
        def __iter__(self):
                return iter(self._cache_data["blockers"])
index 8ccc643164eb1ce98d587219b29bfc26b990f0b7..98b71626ec7f04a6d4e8fab1a6e8b3f7279482f3 100644 (file)
@@ -7027,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"] >= self._aux_cache_threshold and \
+                       len(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():
@@ -7042,7 +7042,7 @@ class vardbapi(dbapi):
                                        self._aux_cache_filename, gid=portage_gid, mode=0644)
                        except (IOError, OSError), e:
                                pass
-                       self._aux_cache["modified"] = 0
+                       self._aux_cache["modified"] = set()
 
        def aux_get(self, mycpv, wants):
                """This automatically caches selected keys that are frequently needed
@@ -7084,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"] = 0
+                       self._aux_cache["modified"] = set()
                mydir = os.path.join(self.root, VDB_PATH, mycpv)
                mydir_stat = None
                try:
@@ -7129,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"] += 1
+                               self._aux_cache["modified"].add(mycpv)
                return [mydata[x] for x in wants]
 
        def _aux_get(self, mycpv, wants):