Fix a bug which prevented Conduit futures from having parallelism limited…

Authored by epriestley on Oct 12 2017, 7:07 PM.

Description

Fix a bug which prevented Conduit futures from having parallelism limited effectively

Summary:
Ref T13008. Currently, ConduitClient calls isReady() on futures before returning them.

This is very old, and wrong: it makes the future activate and start working. In the case of ConduitFutures, which wrap HTTPFutures, it causes them to make an HTTP request.

Instead, return dormant futures without calling isReady(). Then the construct used by ArcanistFileUploader and many other pieces of code will limit parallelism properly:

$iterator = id(new FutureIterator($futures))
  ->limit(4);
foreach ($iterator as $future) {
 // ...
}

Also, fix up the --trace profiler integration so we get a log when the future actually starts, not when we create it.

Test Plan: Ran arc upload --trace ... with a bunch of files, fiddling with the limit(X). Saw 4 (default) and 1 properly throttle requests. Saw 200 unthrottle requests.

Reviewers: amckinley

Reviewed By: amckinley

Maniphest Tasks: T13008

Differential Revision: https://secure.phabricator.com/D18704