# HG changeset patch # User Pierre-Yves David # Date 2020-02-18 14:19:11 # Node ID e7fff9c3cdaca008ae9a33a954a6f294a3df9a4b # Parent febe88a6f7f78e161b3efd4046ec2f7f861aa104 rust-nodemap: automatically use the rust index for persistent nodemap The persistent nodemap requires the rust index to be used to provides any gains. So we automatically enable it for revlog using the persistent nodemap. We keep it off for other revset because now that the rust revlog fully initialise the nodemap using it everywhere introduce a fairly significant regression (eg: hg diff moving from 0.8s to 2.3s on mozilla-try) Differential Revision: https://phab.mercurial-scm.org/D8164 diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -618,12 +618,19 @@ class revlog(object): and NodemapRevlogIO is not None ) + use_rust_index = False + if rustrevlog is not None: + if self.nodemap_file is not None: + use_rust_index = True + else: + use_rust_index = self.opener.options.get(b'rust.index') + self._io = revlogio() if self.version == REVLOGV0: self._io = revlogoldio() elif devel_nodemap: self._io = NodemapRevlogIO() - elif rustrevlog is not None and self.opener.options.get(b'rust.index'): + elif use_rust_index: self._io = rustrevlogio() try: d = self._io.parseindex(indexdata, self._inline) diff --git a/tests/test-persistent-nodemap.t b/tests/test-persistent-nodemap.t --- a/tests/test-persistent-nodemap.t +++ b/tests/test-persistent-nodemap.t @@ -2,7 +2,6 @@ Test the persistent on-disk nodemap =================================== - $ hg init test-repo $ cd test-repo $ cat << EOF >> .hg/hgrc @@ -26,6 +25,35 @@ Simple lookup works $ hg log -r "$ANYNODE" --template '{rev}\n' 5000 + +#if rust + + $ f --sha256 .hg/store/00changelog-*.nd + .hg/store/00changelog-????????????????.nd: sha256=1e38e9ffaa45cad13f15c1a9880ad606f4241e8beea2f61b4d5365abadfb55f6 (glob) + $ hg debugnodemap --dump-new | f --sha256 --size + size=122880, sha256=1e38e9ffaa45cad13f15c1a9880ad606f4241e8beea2f61b4d5365abadfb55f6 + $ hg debugnodemap --dump-disk | f --sha256 --bytes=256 --hexdump --size + size=122880, sha256=1e38e9ffaa45cad13f15c1a9880ad606f4241e8beea2f61b4d5365abadfb55f6 + 0000: 00 00 00 76 00 00 01 65 00 00 00 95 00 00 01 34 |...v...e.......4| + 0010: 00 00 00 19 00 00 01 69 00 00 00 ab 00 00 00 4b |.......i.......K| + 0020: 00 00 00 07 00 00 01 4c 00 00 00 f8 00 00 00 8f |.......L........| + 0030: 00 00 00 c0 00 00 00 a7 00 00 00 89 00 00 01 46 |...............F| + 0040: 00 00 00 92 00 00 01 bc 00 00 00 71 00 00 00 ac |...........q....| + 0050: 00 00 00 af 00 00 00 b4 00 00 00 34 00 00 01 ca |...........4....| + 0060: 00 00 00 23 00 00 01 45 00 00 00 2d 00 00 00 b2 |...#...E...-....| + 0070: 00 00 00 56 00 00 01 0f 00 00 00 4e 00 00 02 4c |...V.......N...L| + 0080: 00 00 00 e7 00 00 00 cd 00 00 01 5b 00 00 00 78 |...........[...x| + 0090: 00 00 00 e3 00 00 01 8e 00 00 00 4f 00 00 00 b1 |...........O....| + 00a0: 00 00 00 30 00 00 00 11 00 00 00 25 00 00 00 d2 |...0.......%....| + 00b0: 00 00 00 ec 00 00 00 69 00 00 01 2b 00 00 01 2e |.......i...+....| + 00c0: 00 00 00 aa 00 00 00 15 00 00 00 3a 00 00 01 4e |...........:...N| + 00d0: 00 00 00 4d 00 00 00 9d 00 00 00 8e 00 00 00 a4 |...M............| + 00e0: 00 00 00 c3 00 00 00 eb 00 00 00 29 00 00 00 ad |...........)....| + 00f0: 00 00 01 3a 00 00 01 32 00 00 00 04 00 00 00 53 |...:...2.......S| + + +#else + $ f --sha256 .hg/store/00changelog-*.nd .hg/store/00changelog-????????????????.nd: sha256=b961925120e1c9bc345c199b2cc442abc477029fdece37ef9d99cbe59c0558b7 (glob) $ hg debugnodemap --dump-new | f --sha256 --size @@ -48,6 +76,9 @@ Simple lookup works 00d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 00e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 00f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| + +#endif + $ hg debugnodemap --check revision in index: 5001 revision in nodemap: 5001 @@ -60,19 +91,20 @@ add a new commit $ hg add foo $ hg ci -m 'foo' -#if pure +#if no-pure no-rust + $ hg debugnodemap --metadata + uid: ???????????????? (glob) + tip-rev: 5001 + data-length: 122880 + data-unused: 0 +#else $ hg debugnodemap --metadata uid: ???????????????? (glob) tip-rev: 5001 data-length: 123072 data-unused: 192 -#else - $ hg debugnodemap --metadata - uid: ???????????????? (glob) - tip-rev: 5001 - data-length: 122880 - data-unused: 0 #endif + $ f --size .hg/store/00changelog.n .hg/store/00changelog.n: size=42 @@ -81,11 +113,16 @@ add a new commit #if pure $ f --sha256 .hg/store/00changelog-*.nd --size .hg/store/00changelog-????????????????.nd: size=123072, sha256=136472751566c8198ff09e306a7d2f9bd18bd32298d614752b73da4d6df23340 (glob) +#endif -#else +#if rust + $ f --sha256 .hg/store/00changelog-*.nd --size + .hg/store/00changelog-????????????????.nd: size=123072, sha256=ccc8a43310ace13812fcc648683e259346754ef934c12dd238cf9b7fadfe9a4b (glob) +#endif + +#if no-pure no-rust $ f --sha256 .hg/store/00changelog-*.nd --size .hg/store/00changelog-????????????????.nd: size=122880, sha256=bfafebd751c4f6d116a76a37a1dee2a251747affe7efbcc4f4842ccc746d4db9 (glob) - #endif $ hg debugnodemap --check @@ -115,8 +152,17 @@ Test code path without mmap data-unused: 384 $ f --sha256 .hg/store/00changelog-*.nd --size .hg/store/00changelog-????????????????.nd: size=123328, sha256=10d26e9776b6596af0f89143a54eba8cc581e929c38242a02a7b0760698c6c70 (glob) - -#else +#endif +#if rust + $ hg debugnodemap --metadata + uid: ???????????????? (glob) + tip-rev: 5002 + data-length: 123328 + data-unused: 384 + $ f --sha256 .hg/store/00changelog-*.nd --size + .hg/store/00changelog-????????????????.nd: size=123328, sha256=081eec9eb6708f2bf085d939b4c97bc0b6762bc8336bc4b93838f7fffa1516bf (glob) +#endif +#if no-pure no-rust $ hg debugnodemap --metadata uid: ???????????????? (glob) tip-rev: 5002