From 5103611f0043be1074a2af997972b1eb828b0d51 Mon Sep 17 00:00:00 2001 From: Janujan Selvaratnam Date: Fri, 12 Jul 2024 12:55:52 -0400 Subject: [PATCH] Add 429 errors as retryable client errors --- ...OperationsClient +executeAsyncRetriableWithOutput.swift | 2 +- .../HTTPOperationsClient +executeAsyncWithOutput.swift | 2 +- .../HTTPOperationsClient +executeAsyncWithoutOutput.swift | 2 +- ...POperationsClient +executeSyncRetriableWithOutput.swift | 4 ++-- ...erationsClient +executeSyncRetriableWithoutOutput.swift | 4 ++-- ...lient+executeAsEventLoopFutureRetriableWithOutput.swift | 2 +- ...nt+executeAsEventLoopFutureRetriableWithoutOutput.swift | 2 +- ...erationsClient+executeAsEventLoopFutureWithOutput.swift | 2 +- ...tionsClient+executeAsEventLoopFutureWithoutOutput.swift | 2 +- ...erationsClient+executeAsyncRetriableWithoutOutput.swift | 2 +- .../HTTPOperationsClient+executeRetriableWithOutput.swift | 2 +- ...TTPOperationsClient+executeRetriableWithoutOutput.swift | 2 +- .../HTTPOperationsClient+executeWithOutput.swift | 2 +- .../HTTPOperationsClient+executeWithoutOutput.swift | 2 +- Sources/SmokeHTTPClient/HttpClientError.swift | 7 ++++++- 15 files changed, 22 insertions(+), 17 deletions(-) diff --git a/Sources/SmokeHTTPClient/HTTPOperationsClient +executeAsyncRetriableWithOutput.swift b/Sources/SmokeHTTPClient/HTTPOperationsClient +executeAsyncRetriableWithOutput.swift index bafb5c2..e3f88d9 100644 --- a/Sources/SmokeHTTPClient/HTTPOperationsClient +executeAsyncRetriableWithOutput.swift +++ b/Sources/SmokeHTTPClient/HTTPOperationsClient +executeAsyncRetriableWithOutput.swift @@ -158,7 +158,7 @@ public extension HTTPOperationsClient { // report failure metric switch error.category { - case .clientError: + case .clientError, .clientRetryableError: invocationContext.reporting.failure4XXCounter?.increment() case .serverError: invocationContext.reporting.failure5XXCounter?.increment() diff --git a/Sources/SmokeHTTPClient/HTTPOperationsClient +executeAsyncWithOutput.swift b/Sources/SmokeHTTPClient/HTTPOperationsClient +executeAsyncWithOutput.swift index 3e67b8e..8031e95 100644 --- a/Sources/SmokeHTTPClient/HTTPOperationsClient +executeAsyncWithOutput.swift +++ b/Sources/SmokeHTTPClient/HTTPOperationsClient +executeAsyncWithOutput.swift @@ -143,7 +143,7 @@ public extension HTTPOperationsClient { // report failure metric switch error.category { - case .clientError: + case .clientError, .clientRetryableError: invocationContext.reporting.failure4XXCounter?.increment() case .serverError: invocationContext.reporting.failure5XXCounter?.increment() diff --git a/Sources/SmokeHTTPClient/HTTPOperationsClient +executeAsyncWithoutOutput.swift b/Sources/SmokeHTTPClient/HTTPOperationsClient +executeAsyncWithoutOutput.swift index 3dea685..309ccce 100644 --- a/Sources/SmokeHTTPClient/HTTPOperationsClient +executeAsyncWithoutOutput.swift +++ b/Sources/SmokeHTTPClient/HTTPOperationsClient +executeAsyncWithoutOutput.swift @@ -138,7 +138,7 @@ public extension HTTPOperationsClient { // report failure metric switch error.category { - case .clientError: + case .clientError, .clientRetryableError: invocationContext.reporting.failure4XXCounter?.increment() case .serverError: invocationContext.reporting.failure5XXCounter?.increment() diff --git a/Sources/SmokeHTTPClient/HTTPOperationsClient +executeSyncRetriableWithOutput.swift b/Sources/SmokeHTTPClient/HTTPOperationsClient +executeSyncRetriableWithOutput.swift index a16955c..c4f38ea 100644 --- a/Sources/SmokeHTTPClient/HTTPOperationsClient +executeSyncRetriableWithOutput.swift +++ b/Sources/SmokeHTTPClient/HTTPOperationsClient +executeSyncRetriableWithOutput.swift @@ -124,7 +124,7 @@ public extension HTTPOperationsClient { } catch let error as HTTPClientError { // report failure metric switch error.category { - case .clientError: + case .clientError, .clientRetryableError: invocationContext.reporting.failure4XXCounter?.increment() case .serverError: invocationContext.reporting.failure5XXCounter?.increment() @@ -145,7 +145,7 @@ public extension HTTPOperationsClient { case .clientError: // never retry shouldRetryOnError = false - case .serverError: + case .serverError, .clientRetryableError: shouldRetryOnError = retryOnError(error) } let logger = invocationContext.reporting.logger diff --git a/Sources/SmokeHTTPClient/HTTPOperationsClient +executeSyncRetriableWithoutOutput.swift b/Sources/SmokeHTTPClient/HTTPOperationsClient +executeSyncRetriableWithoutOutput.swift index 8319181..320acb0 100644 --- a/Sources/SmokeHTTPClient/HTTPOperationsClient +executeSyncRetriableWithoutOutput.swift +++ b/Sources/SmokeHTTPClient/HTTPOperationsClient +executeSyncRetriableWithoutOutput.swift @@ -125,7 +125,7 @@ public extension HTTPOperationsClient { } catch let error as HTTPClientError { // report failure metric switch error.category { - case .clientError: + case .clientError, .clientRetryableError: invocationContext.reporting.failure4XXCounter?.increment() case .serverError: invocationContext.reporting.failure5XXCounter?.increment() @@ -146,7 +146,7 @@ public extension HTTPOperationsClient { case .clientError: // never retry shouldRetryOnError = false - case .serverError: + case .serverError, .clientRetryableError: shouldRetryOnError = retryOnError(error) } let logger = invocationContext.reporting.logger diff --git a/Sources/SmokeHTTPClient/HTTPOperationsClient+executeAsEventLoopFutureRetriableWithOutput.swift b/Sources/SmokeHTTPClient/HTTPOperationsClient+executeAsEventLoopFutureRetriableWithOutput.swift index da7ae87..e981119 100644 --- a/Sources/SmokeHTTPClient/HTTPOperationsClient+executeAsEventLoopFutureRetriableWithOutput.swift +++ b/Sources/SmokeHTTPClient/HTTPOperationsClient+executeAsEventLoopFutureRetriableWithOutput.swift @@ -165,7 +165,7 @@ public extension HTTPOperationsClient { // report failure metric switch error.category { - case .clientError: + case .clientError, .clientRetryableError: invocationContext.reporting.failure4XXCounter?.increment() case .serverError: invocationContext.reporting.failure5XXCounter?.increment() diff --git a/Sources/SmokeHTTPClient/HTTPOperationsClient+executeAsEventLoopFutureRetriableWithoutOutput.swift b/Sources/SmokeHTTPClient/HTTPOperationsClient+executeAsEventLoopFutureRetriableWithoutOutput.swift index 4808e87..14c1f2d 100644 --- a/Sources/SmokeHTTPClient/HTTPOperationsClient+executeAsEventLoopFutureRetriableWithoutOutput.swift +++ b/Sources/SmokeHTTPClient/HTTPOperationsClient+executeAsEventLoopFutureRetriableWithoutOutput.swift @@ -165,7 +165,7 @@ public extension HTTPOperationsClient { // report failure metric switch error.category { - case .clientError: + case .clientError, .clientRetryableError: invocationContext.reporting.failure4XXCounter?.increment() case .serverError: invocationContext.reporting.failure5XXCounter?.increment() diff --git a/Sources/SmokeHTTPClient/HTTPOperationsClient+executeAsEventLoopFutureWithOutput.swift b/Sources/SmokeHTTPClient/HTTPOperationsClient+executeAsEventLoopFutureWithOutput.swift index 996bab5..1f1759c 100644 --- a/Sources/SmokeHTTPClient/HTTPOperationsClient+executeAsEventLoopFutureWithOutput.swift +++ b/Sources/SmokeHTTPClient/HTTPOperationsClient+executeAsEventLoopFutureWithOutput.swift @@ -137,7 +137,7 @@ public extension HTTPOperationsClient { if let typedError = error as? HTTPClientError { // report failure metric switch typedError.category { - case .clientError: + case .clientError, .clientRetryableError: invocationContext.reporting.failure4XXCounter?.increment() case .serverError: invocationContext.reporting.failure5XXCounter?.increment() diff --git a/Sources/SmokeHTTPClient/HTTPOperationsClient+executeAsEventLoopFutureWithoutOutput.swift b/Sources/SmokeHTTPClient/HTTPOperationsClient+executeAsEventLoopFutureWithoutOutput.swift index 97e032f..f700e4c 100644 --- a/Sources/SmokeHTTPClient/HTTPOperationsClient+executeAsEventLoopFutureWithoutOutput.swift +++ b/Sources/SmokeHTTPClient/HTTPOperationsClient+executeAsEventLoopFutureWithoutOutput.swift @@ -121,7 +121,7 @@ public extension HTTPOperationsClient { if let typedError = error as? HTTPClientError { // report failure metric switch typedError.category { - case .clientError: + case .clientError, .clientRetryableError: invocationContext.reporting.failure4XXCounter?.increment() case .serverError: invocationContext.reporting.failure5XXCounter?.increment() diff --git a/Sources/SmokeHTTPClient/HTTPOperationsClient+executeAsyncRetriableWithoutOutput.swift b/Sources/SmokeHTTPClient/HTTPOperationsClient+executeAsyncRetriableWithoutOutput.swift index 9026471..c7c1922 100644 --- a/Sources/SmokeHTTPClient/HTTPOperationsClient+executeAsyncRetriableWithoutOutput.swift +++ b/Sources/SmokeHTTPClient/HTTPOperationsClient+executeAsyncRetriableWithoutOutput.swift @@ -152,7 +152,7 @@ public extension HTTPOperationsClient { // report failure metric switch innerError.category { - case .clientError: + case .clientError, .clientRetryableError: invocationContext.reporting.failure4XXCounter?.increment() case .serverError: invocationContext.reporting.failure5XXCounter?.increment() diff --git a/Sources/SmokeHTTPClient/HTTPOperationsClient+executeRetriableWithOutput.swift b/Sources/SmokeHTTPClient/HTTPOperationsClient+executeRetriableWithOutput.swift index e68bd1f..7b8752a 100644 --- a/Sources/SmokeHTTPClient/HTTPOperationsClient+executeRetriableWithOutput.swift +++ b/Sources/SmokeHTTPClient/HTTPOperationsClient+executeRetriableWithOutput.swift @@ -191,7 +191,7 @@ public extension HTTPOperationsClient { // report failure metric switch error.category { - case .clientError: + case .clientError, .clientRetryableError: invocationContext.reporting.failure4XXCounter?.increment() case .serverError: invocationContext.reporting.failure5XXCounter?.increment() diff --git a/Sources/SmokeHTTPClient/HTTPOperationsClient+executeRetriableWithoutOutput.swift b/Sources/SmokeHTTPClient/HTTPOperationsClient+executeRetriableWithoutOutput.swift index eaaee91..b871b5a 100644 --- a/Sources/SmokeHTTPClient/HTTPOperationsClient+executeRetriableWithoutOutput.swift +++ b/Sources/SmokeHTTPClient/HTTPOperationsClient+executeRetriableWithoutOutput.swift @@ -170,7 +170,7 @@ public extension HTTPOperationsClient { // report failure metric switch error.category { - case .clientError: + case .clientError, .clientRetryableError: invocationContext.reporting.failure4XXCounter?.increment() case .serverError: invocationContext.reporting.failure5XXCounter?.increment() diff --git a/Sources/SmokeHTTPClient/HTTPOperationsClient+executeWithOutput.swift b/Sources/SmokeHTTPClient/HTTPOperationsClient+executeWithOutput.swift index 6a4853e..8cb5741 100644 --- a/Sources/SmokeHTTPClient/HTTPOperationsClient+executeWithOutput.swift +++ b/Sources/SmokeHTTPClient/HTTPOperationsClient+executeWithOutput.swift @@ -124,7 +124,7 @@ public extension HTTPOperationsClient { if let typedError = error as? HTTPClientError { // report failure metric switch typedError.category { - case .clientError: + case .clientError, .clientRetryableError: invocationContext.reporting.failure4XXCounter?.increment() case .serverError: invocationContext.reporting.failure5XXCounter?.increment() diff --git a/Sources/SmokeHTTPClient/HTTPOperationsClient+executeWithoutOutput.swift b/Sources/SmokeHTTPClient/HTTPOperationsClient+executeWithoutOutput.swift index cc88cab..dadb4cd 100644 --- a/Sources/SmokeHTTPClient/HTTPOperationsClient+executeWithoutOutput.swift +++ b/Sources/SmokeHTTPClient/HTTPOperationsClient+executeWithoutOutput.swift @@ -106,7 +106,7 @@ public extension HTTPOperationsClient { if let typedError = error as? HTTPClientError { // report failure metric switch typedError.category { - case .clientError: + case .clientError, .clientRetryableError: invocationContext.reporting.failure4XXCounter?.increment() case .serverError: invocationContext.reporting.failure5XXCounter?.increment() diff --git a/Sources/SmokeHTTPClient/HttpClientError.swift b/Sources/SmokeHTTPClient/HttpClientError.swift index f519d35..4791f7a 100644 --- a/Sources/SmokeHTTPClient/HttpClientError.swift +++ b/Sources/SmokeHTTPClient/HttpClientError.swift @@ -21,6 +21,7 @@ public struct HTTPClientError: Error { public enum Category { case clientError + case clientRetryableError case serverError } @@ -32,7 +33,11 @@ public struct HTTPClientError: Error { public var category: Category { switch responseCode { case 400...499: - return .clientError + if(responseCode == 429) { + return .clientRetryableError + } else { + return .clientError + } default: return .serverError }