# TMDB Retry on Timeout / 5xx **Date:** 2026-04-05 ## Problem During film import, `TMDBGateway` makes sequential HTTP calls to TMDB (one `searchMovie` + one `getMovieCredits` per new film). Under load, TMDB stops responding and Symfony's HttpClient raises an idle timeout exception, causing the film to be counted as failed. ## Goal Retry TMDB requests automatically on transient failures (idle timeout, 5xx responses) without retrying on legitimate "not found" cases (empty search results). ## Solution Use Symfony's built-in `RetryableHttpClient`, which wraps any `HttpClientInterface` and transparently retries on: - Network/transport errors (including idle timeout) - HTTP 5xx responses With exponential backoff: retry 1 → ~1s → retry 2 → ~2s → retry 3 → fail. If all retries are exhausted, the exception propagates to `ImportFilmsBatchMessageHandler` which counts the film as `failedFilms` — unchanged behavior. ## Implementation **Only `config/services.yaml` is modified.** No PHP class changes. ```yaml services: app.http_client.tmdb: class: Symfony\Component\HttpClient\RetryableHttpClient arguments: $client: '@http_client' $maxRetries: 3 App\Gateway\TMDBGateway: arguments: $client: '@app.http_client.tmdb' ``` `RetryableHttpClient` is part of `symfony/http-client` which is already a project dependency. ## Out of scope - Rate limiting (not the cause of the current issue) - Batch/concurrent TMDB requests (TMDB has no batch endpoint)