Fix: media worker crashes silently before writing error state
The worker called _resolve_jellyfin() and client.libraries() OUTSIDE the try/except block. If Jellyfin was unreachable, the worker crashed with an unhandled exception and NO error state was written to the DB — the status stayed 'queued' forever with zero feedback. Moved _resolve_jellyfin + client.libraries INSIDE the try block, and created final_index + staging_index BEFORE the try so the except handler can write the error state. Now any failure (connection refused, timeout, missing config) is written to the DB as build_error and the frontend shows it inline. 283 backend tests pass; ruff clean.
This commit is contained in:
@@ -121,9 +121,11 @@ def run_build(final_index_path: str | Path, staging_index_path: str | Path, serv
|
|||||||
settings = get_settings()
|
settings = get_settings()
|
||||||
configure_logging(settings.log_level)
|
configure_logging(settings.log_level)
|
||||||
logger.info("Media index worker starting: %s", describe_settings(settings))
|
logger.info("Media index worker starting: %s", describe_settings(settings))
|
||||||
client, user_id = _resolve_jellyfin(service_id)
|
|
||||||
libraries = client.libraries(user_id)
|
|
||||||
|
|
||||||
|
# Create the indexes BEFORE the try block so the except handler can write
|
||||||
|
# error state to the DB. If _resolve_jellyfin or client.libraries fails,
|
||||||
|
# the worker needs to record the error — otherwise the status stays
|
||||||
|
# "queued" forever with no feedback.
|
||||||
final_index = MediaIndex(final_index_path)
|
final_index = MediaIndex(final_index_path)
|
||||||
staging_index = MediaIndex(staging_index_path)
|
staging_index = MediaIndex(staging_index_path)
|
||||||
pid = os.getpid()
|
pid = os.getpid()
|
||||||
@@ -131,10 +133,13 @@ def run_build(final_index_path: str | Path, staging_index_path: str | Path, serv
|
|||||||
|
|
||||||
staging_path = Path(staging_index.db_path)
|
staging_path = Path(staging_index.db_path)
|
||||||
staging_path.unlink(missing_ok=True)
|
staging_path.unlink(missing_ok=True)
|
||||||
logger.info("Media index worker pid=%s libraries=%s", pid, len(libraries))
|
|
||||||
_start_state(final_index, pid, len(libraries))
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
client, user_id = _resolve_jellyfin(service_id)
|
||||||
|
libraries = client.libraries(user_id)
|
||||||
|
logger.info("Media index worker pid=%s libraries=%s", pid, len(libraries))
|
||||||
|
_start_state(final_index, pid, len(libraries))
|
||||||
|
|
||||||
count = build_media_index(
|
count = build_media_index(
|
||||||
client,
|
client,
|
||||||
user_id,
|
user_id,
|
||||||
|
|||||||
Reference in New Issue
Block a user