From 0a311d18f7c975c9499dee51c0b4859f38651962 Mon Sep 17 00:00:00 2001 From: Ruben Bartelink Date: Thu, 3 Aug 2023 11:35:50 +0100 Subject: [PATCH] Tidy exns --- .../CosmosStorePruner.fs | 6 ++-- src/Propulsion.CosmosStore/CosmosStoreSink.fs | 35 ++++++++++--------- .../Handler.fs | 2 +- src/Propulsion.EventStore/EventStoreSink.fs | 2 +- 4 files changed, 23 insertions(+), 22 deletions(-) diff --git a/src/Propulsion.CosmosStore/CosmosStorePruner.fs b/src/Propulsion.CosmosStore/CosmosStorePruner.fs index 2e5e62ec..881ff333 100644 --- a/src/Propulsion.CosmosStore/CosmosStorePruner.fs +++ b/src/Propulsion.CosmosStore/CosmosStorePruner.fs @@ -54,9 +54,9 @@ type CosmosStorePrunerStats(log, statsInterval, stateInterval) = override x.Classify e = match e with - | Equinox_CosmosStore_Exceptions.RateLimited -> OutcomeKind.RateLimited - | Equinox_CosmosStore_Exceptions.RequestTimeout -> OutcomeKind.Timeout - | e -> base.Classify e + | Equinox.CosmosStore.Exceptions.RateLimited -> OutcomeKind.RateLimited + | Equinox.CosmosStore.Exceptions.RequestTimeout -> OutcomeKind.Timeout + | e -> base.Classify e override _.HandleExn(log, exn) = log.Warning(exn, "Unhandled") /// DANGER: CosmosPruner DELETES events - use with care diff --git a/src/Propulsion.CosmosStore/CosmosStoreSink.fs b/src/Propulsion.CosmosStore/CosmosStoreSink.fs index 0f7740ff..441be7bf 100644 --- a/src/Propulsion.CosmosStore/CosmosStoreSink.fs +++ b/src/Propulsion.CosmosStore/CosmosStoreSink.fs @@ -17,6 +17,17 @@ module private Impl = let private toNativeEventBody (xs : Propulsion.Sinks.EventBody) : byte[] = xs.ToArray() let defaultToNative_ = FsCodec.Core.TimelineEvent.Map toNativeEventBody + module internal Equinox = + module CosmosStore = + module Exceptions = + open Microsoft.Azure.Cosmos + let [] (|CosmosStatus|_|) (x: exn) = match x with :? CosmosException as ce -> ValueSome ce.StatusCode | _ -> ValueNone + let (|RateLimited|RequestTimeout|CosmosStatusCode|Other|) = function + | CosmosStatus System.Net.HttpStatusCode.TooManyRequests -> RateLimited + | CosmosStatus System.Net.HttpStatusCode.RequestTimeout -> RequestTimeout + | CosmosStatus s -> CosmosStatusCode s + | _ -> Other + #else module StreamSpan = @@ -28,16 +39,6 @@ module private Impl = let defaultToNative_ = FsCodec.Core.TimelineEvent.Map toNativeEventBody #endif -module Equinox_CosmosStore_Exceptions = - open Microsoft.Azure.Cosmos - let [] (|CosmosStatus|_|) (x: exn) = match x with :? CosmosException as ce -> ValueSome ce.StatusCode | _ -> ValueNone - let (|RateLimited|RequestTimeout|ServiceUnavailable|CosmosStatusCode|Other|) = function - | CosmosStatus System.Net.HttpStatusCode.TooManyRequests -> RateLimited - | CosmosStatus System.Net.HttpStatusCode.RequestTimeout -> RequestTimeout - | CosmosStatus System.Net.HttpStatusCode.ServiceUnavailable -> ServiceUnavailable - | CosmosStatus s -> CosmosStatusCode s - | _ -> Other - module Internal = [] @@ -86,14 +87,14 @@ module Internal = m.Contains "SyntaxError: JSON.parse Error: Unexpected input at position" || m.Contains "SyntaxError: JSON.parse Error: Invalid character at position" let classify = function - | Equinox_CosmosStore_Exceptions.RateLimited -> ResultKind.RateLimited - | Equinox_CosmosStore_Exceptions.RequestTimeout -> ResultKind.TimedOut - | Equinox_CosmosStore_Exceptions.CosmosStatusCode System.Net.HttpStatusCode.RequestEntityTooLarge -> ResultKind.TooLarge - | e when containsMalformedMessage e -> ResultKind.Malformed - | _ -> ResultKind.Other + | Equinox.CosmosStore.Exceptions.RateLimited -> ResultKind.RateLimited + | Equinox.CosmosStore.Exceptions.RequestTimeout -> ResultKind.TimedOut + | Equinox.CosmosStore.Exceptions.CosmosStatusCode System.Net.HttpStatusCode.RequestEntityTooLarge -> ResultKind.TooLarge + | e when containsMalformedMessage e -> ResultKind.Malformed + | _ -> ResultKind.Other let isMalformed = function | ResultKind.RateLimited | ResultKind.TimedOut | ResultKind.Other -> false - | ResultKind.TooLarge | ResultKind.Malformed -> true + | ResultKind.TooLarge | ResultKind.Malformed -> true type Dispatcher = @@ -169,7 +170,7 @@ type CosmosStoreSinkStats(log : ILogger, statsInterval, stateInterval) = badCats.Clear(); tooLarge <- 0; malformed <- 0; resultExnOther <- 0; tlStreams.Clear(); mfStreams.Clear(); oStreams.Clear() Equinox.CosmosStore.Core.Log.InternalMetrics.dump log - default _.HandleExn(_, _) : unit = () + override _.HandleExn(log, exn) = log.Warning(exn, "Unhandled") type CosmosStoreSink = diff --git a/src/Propulsion.DynamoStore.Notifier/Handler.fs b/src/Propulsion.DynamoStore.Notifier/Handler.fs index 90f7db9d..754430fb 100644 --- a/src/Propulsion.DynamoStore.Notifier/Handler.fs +++ b/src/Propulsion.DynamoStore.Notifier/Handler.fs @@ -72,7 +72,7 @@ let private publishBatch (client : IAmazonSimpleNotificationService) (log : Seri if res.HttpStatusCode <> HttpStatusCode.OK || res.Failed.Count <> 0 then let fails = [| for x in res.Failed -> struct (x.Code, x.SenderFault, x.Message) |] log.Warning("PublishBatchAsync {res}. Fails: {fails}", res.HttpStatusCode, fails) - failwithf "PublishBatchAsync result %A %A" res.HttpStatusCode fails } + failwithf $"PublishBatchAsync result {res.HttpStatusCode} %A{fails}" } type SnsClient(topicArn) = diff --git a/src/Propulsion.EventStore/EventStoreSink.fs b/src/Propulsion.EventStore/EventStoreSink.fs index 07630edc..9cfefa23 100755 --- a/src/Propulsion.EventStore/EventStoreSink.fs +++ b/src/Propulsion.EventStore/EventStoreSink.fs @@ -132,7 +132,7 @@ type EventStoreSinkStats(log : ILogger, statsInterval, stateInterval) = badCats.Clear(); resultExnOther <- 0; oStreams.Clear() Log.InternalMetrics.dump log - default _.HandleExn(_, _) : unit = () + override _.HandleExn(log, exn) = log.Warning(exn, "Unhandled") type EventStoreSink =