@@ -2099,7 +2099,7 @@ - (AWSTask *)callFinishMultiPartForUploadTask:(AWSS3TransferUtilityMultiPartUplo
20992099 return [self .s3 completeMultipartUpload: compReq];
21002100}
21012101
2102- - (AWSTask *) callAbortMultiPartForUploadTask : (AWSS3TransferUtilityMultiPartUploadTask *) uploadTask {
2102+ - (AWSTask *)callAbortMultiPartForUploadTask : (AWSS3TransferUtilityMultiPartUploadTask *)uploadTask {
21032103 AWSS3AbortMultipartUploadRequest *abortReq = [AWSS3AbortMultipartUploadRequest new ];
21042104 abortReq.bucket = uploadTask.bucket ;
21052105 abortReq.uploadId = uploadTask.uploadID ;
@@ -2377,61 +2377,35 @@ - (void)URLSession:(NSURLSession *)session
23772377 eTag: subTask.eTag
23782378 status: subTask.status
23792379 retry_count: transferUtilityMultiPartUploadTask.retryCount databaseQueue: self .databaseQueue];
2380+
2381+ [transferUtilityMultiPartUploadTask moveTasksToInProgress ];
2382+ [transferUtilityMultiPartUploadTask completeIfDone ];
23802383
23812384 // If there are parts waiting to be uploaded, pick from the waiting parts list and move it to inProgress
2382- if ([transferUtilityMultiPartUploadTask.waitingPartsDictionary count ] > 0 ) {
2383- long numberOfPartsInProgress = [transferUtilityMultiPartUploadTask.inProgressPartsDictionary count ];
2384- while (numberOfPartsInProgress < [self .transferUtilityConfiguration.multiPartConcurrencyLimit integerValue ]) {
2385- if ([transferUtilityMultiPartUploadTask.waitingPartsDictionary count ] > 0 ) {
2386- // Get a part from the waitingList
2387- AWSS3TransferUtilityUploadSubTask *nextSubTask = [[transferUtilityMultiPartUploadTask.waitingPartsDictionary allValues ] objectAtIndex: 0 ];
2388-
2389- // Add to inProgress list
2390- [transferUtilityMultiPartUploadTask.inProgressPartsDictionary setObject: nextSubTask forKey: @(nextSubTask.taskIdentifier)];
2391-
2392- // Remove it from the waitingList
2393- [transferUtilityMultiPartUploadTask.waitingPartsDictionary removeObjectForKey: @(nextSubTask.taskIdentifier)];
2394- AWSDDLogDebug (@" Moving Task[%@ ] to progress for Multipart[%@ ]" , @(nextSubTask.taskIdentifier ), transferUtilityMultiPartUploadTask.uploadID );
2395- [nextSubTask.sessionTask resume ];
2396- numberOfPartsInProgress++;
2397- continue ;
2398- }
2399- break ;
2400- }
2401- }
2402- else if ([transferUtilityMultiPartUploadTask.inProgressPartsDictionary count ] == 0 ) {
2403- // If there are no more inProgress parts, then we are done.
2404-
2405- // Validate that all the content has been uploaded.
2406- int64_t totalBytesSent = 0 ;
2407- for (AWSS3TransferUtilityUploadSubTask *aSubTask in transferUtilityMultiPartUploadTask.completedPartsSet ) {
2408- totalBytesSent += aSubTask.totalBytesExpectedToSend ;
2409- }
2410-
2411- if (totalBytesSent != transferUtilityMultiPartUploadTask.contentLength .longLongValue ) {
2412- NSString *errorMessage = [NSString stringWithFormat: @" Expected to send [%@ ], but sent [%@ ] and there are no remaining parts. Failing transfer " ,
2413- transferUtilityMultiPartUploadTask.contentLength, @(totalBytesSent)];
2414- AWSDDLogDebug (@" %@ " , errorMessage);
2415- NSDictionary *userInfo = [NSDictionary dictionaryWithObject: errorMessage
2416- forKey: @" Message" ];
2417-
2418- transferUtilityMultiPartUploadTask.error = [NSError errorWithDomain: AWSS3TransferUtilityErrorDomain
2419- code: AWSS3TransferUtilityErrorClientError
2420- userInfo: userInfo];
2421-
2422- // Execute call back if provided.
2423- [self completeTask: transferUtilityMultiPartUploadTask];
2424-
2425- // Abort the request, so the server can clean up any partials.
2426- [self callAbortMultiPartForUploadTask: transferUtilityMultiPartUploadTask];
2427-
2428- // clean up.
2429- [self cleanupForMultiPartUploadTask: transferUtilityMultiPartUploadTask];
2430- return ;
2431- }
2432-
2433- [self completeMultiPartForUploadTask: transferUtilityMultiPartUploadTask];
2434- }
2385+ // if ([transferUtilityMultiPartUploadTask.waitingPartsDictionary count] > 0) {
2386+ // long numberOfPartsInProgress = [transferUtilityMultiPartUploadTask.inProgressPartsDictionary count];
2387+ // while (numberOfPartsInProgress < [self.transferUtilityConfiguration.multiPartConcurrencyLimit integerValue]) {
2388+ // if ([transferUtilityMultiPartUploadTask.waitingPartsDictionary count] > 0) {
2389+ // //Get a part from the waitingList
2390+ // AWSS3TransferUtilityUploadSubTask *nextSubTask = [[transferUtilityMultiPartUploadTask.waitingPartsDictionary allValues] objectAtIndex:0];
2391+ //
2392+ // //Add to inProgress list
2393+ // [transferUtilityMultiPartUploadTask.inProgressPartsDictionary setObject:nextSubTask forKey:@(nextSubTask.taskIdentifier)];
2394+ //
2395+ // //Remove it from the waitingList
2396+ // [transferUtilityMultiPartUploadTask.waitingPartsDictionary removeObjectForKey:@(nextSubTask.taskIdentifier)];
2397+ // AWSDDLogDebug(@"Moving Task[%@] to progress for Multipart[%@]", @(nextSubTask.taskIdentifier), transferUtilityMultiPartUploadTask.uploadID);
2398+ // [nextSubTask.sessionTask resume];
2399+ // numberOfPartsInProgress++;
2400+ // continue;
2401+ // }
2402+ // break;
2403+ // }
2404+ // }
2405+ // else
2406+ // if (transferUtilityMultiPartUploadTask.inProgressPartsDictionary.count == 0) {
2407+ //
2408+ // }
24352409 }
24362410 }
24372411 else if ([task isKindOfClass: [NSURLSessionDownloadTask class ]]) {
@@ -2580,7 +2554,7 @@ - (void)completeTask:(AWSS3TransferUtilityTask *)task removeCompletedTask:(BOOL)
25802554
25812555}
25822556
2583- - (void ) cleanupForMultiPartUploadTask : (AWSS3TransferUtilityMultiPartUploadTask *) task {
2557+ - (void )cleanupForMultiPartUploadTask : (AWSS3TransferUtilityMultiPartUploadTask *)task {
25842558
25852559 // Add it to list of completed Tasks
25862560 [self .completedTaskDictionary setObject: task forKey: task.transferID];
0 commit comments