From 8fb7c8a93e41b090b5130a5b89ccd263e306ccfd Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Mon, 15 Apr 2024 17:43:21 +0200 Subject: [PATCH] [backend/queue] Clear change tracker before saving the job state This prevents a queue worker stall when a job fails to execute due to a database exception (leaving unsaved changes in the DbContext change tracker, preventing the job status from being set as failed) --- Iceshrimp.Backend/Core/Services/QueueService.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Iceshrimp.Backend/Core/Services/QueueService.cs b/Iceshrimp.Backend/Core/Services/QueueService.cs index 1cff5f76..4b2eeb9c 100644 --- a/Iceshrimp.Backend/Core/Services/QueueService.cs +++ b/Iceshrimp.Backend/Core/Services/QueueService.cs @@ -460,6 +460,7 @@ public class PostgresJobQueue( logger.LogTrace("Job in queue {queue} was delayed to {time} after {duration} ms, has been queued since {time}", name, job.DelayedUntil.Value.ToLocalTime().ToStringIso8601Like(), job.Duration, job.QueuedAt.ToLocalTime().ToStringIso8601Like()); + db.ChangeTracker.Clear(); db.Update(job); await db.SaveChangesAsync(token); await RaiseJobDelayedEvent(db); @@ -484,6 +485,7 @@ public class PostgresJobQueue( } } + db.ChangeTracker.Clear(); db.Update(job); await db.SaveChangesAsync(token);