Skip to content

Commit e08afb1

Browse files
authored
SQSWatcher: Ignore failures in deleting recieved messages (#3783)
* SQSWatcher: Ignore failures in deleting recieved messages Perhaps they started getting delivered multiple times. There is code in ElasticMQ which only allows last delivery receipt to be used for deletion. * SQSWatcher: Better formatting for printing * SQSWatcher: Remove unused function to fetch messages
1 parent 6686810 commit e08afb1

File tree

3 files changed

+9
-13
lines changed

3 files changed

+9
-13
lines changed

libs/types-common-aws/default.nix

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
, lib
1515
, proto-lens
1616
, resourcet
17-
, safe
1817
, text
1918
, time
2019
, unliftio
@@ -33,7 +32,6 @@ mkDerivation {
3332
lens
3433
proto-lens
3534
resourcet
36-
safe
3735
text
3836
time
3937
unliftio

libs/types-common-aws/src/Util/Test/SQS.hs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ import Data.List (delete)
3434
import Data.ProtoLens
3535
import Data.Text.Encoding qualified as Text
3636
import Imports
37-
import Safe (headDef)
38-
import UnliftIO (Async, async, throwIO)
37+
import UnliftIO (Async, async)
3938
import UnliftIO.Async qualified as Async
39+
import UnliftIO.Exception
4040
import UnliftIO.Resource (MonadResource, ResourceT)
4141
import UnliftIO.Timeout (timeout)
4242

@@ -142,27 +142,26 @@ receive n url =
142142
. set SQS.receiveMessage_maxNumberOfMessages (Just n)
143143
. set SQS.receiveMessage_visibilityTimeout (Just 1)
144144

145-
fetchMessage :: (Message a, MonadReader AWS.Env m, MonadResource m) => Text -> String -> (String -> Maybe a -> IO ()) -> m ()
146-
fetchMessage url label callback = do
147-
msgs <- fromMaybe [] . view SQS.receiveMessageResponse_messages <$> sendEnv (receive 1 url)
148-
events <- mapM (parseDeleteMessage url) msgs
149-
liftIO $ callback label (headDef Nothing events)
150-
151145
deleteMessage :: (MonadReader AWS.Env m, MonadResource m) => Text -> SQS.Message -> m ()
152146
deleteMessage url m = do
153147
for_
154148
(m ^. SQS.message_receiptHandle)
155149
(void . sendEnv . SQS.newDeleteMessage url)
156150

157-
parseDeleteMessage :: (Message a, MonadReader AWS.Env m, MonadResource m) => Text -> SQS.Message -> m (Maybe a)
151+
parseDeleteMessage :: (Message a, MonadReader AWS.Env m, MonadResource m, MonadUnliftIO m) => Text -> SQS.Message -> m (Maybe a)
158152
parseDeleteMessage url m = do
159153
let decodedMessage = decodeMessage <=< (B64.decode . Text.encodeUtf8)
160154
evt <- case decodedMessage <$> (m ^. SQS.message_body) of
161155
Just (Right e) -> pure (Just e)
162156
_ -> do
163-
liftIO $ print ("Failed to parse SQS message or event" :: String)
157+
liftIO $ putStrLn "Failed to parse SQS message or event"
164158
pure Nothing
165159
deleteMessage url m
160+
`catch` \case
161+
(fromException @SomeAsyncException -> Just asyncExc) ->
162+
throwIO asyncExc
163+
e ->
164+
liftIO $ putStrLn $ "Failed to delete message, this error will be ignored. Message: " <> show m <> ", Exception: " <> displayException e
166165
pure evt
167166

168167
sendEnv :: (MonadReader AWS.Env m, MonadResource m, AWS.AWSRequest a) => a -> m (AWS.AWSResponse a)

libs/types-common-aws/types-common-aws.cabal

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ library
8686
, lens >=4.10
8787
, proto-lens
8888
, resourcet
89-
, safe >=0.3
9089
, text >=0.11
9190
, time
9291
, unliftio

0 commit comments

Comments
 (0)