Skip to content

Commit 0dd53d0

Browse files
authored
The uploader should retry when there's an error (#5116)
* The uploader should retry when there's an error * Log the decoding error if there's one
1 parent b41410d commit 0dd53d0

File tree

1 file changed

+31
-36
lines changed

1 file changed

+31
-36
lines changed

GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTUploader.m

Lines changed: 31 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -202,51 +202,41 @@ - (void)uploadPackage:(GDTCORUploadPackage *)package {
202202
GDTCORLogWarning(GDTCORMCWUploadFailed, @"There was an error uploading events: %@", error);
203203
}
204204
NSError *decodingError;
205+
GDTCORClock *futureUploadTime;
205206
if (data) {
206207
gdt_cct_LogResponse logResponse = GDTCCTDecodeLogResponse(data, &decodingError);
207208
if (!decodingError && logResponse.has_next_request_wait_millis) {
208209
GDTCORLogDebug(
209210
"CCT: The backend responded asking to not upload for %lld millis from now.",
210211
logResponse.next_request_wait_millis);
211-
GDTCORClock *futureUploadTime =
212+
futureUploadTime =
212213
[GDTCORClock clockSnapshotInTheFuture:logResponse.next_request_wait_millis];
213-
switch (target) {
214-
case kGDTCORTargetCCT:
215-
self->_CCTNextUploadTime = futureUploadTime;
216-
break;
217-
218-
case kGDTCORTargetFLL:
219-
// Falls through.
220-
case kGDTCORTargetCSH:
221-
self->_FLLNextUploadTime = futureUploadTime;
222-
default:
223-
break;
224-
}
225-
} else {
226-
GDTCORLogDebug("%@", @"CCT: The backend response failed to parse, so the next request "
227-
@"won't occur until 15 minutes from now");
228-
// 15 minutes from now.
229-
GDTCORClock *futureUploadTime = [GDTCORClock clockSnapshotInTheFuture:15 * 60 * 1000];
230-
switch (target) {
231-
case kGDTCORTargetCCT:
232-
self->_CCTNextUploadTime = futureUploadTime;
233-
break;
234-
235-
case kGDTCORTargetFLL:
236-
// Falls through.
237-
case kGDTCORTargetCSH:
238-
self->_FLLNextUploadTime = futureUploadTime;
239-
break;
240-
241-
default:
242-
break;
243-
}
214+
} else if (decodingError) {
215+
GDTCORLogDebug(@"There was a response decoding error: %@", decodingError);
244216
}
245217
pb_release(gdt_cct_LogResponse_fields, &logResponse);
246218
}
219+
if (!futureUploadTime) {
220+
GDTCORLogDebug("%@", @"CCT: The backend response failed to parse, so the next request "
221+
@"won't occur until 15 minutes from now");
222+
// 15 minutes from now.
223+
futureUploadTime = [GDTCORClock clockSnapshotInTheFuture:15 * 60 * 1000];
224+
}
225+
switch (target) {
226+
case kGDTCORTargetCCT:
227+
self->_CCTNextUploadTime = futureUploadTime;
228+
break;
229+
230+
case kGDTCORTargetFLL:
231+
// Falls through.
232+
case kGDTCORTargetCSH:
233+
self->_FLLNextUploadTime = futureUploadTime;
234+
default:
235+
break;
236+
}
247237

248-
// Only retry if one of these codes is returned.
249-
if (((NSHTTPURLResponse *)response).statusCode == 429 ||
238+
// Only retry if one of these codes is returned, or there was an error.
239+
if (error || ((NSHTTPURLResponse *)response).statusCode == 429 ||
250240
((NSHTTPURLResponse *)response).statusCode == 503) {
251241
[package retryDeliveryInTheFuture];
252242
} else {
@@ -287,10 +277,15 @@ - (void)uploadPackage:(GDTCORUploadPackage *)package {
287277
- (BOOL)readyToUploadTarget:(GDTCORTarget)target conditions:(GDTCORUploadConditions)conditions {
288278
__block BOOL result = NO;
289279
dispatch_sync(_uploaderQueue, ^{
290-
if (target == kGDTCORTargetCSH && [GDTCCTPrioritizer sharedInstance].CSHEvents.count > 0) {
291-
result = YES;
280+
if (target == kGDTCORTargetCSH) {
281+
if ([GDTCCTPrioritizer sharedInstance].CSHEvents.count > 0) {
282+
result = YES;
283+
} else {
284+
result = NO;
285+
}
292286
return;
293287
}
288+
294289
if (self->_currentUploadPackage) {
295290
result = NO;
296291
GDTCORLogDebug("%@", @"CCT: can't upload because a package is in flight");

0 commit comments

Comments
 (0)