discovery: add config options to control sample size
This get useful for running analysis of the current algorithm.
Differential Revision: https://phab.mercurial-scm.org/D9813
--- a/mercurial/configitems.py Tue Jan 19 00:20:42 2021 +0100
+++ b/mercurial/configitems.py Sun Jan 17 23:21:33 2021 +0100
@@ -729,6 +729,18 @@
b'discovery.randomize',
default=True,
)
+# Control the initial size of the discovery sample
+coreconfigitem(
+ b'devel',
+ b'discovery.sample-size',
+ default=200,
+)
+# Control the initial size of the discovery for initial change
+coreconfigitem(
+ b'devel',
+ b'discovery.sample-size.initial',
+ default=100,
+)
_registerdiffopts(section=b'diff')
coreconfigitem(
b'email',
--- a/mercurial/setdiscovery.py Tue Jan 19 00:20:42 2021 +0100
+++ b/mercurial/setdiscovery.py Sun Jan 17 23:21:33 2021 +0100
@@ -286,8 +286,6 @@
ui,
local,
remote,
- initialsamplesize=100,
- fullsamplesize=200,
abortwhenunrelated=True,
ancestorsof=None,
audit=None,
@@ -315,7 +313,8 @@
ownheads = [rev for rev in cl.headrevs() if rev != nullrev]
initial_head_exchange = ui.configbool(b'devel', b'discovery.exchange-heads')
-
+ initialsamplesize = ui.configint(b'devel', b'discovery.sample-size.initial')
+ fullsamplesize = ui.configint(b'devel', b'discovery.sample-size')
# We also ask remote about all the local heads. That set can be arbitrarily
# large, so we used to limit it size to `initialsamplesize`. We no longer
# do as it proved counter productive. The skipped heads could lead to a
--- a/tests/test-setdiscovery.t Tue Jan 19 00:20:42 2021 +0100
+++ b/tests/test-setdiscovery.t Sun Jan 17 23:21:33 2021 +0100
@@ -1328,25 +1328,25 @@
updating to branch b
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
- $ hg -R a debugdiscovery b --debug --verbose --config progress.debug=true --config devel.discovery.randomize=false
+ $ hg -R a debugdiscovery b --debug --verbose --config progress.debug=true --config devel.discovery.randomize=false --config devel.discovery.sample-size.initial=50
comparing with b
query 1; heads
searching for changes
taking quick initial sample
searching: 2 queries
- query 2; still undecided: 1080, sample size is: 100
+ query 2; still undecided: 1080, sample size is: 50
sampling from both directions
searching: 3 queries
- query 3; still undecided: 980, sample size is: 200
+ query 3; still undecided: 1030, sample size is: 200
sampling from both directions
searching: 4 queries
- query 4; still undecided: 497, sample size is: 210
+ query 4; still undecided: 547, sample size is: 210
sampling from both directions
searching: 5 queries
- query 5; still undecided: 285, sample size is: 220
+ query 5; still undecided: 336, sample size is: 220
sampling from both directions
searching: 6 queries
- query 6; still undecided: 63, sample size is: 63
+ query 6; still undecided: 114, sample size is: 114
6 total queries in *.????s (glob)
elapsed time: * seconds (glob)
round-trips: 6
@@ -1412,22 +1412,30 @@
missing: 1040
common heads: 3ee37d65064a
- $ hg -R a debugdiscovery b --debug --config devel.discovery.exchange-heads=false --config devel.discovery.randomize=false --config devel.discovery.grow-sample.rate=1.01
+ $ hg -R a debugdiscovery b --debug --config devel.discovery.exchange-heads=false --config devel.discovery.randomize=false --config devel.discovery.grow-sample.rate=1.20 --config devel.discovery.sample-size=50
comparing with b
searching for changes
sampling from both directions
- query 1; still undecided: 1340, sample size is: 200
+ query 1; still undecided: 1340, sample size is: 50
+ sampling from both directions
+ query 2; still undecided: 995, sample size is: 60
sampling from both directions
- query 2; still undecided: 795, sample size is: 202
+ query 3; still undecided: 913, sample size is: 72
sampling from both directions
- query 3; still undecided: 525, sample size is: 204
+ query 4; still undecided: 816, sample size is: 204
+ sampling from both directions
+ query 5; still undecided: 612, sample size is: 153
sampling from both directions
- query 4; still undecided: 252, sample size is: 206
+ query 6; still undecided: 456, sample size is: 123
+ sampling from both directions
+ query 7; still undecided: 332, sample size is: 147
sampling from both directions
- query 5; still undecided: 44, sample size is: 44
- 5 total queries in *s (glob)
- elapsed time: * seconds (glob)
- round-trips: 5
+ query 8; still undecided: 184, sample size is: 176
+ sampling from both directions
+ query 9; still undecided: 8, sample size is: 8
+ 9 total queries in *s (glob)
+ elapsed time: * seconds (glob)
+ round-trips: 9
heads summary:
total common heads: 1
also local heads: 0