Dispatcharr/core
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
..
fixtures feat: add system notifications and update checks 2026-02-03 09:24:02 -06:00
management/commands Refactor CoreSettings to use JSONField for value storage and update related logic for proper type handling. Adjusted serializers and forms to accommodate new data structure, ensuring seamless integration across the application. 2026-01-13 12:18:34 -06:00
migrations feat: add system notifications and update checks 2026-02-03 09:24:02 -06:00
__init__.py Alpha v3 2025-02-21 15:31:59 -06:00
admin.py modified database fields for consistency, removed custom_url from streams (no longer needed) 2025-03-16 09:07:10 -04:00
api_urls.py feat: add system notifications and update checks 2026-02-03 09:24:02 -06:00
api_views.py feat: add system notifications and update checks 2026-02-03 09:24:02 -06:00
apps.py Enhancement: Refactored app initialization to prevent redundant execution across multiple worker processes. Created dispatcharr.app_initialization utility module with should_skip_initialization() function that prevents custom initialization tasks (backup scheduler sync, developer notifications sync) from running during management commands, in worker processes, or in development servers. This significantly reduces startup overhead in multi-worker deployments (e.g., uWSGI with 10 workers now syncs the scheduler once instead of 10 times). Applied to both CoreConfig and BackupsConfig apps. 2026-02-05 13:48:01 -06:00
command_utils.py Bypass redis for management commands. 2025-03-22 12:23:54 -05:00
developer_notifications.py feat: add system notifications and update checks 2026-02-03 09:24:02 -06:00
models.py Merge pull request #894 from CodeBormen/Feature/771-Auto-Matching-Improvments 2026-02-03 10:20:45 -06:00
redis_pubsub.py Bypass redis for management commands. 2025-03-22 12:23:54 -05:00
scheduling.py feat(scheduling): add cron builder and refactor scheduling components (Closes #165) 2026-02-12 18:08:13 -06:00
serializers.py feat: add system notifications and update checks 2026-02-03 09:24:02 -06:00
signals.py feat: add system notifications and update checks 2026-02-03 09:24:02 -06:00
tasks.py feat: add system notifications and update checks 2026-02-03 09:24:02 -06:00
tests.py Alpha v3 2025-02-21 15:31:59 -06:00
urls.py Pre-Alpha v4 2025-02-24 15:04:03 -06:00
utils.py Fix #861: Prevent M3U endless downloading caused by Redis lock expiry 2026-02-23 00:34:28 -06:00
views.py feat: Add Redis authentication support for modular deployment 2026-02-03 21:42:06 -06:00
xtream_codes.py Convert refresh time to local time. 2025-09-09 16:43:57 -05:00