Don’t mark messages as failed until all retries are exhausted.

// FREEBIE
pull/1/head
Matthew Chen 9 years ago
parent 19d8a32022
commit 8258f26aec

@ -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

Loading…
Cancel
Save