From 8258f26aec9cd01b6bf9591df2b7e9dce5ce89de Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Mon, 10 Apr 2017 10:35:43 -0400 Subject: [PATCH 1/2] =?UTF-8?q?Don=E2=80=99t=20mark=20messages=20as=20fail?= =?UTF-8?q?ed=20until=20all=20retries=20are=20exhausted.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit // FREEBIE --- src/Messages/OWSMessageSender.m | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/src/Messages/OWSMessageSender.m b/src/Messages/OWSMessageSender.m index adbe939c7..f884dcce4 100644 --- a/src/Messages/OWSMessageSender.m +++ b/src/Messages/OWSMessageSender.m @@ -73,6 +73,8 @@ void AssertIsOnSendingQueue() @end +#pragma mark - + typedef NS_ENUM(NSInteger, OWSSendMessageOperationState) { OWSSendMessageOperationStateNew, OWSSendMessageOperationStateExecuting, @@ -85,8 +87,12 @@ typedef NS_ENUM(NSInteger, OWSSendMessageOperationState) { success:(void (^)())successHandler failure:(RetryableFailureHandler)failureHandler; +- (void)saveMessage:(TSOutgoingMessage *)message withError:(NSError *)error; + @end +#pragma mark - + NSString *const OWSSendMessageOperationKeyIsExecuting = @"isExecuting"; NSString *const OWSSendMessageOperationKeyIsFinished = @"isFinished"; @@ -103,6 +109,8 @@ NSUInteger const OWSSendMessageOperationMaxRetries = 4; @end +#pragma mark - + @implementation OWSSendMessageOperation - (instancetype)initWithMessage:(TSOutgoingMessage *)message @@ -228,6 +236,9 @@ NSUInteger const OWSSendMessageOperationMaxRetries = 4; [self tryWithRemainingRetries:remainingRetries - 1]; } else { DDLogWarn(@"%@ Too many failures. Giving up sending.", self.tag); + + [self.messageSender saveMessage:self.message withError:error]; + self.failureHandler(error); } }; @@ -363,17 +374,20 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; failure:(RetryableFailureHandler)failureHandler { DDLogDebug(@"%@ sending message: %@", self.tag, message.debugDescription); - RetryableFailureHandler markAndFailureHandler = ^(NSError *error, BOOL isRetryable) { - // TODO do we really want to mark this as failed if we're still retrying? - [self saveMessage:message withError:error]; - failureHandler(error, isRetryable); - }; [self ensureAnyAttachmentsUploaded:message - success:^() { - [self deliverMessage:message success:successHandler failure:markAndFailureHandler]; - } - failure:markAndFailureHandler]; + success:^() { + [self deliverMessage:message + success:successHandler + failure:^(NSError *error, BOOL isRetryable) { + DDLogDebug(@"%@ Message send attempt failed: %@", self.tag, message.debugDescription); + failureHandler(error, isRetryable); + }]; + } + failure:^(NSError *error, BOOL isRetryable) { + DDLogDebug(@"%@ Attachment upload attempt failed: %@", self.tag, message.debugDescription); + failureHandler(error, isRetryable); + }]; } - (void)ensureAnyAttachmentsUploaded:(TSOutgoingMessage *)message From 004a952bc03b8e17bf2acf496929383c7e2c5cff Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Mon, 10 Apr 2017 12:35:30 -0400 Subject: [PATCH 2/2] Respond to CR. // FREEBIE --- src/Messages/OWSMessageSender.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Messages/OWSMessageSender.m b/src/Messages/OWSMessageSender.m index f884dcce4..b9553fdc5 100644 --- a/src/Messages/OWSMessageSender.m +++ b/src/Messages/OWSMessageSender.m @@ -148,6 +148,8 @@ NSUInteger const OWSSendMessageOperationMaxRetries = 4; return; } + [strongSelf.messageSender saveMessage:strongSelf.message withError:error]; + DDLogDebug(@"%@ failed with error: %@", strongSelf.tag, error); aFailureHandler(error); [strongSelf markAsComplete]; @@ -237,8 +239,6 @@ NSUInteger const OWSSendMessageOperationMaxRetries = 4; } else { DDLogWarn(@"%@ Too many failures. Giving up sending.", self.tag); - [self.messageSender saveMessage:self.message withError:error]; - self.failureHandler(error); } };