# HG changeset patch # User Pierre-Yves David # Date 2014-10-27 16:52:33 # Node ID 3ef893520a85a881680b5128a7e0c399aaf2f6bb # Parent ee45f5c2ffcc7d1a09306b334eaba4b5bfdd74e7 setdiscovery: limit the size of the initial sample (issue4411) The set discovery start by sending a "known" command with all local heads. When the number of local heads is massive (eg: using hidden changesets) such request becomes too large. This lead to 414 error over http, aborting the whole process. We limit the size of the sample used by the first query to fix this. The test are impacted because they do test massive number of heads. But they do not test it over real world http setup. diff --git a/mercurial/setdiscovery.py b/mercurial/setdiscovery.py --- a/mercurial/setdiscovery.py +++ b/mercurial/setdiscovery.py @@ -133,7 +133,7 @@ def findcommonheads(ui, local, remote, ui.debug("query 1; heads\n") roundtrips += 1 ownheads = dag.heads() - sample = ownheads + sample = _limitsample(ownheads, initialsamplesize) if remote.local(): # stopgap until we have a proper localpeer that supports batch() srvheadhashes = remote.heads() diff --git a/tests/test-setdiscovery.t b/tests/test-setdiscovery.t --- a/tests/test-setdiscovery.t +++ b/tests/test-setdiscovery.t @@ -311,16 +311,16 @@ One with >200 heads, which used to use u searching for changes taking quick initial sample searching: 2 queries - query 2; still undecided: 1080, sample size is: 260 + query 2; still undecided: 1240, sample size is: 260 sampling from both directions searching: 3 queries - query 3; still undecided: 820, sample size is: 260 + query 3; still undecided: 980, sample size is: 260 sampling from both directions searching: 4 queries - query 4; still undecided: 560, sample size is: 260 + query 4; still undecided: 720, sample size is: 260 sampling from both directions searching: 5 queries - query 5; still undecided: 300, sample size is: 200 + query 5; still undecided: 460, sample size is: 200 5 total queries common heads: 3ee37d65064a