From patchwork Wed Mar 17 22:17:20 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: D10233: setdiscovery: add a discovery.grow-sample.dynamic option From: phabricator X-Patchwork-Id: 48549 Message-Id: To: Phabricator Cc: mercurial-devel@mercurial-scm.org Date: Wed, 17 Mar 2021 22:17:20 +0000 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 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: + , 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: +# , 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',