mirror of
https://github.com/Dispatcharr/Dispatcharr.git
synced 2026-07-18 00:55:50 +00:00
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. |
||
|---|---|---|
| .. | ||
| fixtures | ||
| management/commands | ||
| migrations | ||
| __init__.py | ||
| admin.py | ||
| api_urls.py | ||
| api_views.py | ||
| apps.py | ||
| command_utils.py | ||
| developer_notifications.py | ||
| models.py | ||
| redis_pubsub.py | ||
| scheduling.py | ||
| serializers.py | ||
| signals.py | ||
| tasks.py | ||
| tests.py | ||
| urls.py | ||
| utils.py | ||
| views.py | ||
| xtream_codes.py | ||