mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 17:27:53 +03:00
c0859c9e72
Summary: The existing upstream heurestic for determining when to accept a delta and when not to takes into account the total ondisk distance from the chain base to the current rev. In a large repo with 10+ active branches, its pretty easy to get into a situation where a few full text entries are written, and suddenly new entries are deciding they need to be full text too because they are too far from their root, which in turn causes future entries to also choose full texts, spiraling into huge revlogs. The fix is to remove the condition around total ondisk distance. The new heuristic only takes into account the delta chain size and distance, so it should make the same choice each time, regardless of the amount of branching happening or the full text choices of other branches. Test Plan: Did an hg pull in a repo that was known to be slow before. It was veyr fast. Reviewers: mpm, pyd, #sourcecontrol Differential Revision: https://phabricator.fb.com/D2693043
102 lines
2.7 KiB
Perl
102 lines
2.7 KiB
Perl
$ extpath=$(dirname $TESTDIR)
|
|
$ cp $extpath/perftweaks.py $TESTTMP # use $TESTTMP substitution in message
|
|
$ cat >> $HGRCPATH << EOF
|
|
> [extensions]
|
|
> perftweaks=$TESTTMP/perftweaks.py
|
|
> EOF
|
|
|
|
Test disabling the tag cache
|
|
$ hg init tagcache
|
|
$ cd tagcache
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [extensions]
|
|
> blackbox=
|
|
> EOF
|
|
$ touch a && hg add -q a
|
|
$ hg commit -qm "Foo"
|
|
$ hg tag foo
|
|
|
|
$ rm -rf .hg/cache .hg/blackbox.log
|
|
$ hg tags
|
|
tip 1:2cc13e58bcd8
|
|
foo 0:be5a2292aa62
|
|
$ hg blackbox | grep tag
|
|
*> tags (glob)
|
|
*> writing * bytes to cache/hgtagsfnodes1 (glob)
|
|
*> writing .hg/cache/tags2-visible with 1 tags (glob)
|
|
*> tags exited 0 after * seconds (glob)
|
|
|
|
$ rm -rf .hg/cache .hg/blackbox.log
|
|
$ hg tags --config perftweaks.disabletags=True
|
|
tip 1:2cc13e58bcd8
|
|
$ hg blackbox | grep tag
|
|
*> tags (glob)
|
|
*> tags --config perftweaks.disabletags=True exited 0 after * seconds (glob)
|
|
|
|
$ cd ..
|
|
|
|
Test disabling the case conflict check (only fails on case sensitive systems)
|
|
$ hg init casecheck
|
|
$ cd casecheck
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [perftweaks]
|
|
> disablecasecheck=True
|
|
> EOF
|
|
$ touch a
|
|
$ hg add a
|
|
$ hg commit -m a
|
|
$ touch A
|
|
$ hg add A
|
|
warning: possible case-folding collision for A
|
|
$ hg commit -m A
|
|
$ cd ..
|
|
|
|
Test disabling the branchcache
|
|
$ hg init branchcache
|
|
$ cd branchcache
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [extensions]
|
|
> blackbox=
|
|
> strip=
|
|
> EOF
|
|
$ echo a > a
|
|
$ hg commit -Aqm a
|
|
$ hg blackbox
|
|
*> commit -Aqm a (glob)
|
|
*> updated served branch cache in * seconds (glob)
|
|
*> wrote served branch cache with 1 labels and 1 nodes (glob)
|
|
*> commit -Aqm a exited 0 after * seconds (glob)
|
|
$ hg strip -q -r . -k
|
|
$ rm .hg/blackbox.log
|
|
$ rm -rf .hg/cache
|
|
$ hg commit -Aqm a --config perftweaks.disablebranchcache=True
|
|
$ hg blackbox
|
|
*> commit -Aqm a (glob)
|
|
*> perftweaks updated served branch cache (glob)
|
|
*> wrote served branch cache with 1 labels and 1 nodes (glob)
|
|
*> commit -Aqm a --config perftweaks.disablebranchcache=True exited 0 after * seconds (glob)
|
|
|
|
$ cd ..
|
|
|
|
Test changing the delta heuristic
|
|
(this isn't a good test, but it executes the code path)
|
|
$ hg init preferdeltaserver
|
|
$ cd preferdeltaserver
|
|
$ touch a && hg commit -Aqm a
|
|
$ touch b && hg commit -Aqm b
|
|
$ cd ..
|
|
$ hg init preferdelta
|
|
$ cd preferdelta
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [perftweaks]
|
|
> preferdeltas=True
|
|
> EOF
|
|
$ hg pull ../preferdeltaserver
|
|
pulling from ../preferdeltaserver
|
|
requesting all changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 2 changesets with 2 changes to 2 files
|
|
(run 'hg update' to get a working copy)
|