Skip to content

Commit 67c8a5b

Browse files
committed
fix: handle serialization errors
1 parent 750f8db commit 67c8a5b

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

api/app/services/jobs.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -126,12 +126,18 @@ def list_jobs(self, filters: JobListFilters | None = None) -> tuple[list[JobDeta
126126
if job is None:
127127
continue
128128

129-
if filters.function and job.func_name != filters.function:
129+
# Safely get func_name to avoid deserialization errors
130+
try:
131+
job_func_name = job.func_name
132+
except Exception:
133+
job_func_name = "unknown"
134+
135+
if filters.function and job_func_name != filters.function:
130136
continue
131137
if filters.worker and job.worker_name != filters.worker:
132138
continue
133139
if filters.search:
134-
search_text = f"{job.func_name} {job.args} {job.kwargs}".lower()
140+
search_text = f"{job_func_name} {job.args} {job.kwargs}".lower()
135141
if filters.search.lower() not in search_text:
136142
continue
137143
if filters.tags and hasattr(job, "meta"):
@@ -395,10 +401,16 @@ def _map_rq_job_to_schema(self, rq_job: Job, queue_name: str) -> JobDetails:
395401
# Calculate duration from start/end times
396402
duration_seconds = get_duration_seconds(rq_job.started_at, rq_job.ended_at)
397403

404+
# Safely get func_name without triggering deserialization errors
405+
try:
406+
func_name = rq_job.func_name or "unknown"
407+
except Exception:
408+
func_name = "unknown (deserialization error)"
409+
398410
return JobDetails(
399411
id=rq_job.id,
400412
created_at=ensure_timezone_aware(rq_job.created_at) or get_timezone_aware_now(),
401-
func_name=rq_job.func_name or "unknown",
413+
func_name=func_name,
402414
args=list(rq_job.args) if rq_job.args else [],
403415
kwargs=dict(rq_job.kwargs) if rq_job.kwargs else {},
404416
status=status,
@@ -426,10 +438,12 @@ def _map_rq_job_to_schema(self, rq_job: Job, queue_name: str) -> JobDetails:
426438

427439
except Exception as e:
428440
logger.error(f"Error mapping job {rq_job.id}: {e}")
441+
# Safely get job ID without triggering deserialization
442+
job_id = getattr(rq_job, 'id', 'unknown')
429443
return JobDetails(
430-
id=str(getattr(rq_job, 'id', 'unknown')),
444+
id=str(job_id) if job_id else 'unknown',
431445
created_at=get_timezone_aware_now(),
432-
func_name=str(getattr(rq_job, 'func_name', 'unknown')),
446+
func_name="unknown (deserialization error)",
433447
status=JobStatus.FAILED,
434448
queue=queue_name,
435449
)

0 commit comments

Comments
 (0)