Can't do library scan if TMDB is unreachable #8008

Open
opened 2026-02-07 05:32:55 +03:00 by OVERLORD · 3 comments
Owner

Originally created by @Gr3q on GitHub (Jan 10, 2026).

Description of the bug

Some of the content here is outdated, see my comment

TMDB started timing started some time this week, I noticed it happening yesterday, every call to it times out after 100 seconds. I have more metadata providers enabled but they are not tried at all after the timeout (TMDB is the first in my list). Because I see no related issues I suspect it's my system specifically, in that case I need help tracking down the cause.

Things I tried/checked

Disabling TMDB for metadata works for identifying and getting metadata, disabling it for images doesn't make a difference for searching for images, it still hangs forever.

Opening the TMDB plugin configuration also doesn't work ( times out getting the config from TMDB).

I also tried using the TMDB API from my server, I can make curl requests to it.

Reproduction steps

I don't know, there were no changes to usage or configuration

What is the current bug behavior?

Image search, metadata search and identifying times out and none of the other metadata providers are tried after.

What is the expected correct behavior?

  1. TMDB search should work (I guess, unless their API is really down?)
  2. If not, other metadata providers should be tried from the list

Jellyfin Server version

10.11.5

Specify commit id

No response

Specify unstable release number

No response

Specify version number

No response

Specify the build version

10.11.5

Environment

- OS: Arch Linux
- Linux Kernel: 6.12.63-1-lts
- Virtualization: Docker
- Clients: any
- Browser: Firefox
- FFmpeg Version: Docker
- Playback Method: ---
- Hardware Acceleration: VAAPI
- CPU Model: Ryzen 5500
- GPU Model: AMD RX 580
- Plugins: Only the built-in ones
- Reverse Proxy: Nginx
- Base URL: none
- Networking: Docker Bridge
- Jellyfin Data Storage & Filesystem: local SSD ext4
- Media Storage & Filesystem: local HDD btrfs raid10
- External Integrations: Jellyseer, Radarr, Sonarr, Bazarr

Jellyfin logs

Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1  | [08:55:26] [ERR] [64] MediaBrowser.Providers.Manager.ProviderManager: Provider TheMovieDb failed to retrieve search results
Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1  | System.Threading.Tasks.TaskCanceledException: The request was canceled due to the configured HttpClient.Timeout of 100 seconds elapsing.
Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1  |  ---> System.TimeoutException: A task was canceled.
Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1  |  ---> System.Threading.Tasks.TaskCanceledException: A task was canceled.
Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1  |    at System.Threading.Tasks.TaskCompletionSourceWithCancellation`1.WaitWithCancellationAsync(CancellationToken cancellationToken)
Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1  |    at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1  |    at System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1  |    at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1  |    at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1  |    --- End of inner exception stack trace ---
Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1  |    --- End of inner exception stack trace ---
Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1  |    at System.Net.Http.HttpClient.HandleFailure(Exception e, Boolean telemetryStarted, HttpResponseMessage response, CancellationTokenSource cts, CancellationToken cancellationToken, CancellationTokenSource pendingRequestsCts)
Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1  |    at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1  |    at TMDbLib.Rest.RestRequest.SendInternal(HttpMethod method, CancellationToken cancellationToken)
Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1  |    at TMDbLib.Rest.RestRequest.Get[T](CancellationToken cancellationToken)
Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1  |    at TMDbLib.Rest.RestRequestExtensions.GetOfT[T](RestRequest request, CancellationToken cancellationToken)
Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1  |    at TMDbLib.Client.TMDbClient.GetConfigAsync()
Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1  |    at MediaBrowser.Providers.Plugins.Tmdb.TmdbClientManager.EnsureClientConfigAsync()
Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1  |    at MediaBrowser.Providers.Plugins.Tmdb.TmdbClientManager.SearchMovieAsync(String name, Int32 year, String language, String countryCode, CancellationToken cancellationToken)
Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1  |    at MediaBrowser.Providers.Plugins.Tmdb.Movies.TmdbMovieProvider.GetSearchResults(MovieInfo searchInfo, CancellationToken cancellationToken)
Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1  |    at MediaBrowser.Providers.Manager.ProviderManager.GetRemoteSearchResults[TItemType,TLookupType](RemoteSearchQuery`1 searchInfo, BaseItem referenceItem, CancellationToken cancellationToken)
Jan 10 08:55:36 gr3q-mainserver docker-compose[798551]: jellyfin-1  | [08:55:36] [ERR] [69] Jellyfin.Api.Middleware.ExceptionMiddleware: Error processing request: The request was canceled due to the configured HttpClient.Timeout of 100 seconds elapsing. URL GET /tmdb/ClientConfiguration.
Jan 10 08:55:50 gr3q-mainserver docker-compose[798551]: jellyfin-1  | [08:55:50] [ERR] [17] Jellyfin.Api.Middleware.ExceptionMiddleware: Error processing request: The request was canceled due to the configured HttpClient.Timeout of 100 seconds elapsing. URL GET /tmdb/ClientConfiguration.

