Import list movies silently dropped when the same movie also appears on a list without Automatic Add
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:
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:
var groupedMovies = listedMovies.GroupBy(x => x.ListId);and ProcessMovieReport returns immediately, without logging:
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
- 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
- Ensure both lists are past their
MinRefreshIntervalso they are fetched in the same batch. (ImportListSynchonours the interval, so the UI's manual "Import List Sync" button cannot force this; it returns in ~30ms having skipped every list.) - Run Import List Sync.
- 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.ImportListSyncCommandReading it:
- The
Found N from Import List ...lines are emitted insidelock (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
ListIdreassigned 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 theEnableAutoreturn, so it was the one report still owned by list 22. The other 25 hit the unlogged!importList.EnableAutoreturn and disappeared. - No
Adding N movies from your auto enabled lists to libraryline 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 TheaterThe 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 libraryLibrary 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 libraryAffected 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 movieOn 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 LASTThe 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:24Suggested 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.
Source: Radarr/Radarr