fix: reset queue progress flag after queue completes
- Reset _queue_progress_initialized after each queue run so the next run re-creates the 'download_queue' progress entry - Handle 'already exists' ProgressServiceError in _init_queue_progress as a no-op success to cover concurrent-start edge cases - Guard stop_downloads() progress update to avoid crashing when the entry was never created
This commit is contained in:
@@ -121,4 +121,96 @@ For each task completed:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
~~fix: on new added animes for the nfo the property plot is not loaded and written in nfo. make sure all properties are written on nfo creation~~ ✅ DONE
|
fix: download not working:
|
||||||
|
|
||||||
|
elf.\_progress_service.update_progress(
|
||||||
|
|
||||||
|
File "/app/src/server/services/progress_service.py", line 369, in update_progress
|
||||||
|
|
||||||
|
raise ProgressServiceError(
|
||||||
|
|
||||||
|
src.server.services.progress_service.ProgressServiceError: Progress with id 'download_queue' not found
|
||||||
|
|
||||||
|
2026-03-11 15:15:42 [info ] Processing next item from queue item_id=108 remaining=2 serie=I Was Reincarnated as the 7th Prince So I Can Take My Time Perfecting My Magical Ability
|
||||||
|
|
||||||
|
2026-03-11 15:15:42 [error ] Error in queue processing loop error=Progress with id 'download_queue' not found
|
||||||
|
|
||||||
|
Traceback (most recent call last):
|
||||||
|
|
||||||
|
File "/app/src/server/services/download_service.py", line 716, in \_process_queue
|
||||||
|
|
||||||
|
await self._progress_service.update_progress(
|
||||||
|
|
||||||
|
File "/app/src/server/services/progress_service.py", line 369, in update_progress
|
||||||
|
|
||||||
|
raise ProgressServiceError(
|
||||||
|
|
||||||
|
src.server.services.progress_service.ProgressServiceError: Progress with id 'download_queue' not found
|
||||||
|
|
||||||
|
2026-03-11 15:15:43 [info ] Processing next item from queue item_id=109 remaining=1 serie=I Was Reincarnated as the 7th Prince So I Can Take My Time Perfecting My Magical Ability
|
||||||
|
|
||||||
|
2026-03-11 15:15:43 [error ] Error in queue processing loop error=Progress with id 'download_queue' not found
|
||||||
|
|
||||||
|
Traceback (most recent call last):
|
||||||
|
|
||||||
|
File "/app/src/server/services/download_service.py", line 716, in \_process_queue
|
||||||
|
|
||||||
|
await self._progress_service.update_progress(
|
||||||
|
|
||||||
|
File "/app/src/server/services/progress_service.py", line 369, in update_progress
|
||||||
|
|
||||||
|
raise ProgressServiceError(
|
||||||
|
|
||||||
|
src.server.services.progress_service.ProgressServiceError: Progress with id 'download_queue' not found
|
||||||
|
|
||||||
|
2026-03-11 15:15:44 [info ] Processing next item from queue item_id=110 remaining=0 serie=I Was Reincarnated as the 7th Prince So I Can Take My Time Perfecting My Magical Ability
|
||||||
|
|
||||||
|
2026-03-11 15:15:44 [error ] Error in queue processing loop error=Progress with id 'download_queue' not found
|
||||||
|
|
||||||
|
Traceback (most recent call last):
|
||||||
|
|
||||||
|
File "/app/src/server/services/download_service.py", line 716, in \_process_queue
|
||||||
|
|
||||||
|
await self._progress_service.update_progress(
|
||||||
|
|
||||||
|
File "/app/src/server/services/progress_service.py", line 369, in update_progress
|
||||||
|
|
||||||
|
raise ProgressServiceError(
|
||||||
|
|
||||||
|
src.server.services.progress_service.ProgressServiceError: Progress with id 'download_queue' not found
|
||||||
|
|
||||||
|
2026-03-11 15:15:45 [info ] Queue processing completed - all items processed
|
||||||
|
|
||||||
|
ERROR: Task exception was never retrieved
|
||||||
|
|
||||||
|
future: <Task finished name='Task-16373' coro=<DownloadService.\_process_queue() done, defined at /app/src/server/services/download_service.py:688> exception=ProgressServiceError("Progress with id 'download_queue' not found")>
|
||||||
|
|
||||||
|
Traceback (most recent call last):
|
||||||
|
|
||||||
|
File "/app/src/server/services/download_service.py", line 755, in \_process_queue
|
||||||
|
|
||||||
|
await self._progress_service.complete_progress(
|
||||||
|
|
||||||
|
File "/app/src/server/services/progress_service.py", line 446, in complete_progress
|
||||||
|
|
||||||
|
raise ProgressServiceError(
|
||||||
|
|
||||||
|
src.server.services.progress_service.ProgressServiceError: Progress with id 'download_queue' not found
|
||||||
|
|
||||||
|
2026-03-11 15:15:46 [info ] Queue processing completed - all items processed
|
||||||
|
|
||||||
|
ERROR: Task exception was never retrieved
|
||||||
|
|
||||||
|
future: <Task finished name='Task-16313' coro=<DownloadService.\_process_queue() done, defined at /app/src/server/services/download_service.py:688> exception=ProgressServiceError("Progress with id 'download_queue' not found")>
|
||||||
|
|
||||||
|
Traceback (most recent call last):
|
||||||
|
|
||||||
|
File "/app/src/server/services/download_service.py", line 755, in \_process_queue
|
||||||
|
|
||||||
|
await self._progress_service.complete_progress(
|
||||||
|
|
||||||
|
File "/app/src/server/services/progress_service.py", line 446, in complete_progress
|
||||||
|
|
||||||
|
raise ProgressServiceError(
|
||||||
|
|
||||||
|
src.server.services.progress_service.ProgressServiceError: Progress with id 'download_queue' not found
|
||||||
|
|||||||
@@ -395,7 +395,16 @@ class DownloadService:
|
|||||||
)
|
)
|
||||||
self._queue_progress_initialized = True
|
self._queue_progress_initialized = True
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error("Failed to initialize queue progress: %s", e)
|
# If the entry already exists (e.g. from a concurrent task),
|
||||||
|
# treat that as success — the progress is usable.
|
||||||
|
from src.server.services.progress_service import ProgressServiceError
|
||||||
|
if isinstance(e, ProgressServiceError) and "already exists" in str(e):
|
||||||
|
logger.debug(
|
||||||
|
"Queue progress already initialized by concurrent task"
|
||||||
|
)
|
||||||
|
self._queue_progress_initialized = True
|
||||||
|
else:
|
||||||
|
logger.error("Failed to initialize queue progress: %s", e)
|
||||||
|
|
||||||
def _add_to_pending_queue(
|
def _add_to_pending_queue(
|
||||||
self, item: DownloadItem, front: bool = False
|
self, item: DownloadItem, front: bool = False
|
||||||
@@ -759,8 +768,12 @@ class DownloadService:
|
|||||||
"queue_status": queue_status.model_dump(mode="json")
|
"queue_status": queue_status.model_dump(mode="json")
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
# Reset flag so next queue run re-creates the progress entry
|
||||||
|
self._queue_progress_initialized = False
|
||||||
else:
|
else:
|
||||||
logger.info("Queue processing stopped by user")
|
logger.info("Queue processing stopped by user")
|
||||||
|
# Reset flag so next queue run re-creates the progress entry
|
||||||
|
self._queue_progress_initialized = False
|
||||||
|
|
||||||
async def start_next_download(self) -> Optional[str]:
|
async def start_next_download(self) -> Optional[str]:
|
||||||
"""Legacy method - redirects to start_queue_processing.
|
"""Legacy method - redirects to start_queue_processing.
|
||||||
@@ -781,18 +794,21 @@ class DownloadService:
|
|||||||
self._is_stopped = True
|
self._is_stopped = True
|
||||||
logger.info("Download processing stopped")
|
logger.info("Download processing stopped")
|
||||||
|
|
||||||
# Notify via progress service
|
# Notify via progress service (guard against entry not existing)
|
||||||
queue_status = await self.get_queue_status()
|
try:
|
||||||
await self._progress_service.update_progress(
|
queue_status = await self.get_queue_status()
|
||||||
progress_id="download_queue",
|
await self._progress_service.update_progress(
|
||||||
message="Queue processing stopped",
|
progress_id="download_queue",
|
||||||
metadata={
|
message="Queue processing stopped",
|
||||||
"action": "queue_stopped",
|
metadata={
|
||||||
"is_stopped": True,
|
"action": "queue_stopped",
|
||||||
"queue_status": queue_status.model_dump(mode="json"),
|
"is_stopped": True,
|
||||||
},
|
"queue_status": queue_status.model_dump(mode="json"),
|
||||||
force_broadcast=True,
|
},
|
||||||
)
|
force_broadcast=True,
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning("Could not update queue progress on stop: %s", e)
|
||||||
|
|
||||||
async def get_queue_status(self) -> QueueStatus:
|
async def get_queue_status(self) -> QueueStatus:
|
||||||
"""Get current status of all queues.
|
"""Get current status of all queues.
|
||||||
|
|||||||
Reference in New Issue
Block a user