##// END OF EJS Templates
setdiscovery: stop limiting the number of local head we initially send...
marmoute -
r42335:4f9a8983 default
parent child Browse files
Show More
@@ -275,9 +275,63 b' def findcommonheads(ui, local, remote,'
275 # early exit if we know all the specified remote heads already
275 # early exit if we know all the specified remote heads already
276 ui.debug("query 1; heads\n")
276 ui.debug("query 1; heads\n")
277 roundtrips += 1
277 roundtrips += 1
278 sample = _limitsample(ownheads, initialsamplesize)
278 # We also ask remote about all the local heads. That set can be arbitrarily
279 # indices between sample and externalized version must match
279 # large, so we used to limit it size to `initialsamplesize`. We no longer
280 sample = list(sample)
280 # do as it proved counter productive. The skipped heads could lead to a
281 # large "undecided" set, slower to be clarified than if we asked the
282 # question for all heads right away.
283 #
284 # We are already fetching all server heads using the `heads` commands,
285 # sending a equivalent number of heads the other way should not have a
286 # significant impact. In addition, it is very likely that we are going to
287 # have to issue "known" request for an equivalent amount of revisions in
288 # order to decide if theses heads are common or missing.
289 #
290 # find a detailled analysis below.
291 #
292 # Case A: local and server both has few heads
293 #
294 # Ownheads is below initialsamplesize, limit would not have any effect.
295 #
296 # Case B: local has few heads and server has many
297 #
298 # Ownheads is below initialsamplesize, limit would not have any effect.
299 #
300 # Case C: local and server both has many heads
301 #
302 # We now transfert some more data, but not significantly more than is
303 # already transfered to carry the server heads.
304 #
305 # Case D: local has many heads, server has few
306 #
307 # D.1 local heads are mostly known remotely
308 #
309 # All the known head will have be part of a `known` request at some
310 # point for the discovery to finish. Sending them all earlier is
311 # actually helping.
312 #
313 # (This case is fairly unlikely, it requires the numerous heads to all
314 # be merged server side in only a few heads)
315 #
316 # D.2 local heads are mostly missing remotely
317 #
318 # To determine that the heads are missing, we'll have to issue `known`
319 # request for them or one of their ancestors. This amount of `known`
320 # request will likely be in the same order of magnitude than the amount
321 # of local heads.
322 #
323 # The only case where we can be more efficient using `known` request on
324 # ancestors are case were all the "missing" local heads are based on a
325 # few changeset, also "missing". This means we would have a "complex"
326 # graph (with many heads) attached to, but very independant to a the
327 # "simple" graph on the server. This is a fairly usual case and have
328 # not been met in the wild so far.
329 if remote.limitedarguments:
330 sample = _limitsample(ownheads, initialsamplesize)
331 # indices between sample and externalized version must match
332 sample = list(sample)
333 else:
334 sample = ownheads
281
335
282 with remote.commandexecutor() as e:
336 with remote.commandexecutor() as e:
283 fheads = e.callcommand('heads', {})
337 fheads = e.callcommand('heads', {})
@@ -926,7 +926,7 b' Both many new on top of long history:'
926 common heads: 7ead0cba2838
926 common heads: 7ead0cba2838
927
927
928
928
929 One with >200 heads, which used to use up all of the sample:
929 One with >200 heads. We now switch to send them all in the initial roundtrip, but still do sampling for the later request.
930
930
931 $ hg init manyheads
931 $ hg init manyheads
932 $ cd manyheads
932 $ cd manyheads
@@ -974,20 +974,17 b' One with >200 heads, which used to use u'
974 searching for changes
974 searching for changes
975 taking quick initial sample
975 taking quick initial sample
976 searching: 2 queries
976 searching: 2 queries
977 query 2; still undecided: 1240, sample size is: 100
977 query 2; still undecided: 1080, sample size is: 100
978 sampling from both directions
978 sampling from both directions
979 searching: 3 queries
979 searching: 3 queries
980 query 3; still undecided: 1140, sample size is: 200
980 query 3; still undecided: 980, sample size is: 200
981 sampling from both directions
981 sampling from both directions
982 searching: 4 queries
982 searching: 4 queries
983 query 4; still undecided: \d+, sample size is: 200 (re)
983 query 4; still undecided: \d+, sample size is: 200 (re)
984 sampling from both directions
984 sampling from both directions
985 searching: 5 queries
985 searching: 5 queries
986 query 5; still undecided: \d+, sample size is: 200 (re)
986 query 5; still undecided: 195, sample size is: 195
987 sampling from both directions
987 5 total queries in *.????s (glob)
988 searching: 6 queries
989 query 6; still undecided: \d+, sample size is: \d+ (re)
990 6 total queries in *.????s (glob)
991 elapsed time: * seconds (glob)
988 elapsed time: * seconds (glob)
992 heads summary:
989 heads summary:
993 total common heads: 1
990 total common heads: 1
@@ -1116,6 +1113,6 b' fixed in 86c35b7ae300:'
1116 $ hg -R r1 --config extensions.blackbox= blackbox --config blackbox.track=
1113 $ hg -R r1 --config extensions.blackbox= blackbox --config blackbox.track=
1117 * @5d0b986a083e0d91f116de4691e2aaa54d5bbec0 (*)> serve --cmdserver chgunix * (glob) (chg !)
1114 * @5d0b986a083e0d91f116de4691e2aaa54d5bbec0 (*)> serve --cmdserver chgunix * (glob) (chg !)
1118 * @5d0b986a083e0d91f116de4691e2aaa54d5bbec0 (*)> -R r1 outgoing r2 *-T{rev} * --config *extensions.blackbox=* (glob)
1115 * @5d0b986a083e0d91f116de4691e2aaa54d5bbec0 (*)> -R r1 outgoing r2 *-T{rev} * --config *extensions.blackbox=* (glob)
1119 * @5d0b986a083e0d91f116de4691e2aaa54d5bbec0 (*)> found 101 common and 1 unknown server heads, 2 roundtrips in *.????s (glob)
1116 * @5d0b986a083e0d91f116de4691e2aaa54d5bbec0 (*)> found 101 common and 1 unknown server heads, 1 roundtrips in *.????s (glob)
1120 * @5d0b986a083e0d91f116de4691e2aaa54d5bbec0 (*)> -R r1 outgoing r2 *-T{rev} * --config *extensions.blackbox=* exited 0 after *.?? seconds (glob)
1117 * @5d0b986a083e0d91f116de4691e2aaa54d5bbec0 (*)> -R r1 outgoing r2 *-T{rev} * --config *extensions.blackbox=* exited 0 after *.?? seconds (glob)
1121 $ cd ..
1118 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now