# php-aws-bulk-upload-test

Attempt to re-create issue in [CDAM-2501](https://theorchard.atlassian.net/browse/CDAM-2501) and explore debugging options.

### Setup

1. Create directory named `input` in project root
2. Add files to test with into the input directory

### Running
1. Authenticate as the `dev-generic` aws role
2. Run uploader
```
$ docker compose up --build upload
```

Change behavior in `run.php` to experiment!

### Results

Running the script with default parameters using all mezzanine FLACs from `198588856208` resulted in the following error in `9m45s`.

```
upload-1  | [27-Aug-2024 14:33:43 America/New_York] PHP Fatal error:  Uncaught Aws\S3\Exception\S3MultipartUploadException: An exception occurred while uploading parts to a multipart upload. The following parts had errors:
upload-1  | - Part 4: Error executing "UploadPart" on "https://dev-pdumoulin.s3.amazonaws.com/php-upload-test/198588856208_1_14_124027423.flac?partNumber=4&uploadId=.0fuOV2vESs3.MmATS6acMlwdOfDdPgJ6j6r7YpGKb3oWd_aiA5Na5lUa8FWMvLSx0YAjmlQ7f7uvTzfi.wdj6fBCIEvYnyQQ0sml3bZfJijj5dZZdzRnUKxM4.yMv.TPCBm9buUi5PmOZdeLHnEkA--"; AWS HTTP error: cURL error 55: Connection died, tried 5 times before giving up (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://dev-pdumoulin.s3.amazonaws.com/php-upload-test/198588856208_1_14_124027423.flac?partNumber=4&uploadId=.0fuOV2vESs3.MmATS6acMlwdOfDdPgJ6j6r7YpGKb3oWd_aiA5Na5lUa8FWMvLSx0YAjmlQ7f7uvTzfi.wdj6fBCIEvYnyQQ0sml3bZfJijj5dZZdzRnUKxM4.yMv.TPCBm9buUi5PmOZdeLHnEkA--
upload-1  |  in /vendor/aws/aws-sdk-php/src/Multipart/AbstractUploadManager.php:134
upload-1  | Stack trace:
upload-1  | #0 [internal function]: Aws\Multipart\AbstractUploadManager->Aws\Multipart\{closure}()
upload-1  | #1 /vendor/guzzlehttp/promises/src/Coroutine.php(137): Generator->send(NULL)
upload-1  | #2 /vendor/guzzlehttp/promises/src/Promise.php(209): GuzzleHttp\Promise\Coroutine->_handleSuccess(NULL)
upload-1  | #3 /vendor/guzzlehttp/promises/src/Promise.php(158): GuzzleHttp\Promise\Promise::callHandler(1, NULL, NULL)
upload-1  | #4 /vendor/guzzlehttp/promises/src/TaskQueue.php(52): GuzzleHttp\Promise\Promise::GuzzleHttp\Promise\{closure}()
upload-1  | #5 /vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(167): GuzzleHttp\Promise\TaskQueue->run()
upload-1  | #6 /vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(206): GuzzleHttp\Handler\CurlMultiHandler->tick()
upload-1  | #7 /vendor/guzzlehttp/promises/src/Promise.php(251): GuzzleHttp\Handler\CurlMultiHandler->execute(true)
upload-1  | #8 /vendor/guzzlehttp/promises/src/Promise.php(227): GuzzleHttp\Promise\Promise->invokeWaitFn()
upload-1  | #9 /vendor/guzzlehttp/promises/src/Promise.php(272): GuzzleHttp\Promise\Promise->waitIfPending()
upload-1  | #10 /vendor/guzzlehttp/promises/src/Promise.php(229): GuzzleHttp\Promise\Promise->invokeWaitList()
upload-1  | #11 /vendor/guzzlehttp/promises/src/Promise.php(272): GuzzleHttp\Promise\Promise->waitIfPending()
upload-1  | #12 /vendor/guzzlehttp/promises/src/Promise.php(229): GuzzleHttp\Promise\Promise->invokeWaitList()
upload-1  | #13 /vendor/guzzlehttp/promises/src/Promise.php(69): GuzzleHttp\Promise\Promise->waitIfPending()
upload-1  | #14 /vendor/guzzlehttp/promises/src/EachPromise.php(109): GuzzleHttp\Promise\Promise->wait()
upload-1  | #15 /vendor/guzzlehttp/promises/src/Promise.php(251): GuzzleHttp\Promise\EachPromise->GuzzleHttp\Promise\{closure}(true)
upload-1  | #16 /vendor/guzzlehttp/promises/src/Promise.php(227): GuzzleHttp\Promise\Promise->invokeWaitFn()
upload-1  | #17 /vendor/guzzlehttp/promises/src/Promise.php(69): GuzzleHttp\Promise\Promise->waitIfPending()
upload-1  | #18 /vendor/aws/aws-sdk-php/src/S3/Transfer.php(167): GuzzleHttp\Promise\Promise->wait()
upload-1  | #19 /run.php(36): Aws\S3\Transfer->transfer()
upload-1  | #20 {main}
upload-1  |   thrown in /vendor/aws/aws-sdk-php/src/Multipart/AbstractUploadManager.php on line 134
upload-1  |
upload-1  | Fatal error: Uncaught Aws\S3\Exception\S3MultipartUploadException: An exception occurred while uploading parts to a multipart upload. The following parts had errors:
upload-1  | - Part 4: Error executing "UploadPart" on "https://dev-pdumoulin.s3.amazonaws.com/php-upload-test/198588856208_1_14_124027423.flac?partNumber=4&uploadId=.0fuOV2vESs3.MmATS6acMlwdOfDdPgJ6j6r7YpGKb3oWd_aiA5Na5lUa8FWMvLSx0YAjmlQ7f7uvTzfi.wdj6fBCIEvYnyQQ0sml3bZfJijj5dZZdzRnUKxM4.yMv.TPCBm9buUi5PmOZdeLHnEkA--"; AWS HTTP error: cURL error 55: Connection died, tried 5 times before giving up (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://dev-pdumoulin.s3.amazonaws.com/php-upload-test/198588856208_1_14_124027423.flac?partNumber=4&uploadId=.0fuOV2vESs3.MmATS6acMlwdOfDdPgJ6j6r7YpGKb3oWd_aiA5Na5lUa8FWMvLSx0YAjmlQ7f7uvTzfi.wdj6fBCIEvYnyQQ0sml3bZfJijj5dZZdzRnUKxM4.yMv.TPCBm9buUi5PmOZdeLHnEkA--
upload-1  |  in /vendor/aws/aws-sdk-php/src/Multipart/AbstractUploadManager.php:134
upload-1  | Stack trace:
upload-1  | #0 [internal function]: Aws\Multipart\AbstractUploadManager->Aws\Multipart\{closure}()
upload-1  | #1 /vendor/guzzlehttp/promises/src/Coroutine.php(137): Generator->send(NULL)
upload-1  | #2 /vendor/guzzlehttp/promises/src/Promise.php(209): GuzzleHttp\Promise\Coroutine->_handleSuccess(NULL)
upload-1  | #3 /vendor/guzzlehttp/promises/src/Promise.php(158): GuzzleHttp\Promise\Promise::callHandler(1, NULL, NULL)
upload-1  | #4 /vendor/guzzlehttp/promises/src/TaskQueue.php(52): GuzzleHttp\Promise\Promise::GuzzleHttp\Promise\{closure}()
upload-1  | #5 /vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(167): GuzzleHttp\Promise\TaskQueue->run()
upload-1  | #6 /vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(206): GuzzleHttp\Handler\CurlMultiHandler->tick()
upload-1  | #7 /vendor/guzzlehttp/promises/src/Promise.php(251): GuzzleHttp\Handler\CurlMultiHandler->execute(true)
upload-1  | #8 /vendor/guzzlehttp/promises/src/Promise.php(227): GuzzleHttp\Promise\Promise->invokeWaitFn()
upload-1  | #9 /vendor/guzzlehttp/promises/src/Promise.php(272): GuzzleHttp\Promise\Promise->waitIfPending()
upload-1  | #10 /vendor/guzzlehttp/promises/src/Promise.php(229): GuzzleHttp\Promise\Promise->invokeWaitList()
upload-1  | #11 /vendor/guzzlehttp/promises/src/Promise.php(272): GuzzleHttp\Promise\Promise->waitIfPending()
upload-1  | #12 /vendor/guzzlehttp/promises/src/Promise.php(229): GuzzleHttp\Promise\Promise->invokeWaitList()
upload-1  | #13 /vendor/guzzlehttp/promises/src/Promise.php(69): GuzzleHttp\Promise\Promise->waitIfPending()
upload-1  | #14 /vendor/guzzlehttp/promises/src/EachPromise.php(109): GuzzleHttp\Promise\Promise->wait()
upload-1  | #15 /vendor/guzzlehttp/promises/src/Promise.php(251): GuzzleHttp\Promise\EachPromise->GuzzleHttp\Promise\{closure}(true)
upload-1  | #16 /vendor/guzzlehttp/promises/src/Promise.php(227): GuzzleHttp\Promise\Promise->invokeWaitFn()
upload-1  | #17 /vendor/guzzlehttp/promises/src/Promise.php(69): GuzzleHttp\Promise\Promise->waitIfPending()
upload-1  | #18 /vendor/aws/aws-sdk-php/src/S3/Transfer.php(167): GuzzleHttp\Promise\Promise->wait()
upload-1  | #19 /run.php(36): Aws\S3\Transfer->transfer()
upload-1  | #20 {main}
upload-1  |   thrown in /vendor/aws/aws-sdk-php/src/Multipart/AbstractUploadManager.php on line 134
upload-1 exited with code 255
```