Page Summary
-
All Google Ads API services have default timeout settings that can be overridden in the PHP client library.
-
Timeouts can be set to 2 hours or more, but extremely long requests may still time out with a
DEADLINE_EXCEEDEDerror. -
You can override timeouts for server streaming calls, such as
GoogleAdsService.SearchStream, by adding an optional parameter withtimeoutMillis. -
You can override timeouts for unary calls, which most methods use, by providing
retrySettingswithtotalTimeoutMillis,initialRpcTimeoutMillis, andmaxRpcTimeoutMillis.
All Google Ads API services have default settings, including timeouts, that are used by the transport. Any service of a given Google Ads API version has a dedicated JSON file with these default settings defined at the service and method levels. For example, you can find the service resource configuration files for the latest Google Ads API version on GitHub.
The default settings are adequate for most use cases, but there may be times
when you need to override them. The client library for PHP supports overriding
per-call timeout settings (specified in milliseconds using the timeoutMillis
option) for both server streaming and unary calls.
While you can configure high timeout values (such as 2 hours or more) in the
client library, underlying network proxies or the API server may still terminate
long-running requests earlier and return a DEADLINE_EXCEEDED status error.
Override timeouts for a server streaming call
The only Google Ads API service method that uses a server streaming call is
GoogleAdsService.SearchStream. To override the default
timeout, pass timeoutMillis (in milliseconds) in the optional call options
array when calling the method:
private static function makeServerStreamingCall( GoogleAdsClient $googleAdsClient, int $customerId ) { $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient(); // Creates a query that retrieves all campaign IDs. $query = 'SELECT campaign.id FROM campaign'; $output = ''; try { // Issues a search stream request by setting a custom client timeout. /** * @var GoogleAdsServerStreamDecorator $stream */ $stream = $googleAdsServiceClient->searchStream( SearchGoogleAdsStreamRequest::build($customerId, $query), [ // Any server streaming call has a default timeout setting. For this // particular call, the default setting can be found in the following file: // https://github.com/googleads/google-ads-php/blob/master/src/Google/Ads/GoogleAds/V25/Services/resources/google_ads_service_client_config.json. // // When making a server streaming call, an optional argument is provided and can // be used to override the default timeout setting with a given value. 'timeoutMillis' => self::CLIENT_TIMEOUT_MILLIS ] ); // Iterates over all rows in all messages and collects the campaign IDs. foreach ($stream->iterateAllElements() as $googleAdsRow) { /** * @var GoogleAdsRow $googleAdsRow */ $output .= ' ' . $googleAdsRow->getCampaign()->getId(); } print 'The server streaming call completed before the timeout.' . PHP_EOL; } catch (ApiException $exception) { if ($exception->getStatus() === ApiStatus::DEADLINE_EXCEEDED) { print 'The server streaming call did not complete before the timeout.' . PHP_EOL; } else { // Bubbles up if the exception is not about timeout. throw $exception; } } finally { print 'All campaign IDs retrieved:' . ($output ?: ' None') . PHP_EOL; } }
Override timeouts for a unary call
Most Google Ads API service methods use unary calls; typical examples are
GoogleAdsService.Search and
GoogleAdsService.Mutate. To override the default timeout, pass
timeoutMillis (in milliseconds) in the optional call options array when
calling the method:
private static function makeUnaryCall(GoogleAdsClient $googleAdsClient, int $customerId) { $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient(); // Creates a query that retrieves all campaign IDs. $query = 'SELECT campaign.id FROM campaign'; $output = ''; try { // Issues a search request by setting a custom client timeout. $response = $googleAdsServiceClient->search( SearchGoogleAdsRequest::build($customerId, $query), [ // Any unary call is retryable and has default retry settings. // Complete information about these settings can be found here: // https://googleapis.github.io/gax-php/master/Google/ApiCore/RetrySettings.html. // For this particular call, the default retry settings can be found in the // following file: // https://github.com/googleads/google-ads-php/blob/master/src/Google/Ads/GoogleAds/V25/Services/resources/google_ads_service_client_config.json. // // When making an unary call, an optional argument is provided and can be // used to override the default retry settings with given values. 'retrySettings' => [ // Sets the maximum accumulative timeout of the call, it includes all tries. 'totalTimeoutMillis' => self::CLIENT_TIMEOUT_MILLIS, // Sets the timeout that is used for the first try to one tenth of the // maximum accumulative timeout of the call. // Note: This overrides the default value and can lead to // RequestError.RPC_DEADLINE_TOO_SHORT errors when too small. We recommend // to do it only if necessary. 'initialRpcTimeoutMillis' => self::CLIENT_TIMEOUT_MILLIS / 10, // Sets the maximum timeout that can be used for any given try to one fifth // of the maximum accumulative timeout of the call (two times greater than // the timeout that is used for the first try). 'maxRpcTimeoutMillis' => self::CLIENT_TIMEOUT_MILLIS / 5 ] ] ); // Iterates over all rows in all messages and collects the campaign IDs. foreach ($response->iterateAllElements() as $googleAdsRow) { /** * @var GoogleAdsRow $googleAdsRow */ $output .= ' ' . $googleAdsRow->getCampaign()->getId(); } print 'The unary call completed before the timeout.' . PHP_EOL; } catch (ApiException $exception) { if ($exception->getStatus() === ApiStatus::DEADLINE_EXCEEDED) { print 'The unary call did not complete before the timeout.' . PHP_EOL; } else { // Bubbles up if the exception is not about timeout. throw $exception; } } finally { print 'All campaign IDs retrieved:' . ($output ?: ' None') . PHP_EOL; } }