Patchwork [6,of,7] caches: invalidate store caches when lock is taken

login
register
mail settings
Submitter Durham Goode
Date March 25, 2014, 2:33 a.m.
Message ID <cd50cd7c59b02cf90a7a.1395714835@dev2000.prn2.facebook.com>
Download mbox | patch
Permalink /patch/4049/
State Superseded
Commit 2efdd186925d64b2c869c07ea27804a1c549ae20
Headers show

Comments

Durham Goode - March 25, 2014, 2:33 a.m.
# HG changeset patch
# User Durham Goode <durham@fb.com>
# Date 1395700507 25200
#      Mon Mar 24 15:35:07 2014 -0700
# Node ID cd50cd7c59b02cf90a7a2abc94a6d546d4012f34
# Parent  cd398ee87172fceccea80e802e67c3c395ffe7af
caches: invalidate store caches when lock is taken

The fncache was not being properly invalidated each time the lock was taken, so
in theory it could contain old data from prior to the caller having the lock.
This changes it to be invalidated as soon as the lock is taken (same as all our
other caches).

Patch

diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -996,6 +996,7 @@ 
             except AttributeError:
                 pass
         self.invalidatecaches()
+        self.store.invalidatecaches()
 
     def invalidateall(self):
         '''Fully invalidates both store and non-store parts, causing the
diff --git a/mercurial/store.py b/mercurial/store.py
--- a/mercurial/store.py
+++ b/mercurial/store.py
@@ -340,6 +340,9 @@ 
     def write(self, tr):
         pass
 
+    def invalidatecaches(self):
+        pass
+
     def __contains__(self, path):
         '''Checks if the store contains path'''
         path = "/".join(("data", path))
@@ -489,6 +492,9 @@ 
     def write(self, tr):
         self.fncache.write(tr)
 
+    def invalidatecaches(self):
+        self.fncache.entries = None
+
     def _exists(self, f):
         ef = self.encode(f)
         try: