Dispatcharr/apps
None c841cfc8fc Fix #861: Prevent M3U endless downloading caused by Redis lock expiry
Large M3U downloads that exceed the 300s Redis lock TTL caused Celery Beat
to re-queue duplicate tasks, creating overlapping downloads that never complete.

Files changed:

- core/utils.py: Add TaskLockRenewer class — a daemon thread that periodically renews Redis lock TTL (every 120s) to prevent expiry during long-running tasks.

- apps/m3u/tasks.py: Apply TaskLockRenewer to refresh_single_m3u_account and refresh_m3u_groups; add HTTP timeout (30s connect, 60s read) to M3U download (the only download path missing one); stream M3U download to disk instead of accumulating in memory; add Celery task time limits (1 hour hard limit).

- apps/epg/tasks.py: Apply TaskLockRenewer to refresh_epg_data and parse_programs_for_tvg_id; add Celery task time limits (30 min / 1 hour).

Verified with a throttled test server: locks renewed at T+120s, T+240s, T+360s; 50,000 streams processed with no duplicate tasks.
2026-02-23 00:34:28 -06:00
..
accounts initial connect feature 2026-02-08 09:29:22 -05:00
api initial connect feature 2026-02-08 09:29:22 -05:00
backups feat(scheduling): add cron builder and refactor scheduling components (Closes #165) 2026-02-12 18:08:13 -06:00
channels Bug Fix: Fix bug where attempting to schedule a one-time recording of a future program resulted in the recording starting immediately. 2026-02-18 16:25:33 -06:00
connect hardening of script handling with configurable variables - making script execution more secure 2026-02-15 07:37:00 -05:00
dashboard modified database fields for consistency, removed custom_url from streams (no longer needed) 2025-03-16 09:07:10 -04:00
epg Fix #861: Prevent M3U endless downloading caused by Redis lock expiry 2026-02-23 00:34:28 -06:00
hdhr - Swagger/OpenAPI Migration: Migrated from drf-yasg (OpenAPI 2.0) to drf-spectacular (OpenAPI 3.0) for API documentation. This provides: 2026-01-27 13:33:33 -06:00
m3u Fix #861: Prevent M3U endless downloading caused by Redis lock expiry 2026-02-23 00:34:28 -06:00
output Bug Fix: get_live_streams and get_vod_info now return the added field as a string (e.g., "1708300800") instead of an integer, fixing compatibility with XC clients that have strict JSON serializers (such as Jellyfin's Xtream Library plugin). (Closes #978) 2026-02-19 17:48:32 -06:00
plugins added event support to plugins 2026-02-11 19:50:11 -05:00
proxy Fix: VOD proxy connection counter leaks on client disconnect and seeking 2026-02-17 20:24:00 -06:00
vod Bug Fix: Changed logo comparisons to use logo_id (raw FK integer) instead of logo (related object) to avoid Django's lazy loading, which triggers a database fetch that fails if the referenced logo no longer exists. 2026-01-16 13:50:43 -06:00