#11674·Radarr

Import list movies silently dropped when the same movie also appears on a list without Automatic Add

Author: RouzaxCreated Sep 2, 2026Updated Sep 10, 2026
LabelsType: BugStatus: Needs Triage

Is there an existing issue for this?

  • #11678

Current Behavior

When a movie appears on more than one enabled import list, and at least one of those lists has Automatic Add disabled, the movie is often not added to the library even though it is present on a list that does have Automatic Add enabled.

The outcome is non-deterministic. It depends purely on the order in which the parallel list fetch tasks complete, so the same configuration adds the movie on one sync and silently skips it on the next.

No log line is emitted for the dropped movie at any level, trace included. This is confirmed by the captured run below: 111 reports were fetched, 26 of them from the auto-enabled list, and the entire sync produced exactly one movie-level log line.

Root cause

FetchAndParseImportListService.Fetch() fetches each due list in its own task and merges results under a lock:

csharp
var alreadyMapped = result.Movies.Where(x => importListReports.Movies.Any(r => r.TmdbId == x.TmdbId));
var listMovies = MapMovieReports(importListReports.Movies.Where(x => result.Movies.All(r => r.TmdbId != x.TmdbId))).Where(x => x.TmdbId > 0).ToList();

listMovies.AddRange(alreadyMapped);
listMovies = listMovies.DistinctBy(x => x.TmdbId).ToList();
listMovies.ForEach(m => m.ListId = importList.Definition.Id);   // <-- reassigns ListId on shared instances

result.Movies.AddRange(listMovies);

alreadyMapped holds references to ImportListMovie instances that an earlier list already placed in result.Movies. The ForEach then reassigns ListId on those shared instances, so a movie present on several lists ends up owned by whichever list's task completed last.

ImportListSyncService.ProcessListItems then collapses membership to that single id:

csharp
var groupedMovies = listedMovies.GroupBy(x => x.ListId);

and ProcessMovieReport returns immediately, without logging:

csharp
if (report.TmdbId == 0 || !importList.EnableAuto)
{
    return;
}

So a movie that is on an auto-enabled list is discarded whenever a non-auto list happened to win the race. Because ImportListMovie carries a single ListId, list membership is inherently lossy for movies on multiple lists.

Expected Behavior

A movie present on any list with Automatic Add enabled should be added, regardless of whether it also appears on other lists, and regardless of fetch completion order.

The auto-add decision should consider every list the movie appeared on, rather than the single list that happened to stamp it last.

