Patchwork [3,of,3,STABLE] bookmark: also make bookmark cache depends of the changelog

login
register
mail settings
Submitter Pierre-Yves David
Date May 20, 2019, 9:05 a.m.
Message ID <112ce0f35bec4a080a55.1558343107@nodosa.octopoid.net>
Download mbox | patch
Permalink /patch/40142/
State Accepted
Headers show

Comments

Pierre-Yves David - May 20, 2019, 9:05 a.m.
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david@octobus.net>
# Date 1558339708 -7200
#      Mon May 20 10:08:28 2019 +0200
# Branch stable
# Node ID 112ce0f35bec4a080a5598135ef873a283cc253a
# Parent  9718a6d6c37cd2789361943d9b0ba5d81f97427a
# EXP-Topic book-race
# Available At https://bitbucket.org/octobus/mercurial-devel/
#              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r 112ce0f35bec
bookmark: also make bookmark cache depends of the changelog

Since the changelog is also used during the parsing of bookmark data, it should
be listed as a file cache dependency. This fix the race condition we just
introduced a test for.

This is a simple fix that might lead bookmark data to be invalidated more often
than necessary. We could have more complicated code to deal with this race in a
more "optimal" way. I feel it would be unsuitable for stable.

In addition, the performance impact of this is probably minimal and I don't
foresee the more advanced fix to actually be necessary.
Augie Fackler - May 20, 2019, 3:41 p.m.
On Mon, May 20, 2019 at 11:05:07AM +0200, Pierre-Yves David wrote:
> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david@octobus.net>
> # Date 1558339708 -7200
> #      Mon May 20 10:08:28 2019 +0200
> # Branch stable
> # Node ID 112ce0f35bec4a080a5598135ef873a283cc253a
> # Parent  9718a6d6c37cd2789361943d9b0ba5d81f97427a
> # EXP-Topic book-race
> # Available At https://bitbucket.org/octobus/mercurial-devel/
> #              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r 112ce0f35bec
> bookmark: also make bookmark cache depends of the changelog

queued, thanks

Nice detective work. Nasty bug.

Patch

diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -1219,7 +1219,8 @@  class localrepository(object):
         cls = repoview.newtype(self.unfiltered().__class__)
         return cls(self, name, visibilityexceptions)
 
-    @repofilecache('bookmarks', 'bookmarks.current')
+    @mixedrepostorecache(('bookmarks', ''), ('bookmarks.current', ''),
+                         ('00changelog.i', 'store'))
     def _bookmarks(self):
         return bookmarks.bmstore(self)
 
diff --git a/tests/test-bookmarks-corner-case.t b/tests/test-bookmarks-corner-case.t
--- a/tests/test-bookmarks-corner-case.t
+++ b/tests/test-bookmarks-corner-case.t
@@ -212,7 +212,7 @@  Check result of the push.
   |  summary:     A1
   |
   | o  changeset:   3:f26c3b5167d1
-  | |  bookmark:    book-B (false !)
+  | |  bookmark:    book-B
   | |  user:        test
   | |  date:        Thu Jan 01 00:00:00 1970 +0000
   | |  summary:     B1
@@ -235,4 +235,4 @@  Check result of the push.
   
   $ hg -R bookrace-server book
      book-A                    4:9ce3b28c16de
-     book-B                    3:f26c3b5167d1 (false !)
+     book-B                    3:f26c3b5167d1