setdiscovery: add a discovery.grow-sample.dynamic option
authorPierre-Yves David <pierre-yves.david@octobus.net>
Wed, 17 Mar 2021 19:06:00 +0100
changeset 46805 2b1b8f3e6510
parent 46804 f165105400d0
child 46806 9ff4672c8c26
setdiscovery: add a discovery.grow-sample.dynamic option The current discovery dynamically adapt to complex situations. This makes it quick and effective, but also harder so study the effects of other improvements in such complex situation. So we add a new option to control this too. Differential Revision: https://phab.mercurial-scm.org/D10233
mercurial/configitems.py
mercurial/debugcommands.py
mercurial/setdiscovery.py
--- a/mercurial/configitems.py	Wed Mar 17 19:10:28 2021 +0100
+++ b/mercurial/configitems.py	Wed Mar 17 19:06:00 2021 +0100
@@ -737,6 +737,14 @@
     b'discovery.grow-sample',
     default=True,
 )
+# When discovery.grow-sample.dynamic is True, the default, the sample size is
+# adapted to the shape of the undecided set (it is set to the max of:
+# <target-size>, len(roots(undecided)), len(heads(undecided)
+coreconfigitem(
+    b'devel',
+    b'discovery.grow-sample.dynamic',
+    default=True,
+)
 # discovery.grow-sample.rate control the rate at which the sample grow
 coreconfigitem(
     b'devel',
--- a/mercurial/debugcommands.py	Wed Mar 17 19:10:28 2021 +0100
+++ b/mercurial/debugcommands.py	Wed Mar 17 19:06:00 2021 +0100
@@ -1024,6 +1024,12 @@
       If False, the sample size used in set discovery will not be increased
       through the process
 
+    * devel.discovery.grow-sample.dynamic=True
+
+      When discovery.grow-sample.dynamic is True, the default, the sample size is
+      adapted to the shape of the undecided set (it is set to the max of:
+      <target-size>, len(roots(undecided)), len(heads(undecided)
+
     * devel.discovery.grow-sample.rate=1.05
 
       the rate at which the sample grow
--- a/mercurial/setdiscovery.py	Wed Mar 17 19:10:28 2021 +0100
+++ b/mercurial/setdiscovery.py	Wed Mar 17 19:06:00 2021 +0100
@@ -429,12 +429,16 @@
     # full blown discovery
 
     # if the server has a limit to its arguments size, we can't grow the sample.
-    grow_sample = local.ui.configbool(b'devel', b'discovery.grow-sample')
+    configbool = local.ui.configbool
+    grow_sample = configbool(b'devel', b'discovery.grow-sample')
     grow_sample = grow_sample and not remote.limitedarguments
 
+    dynamic_sample = configbool(b'devel', b'discovery.grow-sample.dynamic')
+    hard_limit_sample = not (dynamic_sample or remote.limitedarguments)
+
     randomize = ui.configbool(b'devel', b'discovery.randomize')
     disco = partialdiscovery(
-        local, ownheads, not grow_sample, randomize=randomize
+        local, ownheads, hard_limit_sample, randomize=randomize
     )
     if initial_head_exchange:
         # treat remote heads (and maybe own heads) as a first implicit sample