Merge branch 'charlesmchen/attachmentRetryVsFailure'

pull/1/head
Matthew Chen 8 years ago
commit d4e0c49ff9

@ -73,6 +73,8 @@ void AssertIsOnSendingQueue()
@end @end
#pragma mark -
typedef NS_ENUM(NSInteger, OWSSendMessageOperationState) { typedef NS_ENUM(NSInteger, OWSSendMessageOperationState) {
OWSSendMessageOperationStateNew, OWSSendMessageOperationStateNew,
OWSSendMessageOperationStateExecuting, OWSSendMessageOperationStateExecuting,
@ -85,8 +87,12 @@ typedef NS_ENUM(NSInteger, OWSSendMessageOperationState) {
success:(void (^)())successHandler success:(void (^)())successHandler
failure:(RetryableFailureHandler)failureHandler; failure:(RetryableFailureHandler)failureHandler;
- (void)saveMessage:(TSOutgoingMessage *)message withError:(NSError *)error;
@end @end
#pragma mark -
NSString *const OWSSendMessageOperationKeyIsExecuting = @"isExecuting"; NSString *const OWSSendMessageOperationKeyIsExecuting = @"isExecuting";
NSString *const OWSSendMessageOperationKeyIsFinished = @"isFinished"; NSString *const OWSSendMessageOperationKeyIsFinished = @"isFinished";
@ -103,6 +109,8 @@ NSUInteger const OWSSendMessageOperationMaxRetries = 4;
@end @end
#pragma mark -
@implementation OWSSendMessageOperation @implementation OWSSendMessageOperation
- (instancetype)initWithMessage:(TSOutgoingMessage *)message - (instancetype)initWithMessage:(TSOutgoingMessage *)message
@ -140,6 +148,8 @@ NSUInteger const OWSSendMessageOperationMaxRetries = 4;
return; return;
} }
[strongSelf.messageSender saveMessage:strongSelf.message withError:error];
DDLogDebug(@"%@ failed with error: %@", strongSelf.tag, error); DDLogDebug(@"%@ failed with error: %@", strongSelf.tag, error);
aFailureHandler(error); aFailureHandler(error);
[strongSelf markAsComplete]; [strongSelf markAsComplete];
@ -228,6 +238,7 @@ NSUInteger const OWSSendMessageOperationMaxRetries = 4;
[self tryWithRemainingRetries:remainingRetries - 1]; [self tryWithRemainingRetries:remainingRetries - 1];
} else { } else {
DDLogWarn(@"%@ Too many failures. Giving up sending.", self.tag); DDLogWarn(@"%@ Too many failures. Giving up sending.", self.tag);
self.failureHandler(error); self.failureHandler(error);
} }
}; };
@ -363,17 +374,20 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
failure:(RetryableFailureHandler)failureHandler failure:(RetryableFailureHandler)failureHandler
{ {
DDLogDebug(@"%@ sending message: %@", self.tag, message.debugDescription); 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 [self ensureAnyAttachmentsUploaded:message
success:^() { success:^() {
[self deliverMessage:message success:successHandler failure:markAndFailureHandler]; [self deliverMessage:message
} success:successHandler
failure:markAndFailureHandler]; 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 - (void)ensureAnyAttachmentsUploaded:(TSOutgoingMessage *)message

Loading…
Cancel
Save