Steps To Reproduce

  1. Add two enabled import lists that share at least one movie that is not in the library:
    • List A: Automatic Add on
    • List B: Automatic Add off
  2. Ensure both lists are past their MinRefreshInterval so they are fetched in the same batch. (ImportListSync honours the interval, so the UI's manual "Import List Sync" button cannot force this; it returns in ~30ms having skipped every list.)
  3. Run Import List Sync.
  4. The shared movie is added only when list A's task merges last. When list B merges last the movie is skipped, with no entry in the log at any level.

Repeat across refresh windows to watch it alternate with no configuration change.

Environment

  • OS: Windows Server 10.0.26100.0
  • Radarr: 6.4.3.10645
  • Docker Install: No (Windows service, builtIn update mechanism)
  • Using Reverse Proxy: No
  • Browser: N/A (backend behaviour)
  • Database: SQLite 3.53.4
  • .NET: 8.0.27

What branch are you running?

Develop

Trace Logs? Not Optional

Captured run, log level trace, five enabled lists of which exactly one ("IMDb Popular Movies - min 6", id 22) has Automatic Add enabled:

2026-09-02 14:42:41.0|Trace|CommandExecutor|ImportListSyncCommand -> ImportListSyncService
2026-09-02 14:42:41.1|Debug|FetchAndParseImportListService|Available import lists 5
2026-09-02 14:42:41.1|Debug|ImportListFactory|Temporarily ignoring import list Trakt Box Office till 03/09/2026 05:01:31 due to recent failures.
2026-09-02 14:42:41.1|Info|FetchAndParseImportListService|Syncing Movies for Import List Custom Lists (All new movies 6 or higher)
2026-09-02 14:42:41.1|Info|FetchAndParseImportListService|Syncing Movies for Import List Custom Lists (IMDb Popular Movies - min 6)
2026-09-02 14:42:41.1|Info|FetchAndParseImportListService|Syncing Movies for Import List StevenLu Custom (StevenLu - IMDB - min 6.0)
2026-09-02 14:42:41.1|Info|FetchAndParseImportListService|Syncing Movies for Import List TMDb Popular (TMDb Popular)
2026-09-02 14:42:41.1|Info|FetchAndParseImportListService|Syncing Movies for Import List TMDb Popular (TMDb Theater)
2026-09-02 14:42:41.5|Debug|FetchAndParseImportListService|Found 41 from Import List StevenLu Custom (StevenLu - IMDB - min 6.0)
2026-09-02 14:42:42.1|Debug|FetchAndParseImportListService|Found 26 from Import List Custom Lists (IMDb Popular Movies - min 6)
2026-09-02 14:42:43.2|Debug|FetchAndParseImportListService|Found 39 from Import List Custom Lists (All new movies 6 or higher)
2026-09-02 14:42:49.2|Debug|FetchAndParseImportListService|Found 60 from Import List TMDb Popular (TMDb Popular)
2026-09-02 14:42:58.6|Debug|FetchAndParseImportListService|Found 20 from Import List TMDb Popular (TMDb Theater)
2026-09-02 14:42:58.6|Debug|FetchAndParseImportListService|Found 111 total reports from 5 lists
2026-09-02 14:42:58.6|Debug|ImportListSyncService|445466 [Idiots] Rejected, Movie Exists in DB
2026-09-02 14:42:58.6|Trace|CommandExecutor|ImportListSyncCommand <- ImportListSyncService [00:00:17.6166180]
2026-09-02 14:42:58.6|Trace|TaskManager|Updating last run time for: NzbDrone.Core.ImportLists.ImportListSyncCommand

Reading it:

  • The Found N from Import List ... lines are emitted inside lock (result), so their order is the merge order. The auto-enabled list merged 2nd of 5, at 14:42:42.1. Three non-auto lists merged after it, at 14:42:43.2, 14:42:49.2 and 14:42:58.6.
  • 26 reports came from the auto-enabled list. Every one of them that was also present on a later-merging list had its ListId reassigned to that non-auto list.
  • The sync produced exactly one movie-level log line, for 445466 [Idiots]. That movie reached the "Movie Exists in DB" check, which sits after the EnableAuto return, so it was the one report still owned by list 22. The other 25 hit the unlogged !importList.EnableAuto return and disappeared.
  • No Adding N movies from your auto enabled lists to library line was written, and no movie was added. Library count was 2591 before and after.

Full accounting of the 26 reports from the auto-enabled list:

Reports Fate
25 also on a later-merging non-auto list ListId reassigned, hit the unlogged !EnableAuto return, silently discarded
1 (445466 Idiots) on no other list kept ListId 22, passed EnableAuto, logged as already in DB

The one report that survived is the one no other list could claim. Idiots is the only movie on that 26-movie list that appears on no other enabled list, and it was itself added on 2026-09-01 at 03:40:11Z, which is precisely the Adding 1 movies line below.

Over three days of syncs, the only movie ever added from this list is the single movie that no other list contains. Every other candidate has been dropped on every sync where a non-auto list merged later, which is most of them.

The ImportListStatus.LastInfoSync fossil for the same run reproduces the log ordering independently:

id  auto  LastInfoSync (UTC)              delta
11   0    2026-09-02 12:42:42.1257286Z    +0.0000s   StevenLu
22   1    2026-09-02 12:42:42.1735380Z    +0.0478s   IMDb Popular Movies - min 6   <- auto
23   0    2026-09-02 12:42:43.3581413Z    +1.2324s   All new movies 6 or higher
14   0    2026-09-02 12:42:49.3493856Z    +7.2237s   TMDb Popular
18   0    2026-09-02 12:42:58.6485155Z   +16.5228s   TMDb Theater

The same list, synced alone 13 minutes later, added them immediately

The decisive control. No configuration was changed between these two runs. The only difference is how many lists were in the batch:

14:42:41  ImportListSync (all 5 lists due)      -> 26 reports from list 22, 0 added, 1 log line
14:55:40  ImportListSync definitionId=22 (alone) -> Adding 5 movies from your auto enabled lists to library

Library went 2591 -> 2596. Five movies that the multi-list run had discarded without a single log line were added seconds later by a single-list sync of that same list, including tmdbId 1368337, which the earlier run never mentioned at any log level.

That also refines the accounting above: of the 25 reports silently discarded in the race run, 21 were already in the library and would have been rejected as duplicates anyway. The remaining 5 were genuinely absent and were genuinely lost, and stayed lost until the list was synced without competitors.

For contrast, previous days, when the merge order fell the other way

2026-08-31 05:39:27.9|Info|ImportListSyncService|Adding 1 movies from your auto enabled lists to library
2026-09-01 05:40:11.4|Info|ImportListSyncService|Adding 1 movies from your auto enabled lists to library

Affected code is identical in v6.4.3.10645, current develop, and latest stable v6.3.0.10514. FetchAndParseImportListService.cs has not been substantively changed since 2023.

Observed in the wild

Same five lists, same configuration, no changes between the two days. The only variable is which parallel fetch task finished last:

2026-08-31 05:39:27.9|Info|ImportListSyncService|Adding 1 movies from your auto enabled lists to library
2026-09-01 05:40:11.4|Info|ImportListSyncService|Adding 1 movies from your auto enabled lists to library
2026-09-02 05:47:02.1|Info|FetchAndParseImportListService|Syncing Movies for Import List TMDb Popular (TMDb Popular)
2026-09-02 05:47:02.1|Info|FetchAndParseImportListService|Syncing Movies for Import List Custom Lists (IMDb Popular Movies - min 6)
2026-09-02 05:47:02.1|Info|FetchAndParseImportListService|Syncing Movies for Import List Custom Lists (All new movies 6 or higher)
   ^ no "Adding N movies" line followed, and no rejection was logged for any movie

On 2026-09-02 the movie "The Odyssey" (tmdbId 1368337) was present in the payload of the auto-enabled list and was still not added:

$ curl -s https://mdblist.com/lists/<user>/<list-slug>/json
{"id": 1368337, "title": "The Odyssey", "imdb_id": "tt33764258", "release_year": 2026, ...}

GET /api/v3/importlist/movie confirms Radarr saw it on the auto-enabled list (id 22) alongside four non-auto lists:

The Odyssey 2026 | tmdb 1368337 | lists [14, 18, 11, 23, 22]

Of the 26 movies on the auto-enabled list, 25 also appear on at least one non-auto list, so in practice almost nothing on that list is processed reliably.

The database records the merge order that caused the drop

UpdateListSyncStatus is called inside lock (result) at the end of each fetch task, so ImportListStatus.LastInfoSync is a per-list fossil of the order in which tasks merged into result.Movies. That is the same order that decides which list stamps ListId.

For the 2026-09-02 03:47Z sync that added nothing:

id  auto  enabled  LastInfoSync (UTC)
22   1     1       2026-09-02 03:47:02.4951406Z   IMDb Popular Movies - min 6   <- auto-add, merged FIRST
14   0     1       2026-09-02 03:47:06.9005944Z   TMDb Popular                  <- merged LAST

The auto-enabled list merged 4.41 seconds before the non-auto one. Per the code path above, the later merge reassigned ListId on the shared ImportListMovie instances, so every movie common to both ended up owned by a list with EnableAuto == false. No movie was added and nothing was logged.

Why it looks intermittent to users

MinRefreshInterval differs per list type (RadarrList 12h, TMDb 12h, StevenLu 24h), so which lists land in the same batch varies from sync to sync. A movie is only at risk when an overlapping non-auto list happens to be due in the same tick:

Skipping refresh of Import List Custom Lists (IMDb Popular Movies - min 6) ... Next Sync after 02/09/2026 15:47:02
Skipping refresh of Import List TMDb Popular (TMDb Popular) ... Next Sync after 02/09/2026 15:47:06
Skipping refresh of Import List TMDb Popular (TMDb Theater) ... Next Sync after 02/09/2026 15:52:36
Skipping refresh of Import List StevenLu Custom (StevenLu - IMDB - min 6.0) ... Next Sync after 02/09/2026 15:59:21
Skipping refresh of Import List Custom Lists (All new movies 6 or higher) ... Next Sync after 02/09/2026 23:45:24

Suggested fix

Either stop mutating shared instances (only stamp ListId on newly mapped movies), or stop reducing membership to one id: track the set of list ids a movie appeared on and auto-add when any of them has EnableAuto.

Trace Logs have been provided as applicable. Reports will be closed if the required logs are not provided.

  • I have read and followed the steps in the wiki link above and provided the required trace logs - the logs contain trace - that are relevant and show this issue.