From 583e9541066549b1824d9daefa46ffbd9ed79938 Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Sun, 23 Jun 2024 14:45:04 +0200 Subject: [PATCH] [backend/federation] Don't mark client error deliver jobs as successful --- .../Core/Extensions/HttpResponseExtensions.cs | 6 ++++-- Iceshrimp.Backend/Core/Queues/DeliverQueue.cs | 10 ++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/Iceshrimp.Backend/Core/Extensions/HttpResponseExtensions.cs b/Iceshrimp.Backend/Core/Extensions/HttpResponseExtensions.cs index ee9eecfa..c31a45c3 100644 --- a/Iceshrimp.Backend/Core/Extensions/HttpResponseExtensions.cs +++ b/Iceshrimp.Backend/Core/Extensions/HttpResponseExtensions.cs @@ -10,10 +10,12 @@ public static class HttpResponseExtensions public static bool IsRetryableClientError(this HttpResponseMessage res) => res.StatusCode is HttpStatusCode.TooManyRequests; - public static void EnsureSuccessStatusCode(this HttpResponseMessage res, bool excludeClientErrors) + public static void EnsureSuccessStatusCode( + this HttpResponseMessage res, bool excludeClientErrors, Func exceptionFactory + ) { if (excludeClientErrors && res.IsClientError() && !res.IsRetryableClientError()) - return; + throw exceptionFactory(); res.EnsureSuccessStatusCode(); } } \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Queues/DeliverQueue.cs b/Iceshrimp.Backend/Core/Queues/DeliverQueue.cs index 1fb6843d..d2ced386 100644 --- a/Iceshrimp.Backend/Core/Queues/DeliverQueue.cs +++ b/Iceshrimp.Backend/Core/Queues/DeliverQueue.cs @@ -1,3 +1,4 @@ +using System.Net; using Iceshrimp.Backend.Core.Database; using Iceshrimp.Backend.Core.Database.Tables; using Iceshrimp.Backend.Core.Extensions; @@ -54,9 +55,9 @@ public class DeliverQueue(int parallelism) (int)response.StatusCode, !response.IsSuccessStatusCode); }); - response.EnsureSuccessStatusCode(true); + response.EnsureSuccessStatusCode(true, () => new ClientError(response.StatusCode)); } - catch (Exception e) + catch (Exception e) when (e is not ClientError) { if (job.RetryCount++ < 10) { @@ -81,6 +82,11 @@ public class DeliverQueue(int parallelism) } } } + + public class ClientError(HttpStatusCode statusCode) : Exception + { + public HttpStatusCode StatusCode => statusCode; + } } public class DeliverJobData