sapling/eden/scm/edenscm
Durham Goode 8efe07f5b1 bookmarks: don't invalidate filecache during bookmark construction
Summary:
We're seeing an issue on the hg servers where the filecache assertion
that if a value is in obj.__dict__ it's also in obj._filecache is broken. This
occurred about 10% of the time in sandcastle jobs. The diff that caused this
went in in April (D21148446 (73c5cb89de)), so it's unclear why it's only cropping up now.

This is caused by the following steps:

1. repo._bookmarks is accessed while _bookmarks is in the _filecache but not in
the __dict__
2. This causes construction of _bookmarks, before it can set it to __dict__
3. Construction of _bookmarks calls repo.invalidate(clearfilecache=True), which
deletes _bookmarks from _filecache.
4. _bookmarks construction completes, and gets set to __dict__ (but now it's
missing from _filecache, so the invariant will fail next time someone checks).
5. Someone accesses _bookmarks later, and the assertion fires.

The fix is to just not clear the filecache during bookmark construction. The
main purpose of this invalidate was to let the changelog be reloaded, and I
think that will still happen since, if there are any new commits in the
changelog, the file size and time will change, triggering a reload next time the
_filecache entry is checked.

Reviewed By: quark-zju

Differential Revision: D24182914

fbshipit-source-id: fb49137e28d9224c6617d9c84faaf2f9de363aaf
2020-10-07 23:07:36 -07:00
..
hgdemandimport demanedimportpy3: fix demandimport for ipdb 2020-06-22 08:59:14 -07:00
hgext fix a deadlock in "hg unhide" 2020-10-05 21:46:14 -07:00
mercurial bookmarks: don't invalidate filecache during bookmark construction 2020-10-07 23:07:36 -07:00
__init__.py dispatch: run command in non-main thread 2020-09-18 18:47:24 -07:00
__main__.py edenscm: add a main module 2020-01-30 18:09:14 -08:00
hooks.py py3: fix conflictinfo compatibility 2020-09-01 18:31:35 -07:00
traceimport.py debugshell: improve "%trace" UX 2020-09-01 13:49:13 -07:00