FFmpeg logs


Client / Browser logs

No response

Relevant screenshots or videos

No response

Additional information

No response

Originally created by @Gr3q on GitHub (Jan 10, 2026). ### Description of the bug Some of the content here is outdated, see my [comment](https://github.com/jellyfin/jellyfin/issues/15989#issuecomment-3733241317) TMDB started timing started some time this week, I noticed it happening yesterday, every call to it times out after 100 seconds. I have more metadata providers enabled but they are not tried at all after the timeout (TMDB is the first in my list). ~~Because I see no related issues I suspect it's my system specifically, in that case I need help tracking down the cause.~~ #### Things I tried/checked Disabling TMDB for metadata works for identifying and getting metadata, disabling it for images doesn't make a difference for searching for images, it still hangs forever. Opening the TMDB plugin configuration also doesn't work ( times out getting the config from TMDB). I also tried using the TMDB API from my server, I can make curl requests to it. ### Reproduction steps I don't know, there were no changes to usage or configuration ### What is the current _bug_ behavior? Image search, metadata search and identifying times out and none of the other metadata providers are tried after. ### What is the expected _correct_ behavior? 1. TMDB search should work (I guess, unless their API is really down?) 2. If not, other metadata providers should be tried from the list ### Jellyfin Server version 10.11.5 ### Specify commit id _No response_ ### Specify unstable release number _No response_ ### Specify version number _No response_ ### Specify the build version 10.11.5 ### Environment ```markdown - OS: Arch Linux - Linux Kernel: 6.12.63-1-lts - Virtualization: Docker - Clients: any - Browser: Firefox - FFmpeg Version: Docker - Playback Method: --- - Hardware Acceleration: VAAPI - CPU Model: Ryzen 5500 - GPU Model: AMD RX 580 - Plugins: Only the built-in ones - Reverse Proxy: Nginx - Base URL: none - Networking: Docker Bridge - Jellyfin Data Storage & Filesystem: local SSD ext4 - Media Storage & Filesystem: local HDD btrfs raid10 - External Integrations: Jellyseer, Radarr, Sonarr, Bazarr ``` ### Jellyfin logs ```shell Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1 | [08:55:26] [ERR] [64] MediaBrowser.Providers.Manager.ProviderManager: Provider TheMovieDb failed to retrieve search results Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1 | System.Threading.Tasks.TaskCanceledException: The request was canceled due to the configured HttpClient.Timeout of 100 seconds elapsing. Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1 | ---> System.TimeoutException: A task was canceled. Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1 | ---> System.Threading.Tasks.TaskCanceledException: A task was canceled. Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1 | at System.Threading.Tasks.TaskCompletionSourceWithCancellation`1.WaitWithCancellationAsync(CancellationToken cancellationToken) Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1 | at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken) Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1 | at System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1 | at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1 | at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken) Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1 | --- End of inner exception stack trace --- Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1 | --- End of inner exception stack trace --- Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1 | at System.Net.Http.HttpClient.HandleFailure(Exception e, Boolean telemetryStarted, HttpResponseMessage response, CancellationTokenSource cts, CancellationToken cancellationToken, CancellationTokenSource pendingRequestsCts) Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1 | at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken) Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1 | at TMDbLib.Rest.RestRequest.SendInternal(HttpMethod method, CancellationToken cancellationToken) Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1 | at TMDbLib.Rest.RestRequest.Get[T](CancellationToken cancellationToken) Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1 | at TMDbLib.Rest.RestRequestExtensions.GetOfT[T](RestRequest request, CancellationToken cancellationToken) Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1 | at TMDbLib.Client.TMDbClient.GetConfigAsync() Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1 | at MediaBrowser.Providers.Plugins.Tmdb.TmdbClientManager.EnsureClientConfigAsync() Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1 | at MediaBrowser.Providers.Plugins.Tmdb.TmdbClientManager.SearchMovieAsync(String name, Int32 year, String language, String countryCode, CancellationToken cancellationToken) Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1 | at MediaBrowser.Providers.Plugins.Tmdb.Movies.TmdbMovieProvider.GetSearchResults(MovieInfo searchInfo, CancellationToken cancellationToken) Jan 10 08:55:26 gr3q-mainserver docker-compose[798551]: jellyfin-1 | at MediaBrowser.Providers.Manager.ProviderManager.GetRemoteSearchResults[TItemType,TLookupType](RemoteSearchQuery`1 searchInfo, BaseItem referenceItem, CancellationToken cancellationToken) Jan 10 08:55:36 gr3q-mainserver docker-compose[798551]: jellyfin-1 | [08:55:36] [ERR] [69] Jellyfin.Api.Middleware.ExceptionMiddleware: Error processing request: The request was canceled due to the configured HttpClient.Timeout of 100 seconds elapsing. URL GET /tmdb/ClientConfiguration. Jan 10 08:55:50 gr3q-mainserver docker-compose[798551]: jellyfin-1 | [08:55:50] [ERR] [17] Jellyfin.Api.Middleware.ExceptionMiddleware: Error processing request: The request was canceled due to the configured HttpClient.Timeout of 100 seconds elapsing. URL GET /tmdb/ClientConfiguration. ``` ### FFmpeg logs ```shell ``` ### Client / Browser logs _No response_ ### Relevant screenshots or videos _No response_ ### Additional information _No response_
OVERLORD added the bug label 2026-02-07 05:32:55 +03:00
Author
Owner

