Mercurial > hg-stable
changeset 41969:d121823072b8
manifestcache: protect write with `wlock` instead of `lock`
The `wlock` is taken by both `update` and `commit` type operation. This would
help persisting the cache more aggressively.
An explicit test is introduced. However, we can already see the effect of this
change on earlier test output.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 15 Mar 2019 15:07:43 +0000 |
parents | 6386f9a421d2 |
children | e4ac7e63c213 |
files | mercurial/debugcommands.py mercurial/manifest.py tests/test-clone.t tests/test-hardlinks.t tests/test-manifest.t |
diffstat | 5 files changed, 25 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/debugcommands.py Thu Mar 14 09:12:55 2019 +0000 +++ b/mercurial/debugcommands.py Fri Mar 15 15:07:43 2019 +0000 @@ -1476,13 +1476,13 @@ raise error.Abort(msg) if opts.get(r'clear'): - with repo.lock(): + with repo.wlock(): cache = getcache() cache.clear(clear_persisted_data=True) return if add: - with repo.lock(): + with repo.wlock(): m = repo.manifestlog store = m.getstorage(b'') for n in add:
--- a/mercurial/manifest.py Thu Mar 14 09:12:55 2019 +0000 +++ b/mercurial/manifest.py Fri Mar 15 15:07:43 2019 +0000 @@ -1435,11 +1435,11 @@ def _setupmanifestcachehooks(self, repo): """Persist the manifestfulltextcache on lock release""" - if not util.safehasattr(repo, '_lockref'): + if not util.safehasattr(repo, '_wlockref'): return self._fulltextcache._opener = repo.cachevfs - if repo._currentlock(repo._lockref) is None: + if repo._currentlock(repo._wlockref) is None: return reporef = weakref.ref(repo)
--- a/tests/test-clone.t Thu Mar 14 09:12:55 2019 +0000 +++ b/tests/test-clone.t Fri Mar 15 15:07:43 2019 +0000 @@ -58,6 +58,7 @@ $ ls .hg/cache branch2-served + manifestfulltextcache rbc-names-v1 rbc-revs-v1
--- a/tests/test-hardlinks.t Thu Mar 14 09:12:55 2019 +0000 +++ b/tests/test-hardlinks.t Fri Mar 15 15:07:43 2019 +0000 @@ -290,7 +290,7 @@ 1 r4/.hg/branch 2 r4/.hg/cache/branch2-base 2 r4/.hg/cache/branch2-served - 2 r4/.hg/cache/manifestfulltextcache (reporevlogstore !) + 1 r4/.hg/cache/manifestfulltextcache (reporevlogstore !) 2 r4/.hg/cache/rbc-names-v1 2 r4/.hg/cache/rbc-revs-v1 1 r4/.hg/dirstate
--- a/tests/test-manifest.t Thu Mar 14 09:12:55 2019 +0000 +++ b/tests/test-manifest.t Fri Mar 15 15:07:43 2019 +0000 @@ -106,7 +106,9 @@ Showing the content of the caches after the above operations $ hg debugmanifestfulltextcache - cache empty + cache contains 1 manifest entries, in order of most to least recent: + id: 1e01206b1d2f72bd55f2a33fa8ccad74144825b7, size 133 bytes + total cache data size 157 bytes, on-disk 157 bytes (Clearing the cache in case of any content) @@ -183,3 +185,19 @@ $ hg log -r 'ancestors(., 1)' --debug | grep 'manifest:' manifest: 1:1e01206b1d2f72bd55f2a33fa8ccad74144825b7 manifest: 2:26b8653b67af8c1a0a0317c4ee8dac50a41fdb65 + +hg update should warm the cache too + +(force dirstate check to avoid flackiness in manifest order) + $ hg debugrebuilddirstate + + $ hg update 0 + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg debugmanifestfulltextcache + cache contains 3 manifest entries, in order of most to least recent: + id: fce2a30dedad1eef4da95ca1dc0004157aa527cf, size 87 bytes + id: 26b8653b67af8c1a0a0317c4ee8dac50a41fdb65, size 133 bytes + id: 1e01206b1d2f72bd55f2a33fa8ccad74144825b7, size 133 bytes + total cache data size 425 bytes, on-disk 425 bytes + $ hg log -r '0' --debug | grep 'manifest:' + manifest: 0:fce2a30dedad1eef4da95ca1dc0004157aa527cf