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