@Gr3q commented on GitHub (Jan 10, 2026):

Related to https://github.com/jellyfin/jellyfin/issues/15785, IPv6 routing to TMDB doesn't work (at least from my server). The problem doesn't seem to be on my end because other ipv6 domains are resolved and accessible with curl with IPv6.

gr3q@gr3q-desktop ~> curl -4 https://api.themoviedb.org
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>openresty</center>
</body>
</html>
gr3q@gr3q-desktop ~> curl -6 https://api.themoviedb.org
curl: (28) Failed to connect to api.themoviedb.org port 443 after 135371 ms: Could not connect to server

I will keep this open and rename the issue because I don't think Jellyfin should not be able to scan if TMDB doesn't work:

  • Jellyfin can't obtain metadata if one of the provider used times out even if there are multiple enabled for a library - I didn't check if it needs to be the first in the list
    • if they are queried in order then the next one is not called
    • if they are queried in parallel then the others are also discarded
  • Even though I disabled TMDB for movie search Jellyfin was still not loading any images during image search, spinning forever
  • While I have IPv6 disruptions, IPv4 routing works fine but Jellyfin (or dotnet) didn't succeed connecting to TMDB. Maybe curls approach could be adopted? - "ibcurl resolves the hostname to the set of addresses it resolves to. Typically this means asking for both IPv4 and IPv6 addresses and there may be a whole set of those returned to libcurl. That set of addresses is then tried until one works, or it returns failure.". As far as I know HTTPClient does this, maybe it doesn't work with timeouts (the server just not responding)?
  • I don't think the timeout for connecting to metadata providers should be 100 seconds. I think it would be a lot shorter, but I won't give you a concrete number because I don't know what would be optimal.

For now I had to disable IPv6 on my server completely to so new media can be identified.

@Gr3q commented on GitHub (Jan 10, 2026): Related to https://github.com/jellyfin/jellyfin/issues/15785, IPv6 routing to TMDB doesn't work (at least from my server). The problem doesn't seem to be on my end because other ipv6 domains are resolved and accessible with curl with IPv6. ``` gr3q@gr3q-desktop ~> curl -4 https://api.themoviedb.org <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>openresty</center> </body> </html> gr3q@gr3q-desktop ~> curl -6 https://api.themoviedb.org curl: (28) Failed to connect to api.themoviedb.org port 443 after 135371 ms: Could not connect to server ``` I will keep this open and rename the issue because I don't think Jellyfin should not be able to scan if TMDB doesn't work: * Jellyfin can't obtain metadata if one of the provider used times out even if there are multiple enabled for a library - I didn't check if it needs to be the first in the list * if they are queried in order then the next one is not called * if they are queried in parallel then the others are also discarded * Even though I disabled TMDB for movie search Jellyfin was still not loading any images during image search, spinning forever * While I have IPv6 disruptions, IPv4 routing works fine but Jellyfin (or dotnet) didn't succeed connecting to TMDB. Maybe `curl`s [approach](https://everything.curl.dev/transfers/conn/names.html) could be adopted? - "ibcurl resolves the hostname to the set of addresses it resolves to. Typically this means asking for both IPv4 and IPv6 addresses and there may be a whole set of those returned to libcurl. That set of addresses is then tried until one works, or it returns failure.". As far as I know HTTPClient does this, maybe it doesn't work with timeouts (the server just not responding)? * I don't think the timeout for connecting to metadata providers should be 100 seconds. I think it would be a lot shorter, but I won't give you a concrete number because I don't know what would be optimal. For now I had to disable IPv6 on my server completely to so new media can be identified.
Author
Owner

@Gr3q commented on GitHub (Jan 11, 2026):

Based on https://github.com/jellyfin/jellyfin/issues/12899 I should move this to the TMDBlib repo

@Gr3q commented on GitHub (Jan 11, 2026): Based on https://github.com/jellyfin/jellyfin/issues/12899 I should move this to the TMDBlib repo
Author
Owner

@Gr3q commented on GitHub (Jan 11, 2026):

Turns out I shouldn't move this there, reopened.

@Gr3q commented on GitHub (Jan 11, 2026): Turns out I shouldn't move this there, reopened.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/jellyfin#8008