Page MenuHomePhabricator

Timeout in $wgVirtualRestConfig is ignored
Closed, ResolvedPublic

Description

As mentioned in T279825#7151307, the timeout set in https://github.com/wikimedia/operations-mediawiki-config/blob/master/wmf-config/CommonSettings.php#L2557 is ignored and falls back to $wgHTTPTimeout.

The passed in timeout gets properly set as the reqTimeout,
https://github.com/wikimedia/mediawiki/blob/master/includes/libs/virtualrest/RestbaseVirtualRESTService.php#L105-L107
https://github.com/wikimedia/mediawiki/blob/master/includes/libs/virtualrest/ParsoidVirtualRESTService.php#L126-L128

However, when VirtualRESTServiceClient->runMulti calls MultiHttpClient->runMulti,
https://github.com/wikimedia/mediawiki/blob/master/includes/libs/virtualrest/VirtualRESTServiceClient.php#L254

it's only passing one argument but the reqTimeout is an option of the second parameter,

	 * @param array[] $reqs Map of HTTP request arrays
	 * @param array $opts Options
	 *   - connTimeout     : connection timeout per request (seconds)
	 *   - reqTimeout      : post-connection timeout per request (seconds)
	 *   - usePipelining   : whether to use HTTP pipelining if possible (for all hosts)
	 *   - maxConnsPerHost : maximum number of concurrent connections (per host)
	 * @return array[] $reqs With response array populated for each
	 * @throws Exception
	 */
	public function runMulti( array $reqs, array $opts = [] ) {

Keep in mind that, while this setting is necessary, there're also envoy timeouts to worry about in between the virtualrestclient and the service. See T285445