Patchwork D10233: setdiscovery: add a discovery.grow-sample.dynamic option

login
register
mail settings
Submitter phabricator
Date March 17, 2021, 10:17 p.m.
Message ID <differential-rev-PHID-DREV-zwth2argba3mbpled4zv-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/48549/
State Superseded
Headers show

Comments

phabricator - March 17, 2021, 10:17 p.m.
marmoute created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  The current discovery dynamically adapt to complex situations. This make is quick
  effective, but also harder so study the effect of other improvements in such
  complex situation.
  
  So we add a new option to control this too.

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D10233

AFFECTED FILES
  mercurial/configitems.py
  mercurial/debugcommands.py
  mercurial/setdiscovery.py

CHANGE DETAILS




To: marmoute, #hg-reviewers
Cc: mercurial-patches, mercurial-devel

Patch

diff --git a/mercurial/setdiscovery.py b/mercurial/setdiscovery.py
--- a/mercurial/setdiscovery.py
+++ b/mercurial/setdiscovery.py
@@ -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
diff --git a/mercurial/debugcommands.py b/mercurial/debugcommands.py
--- a/mercurial/debugcommands.py
+++ b/mercurial/debugcommands.py
@@ -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
diff --git a/mercurial/configitems.py b/mercurial/configitems.py
--- a/mercurial/configitems.py
+++ b/mercurial/configitems.py
@@ -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',