From patchwork Wed Apr 17 17:07:00 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [1,of,2,V2] peer: introduce a limitedarguments attributes From: Pierre-Yves David X-Patchwork-Id: 39700 Message-Id: <6882a0101d389e27d697.1555520820@nodosa.octopoid.net> To: mercurial-devel@mercurial-scm.org Cc: gregory.szorc@gmail.com Date: Wed, 17 Apr 2019 19:07:00 +0200 # HG changeset patch # User Pierre-Yves David # 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 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: