[PATCH 1 of 2 V2] peer: introduce a limitedarguments attributes

Martin von Zweigbergk martinvonz at google.com
Wed Apr 17 13:17:09 EDT 2019


On Wed, Apr 17, 2019 at 10:07 AM Pierre-Yves David <
pierre-yves.david at ens-lyon.org> wrote:

> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david at octobus.net>
> # Date 1555516590 -7200
> #      Wed Apr 17 17:56:30 2019 +0200
> # Node ID 6882a0101d389e27d697bf2e9717de176f273309
> # Parent  607a0de9bae31df526da75b68ab2853787d8c31e
> # EXP-Topic discovery-speedup
> # Available At https://bitbucket.org/octobus/mercurial-devel/
> #              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r
> 6882a0101d38
> peer: introduce a limitedarguments attributes
>
> When set to True, it signal that the peer cannot receive too larges
> arguments
> and that algorithm must adapt. This should only be True for http peer that
> does
> not support argument passed as "post".
>
> This will be useful to unlock better discovery performance in the next
> changesets.
>
> I am using a dedicated argument because this is not really a usual
> "capabilities" things. An alternative approach would be to adds a
> "large-arguments" to all peer, but the http peers. That seemed a bit too
> hacky
> to me.
>
> diff --git a/mercurial/httppeer.py b/mercurial/httppeer.py
> --- a/mercurial/httppeer.py
> +++ b/mercurial/httppeer.py
> @@ -382,6 +382,7 @@ class httppeer(wireprotov1peer.wirepeer)
>          self._path = path
>          self._url = url
>          self._caps = caps
> +        self.limitedarguments = caps is not None and 'httppostargs' not
> in caps
>

Is `'httppostargs' not in caps` enough to know that httppostargs will be
used for the "heads" request? As I said in an earlier email, I'm not sure
it will be respected for GET requests (and "heads" is a GET request,
right?). Did you check that this will not result in a GET request?


>          self._urlopener = opener
>          self._requestbuilder = requestbuilder
>
> @@ -750,6 +751,9 @@ class httpv2executor(object):
>
>  @interfaceutil.implementer(repository.ipeerv2)
>  class httpv2peer(object):
> +
> +    limitedarguments = False
> +
>      def __init__(self, ui, repourl, apipath, opener, requestbuilder,
>                   apidescriptor):
>          self.ui = ui
> diff --git a/mercurial/repository.py b/mercurial/repository.py
> --- a/mercurial/repository.py
> +++ b/mercurial/repository.py
> @@ -291,6 +291,10 @@ class ipeercommandexecutor(interfaceutil
>  class ipeerrequests(interfaceutil.Interface):
>      """Interface for executing commands on a peer."""
>
> +    limitedarguments = interfaceutil.Attribute(
> +        """True if the peer cannot receive large argument value for
> commands."""
> +    )
> +
>      def commandexecutor():
>          """A context manager that resolves to an ipeercommandexecutor.
>
> @@ -329,6 +333,8 @@ class ipeerv2(ipeerconnection, ipeercapa
>  class peer(object):
>      """Base class for peer repositories."""
>
> +    limitedarguments = False
> +
>      def capable(self, name):
>          caps = self.capabilities()
>          if name in caps:
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.mercurial-scm.org/pipermail/mercurial-devel/attachments/20190417/1327fd4f/attachment.html>


More information about the Mercurial-devel mailing list