[Bug 2131790] Re: RGW - etag not returned on multipart upload

Ghadi Rahme 2131790 at bugs.launchpad.net
Wed Apr 29 15:36:22 UTC 2026


Verification Jammy:

1. Installed from proposed.

ceph-rgw:
dpkg -l | grep ceph
ii  ceph-common                          17.2.9-0ubuntu0.22.04.3                          amd64        common utilities to mount and interact with a ceph storage cluster
ii  libcephfs2                           17.2.9-0ubuntu0.22.04.3                          amd64        Ceph distributed file system client library
ii  python3-ceph-argparse                17.2.9-0ubuntu0.22.04.3                          amd64        Python 3 utility libraries for Ceph CLI
ii  python3-ceph-common                  17.2.9-0ubuntu0.22.04.3                          all          Python 3 utility libraries for Ceph
ii  python3-cephfs                       17.2.9-0ubuntu0.22.04.3                          amd64        Python 3 libraries for the Ceph libcephfs library


ceph-mon:

dpkg -l | grep ceph
ii  ceph                                 17.2.9-0ubuntu0.22.04.3                          amd64        distributed storage and file system
ii  ceph-base                            17.2.9-0ubuntu0.22.04.3                          amd64        common ceph daemon libraries and management tools
ii  ceph-common                          17.2.9-0ubuntu0.22.04.3                          amd64        common utilities to mount and interact with a ceph storage cluster
ii  ceph-mds                             17.2.9-0ubuntu0.22.04.3                          amd64        metadata server for the ceph distributed file system
ii  ceph-mgr                             17.2.9-0ubuntu0.22.04.3                          amd64        manager for the ceph distributed file system
ii  ceph-mgr-modules-core                17.2.9-0ubuntu0.22.04.3                          all          ceph manager modules which are always enabled
ii  ceph-mon                             17.2.9-0ubuntu0.22.04.3                          amd64        monitor server for the ceph storage system
ii  ceph-osd                             17.2.9-0ubuntu0.22.04.3                          amd64        OSD server for the ceph storage system
ii  ceph-volume                          17.2.9-0ubuntu0.22.04.3                          all          tool to facilidate OSD deployment
ii  libcephfs2                           17.2.9-0ubuntu0.22.04.3                          amd64        Ceph distributed file system client library
ii  libsqlite3-mod-ceph                  17.2.9-0ubuntu0.22.04.3                          amd64        SQLite3 VFS for Ceph
ii  python3-ceph-argparse                17.2.9-0ubuntu0.22.04.3                          amd64        Python 3 utility libraries for Ceph CLI
ii  python3-ceph-common                  17.2.9-0ubuntu0.22.04.3                          all          Python 3 utility libraries for Ceph
ii  python3-cephfs                       17.2.9-0ubuntu0.22.04.3                          amd64        Python 3 libraries for the Ceph libcephfs library


ceph-osd:

dpkg -l | grep ceph
ii  ceph                                 17.2.9-0ubuntu0.22.04.3                          amd64        distributed storage and file system
ii  ceph-base                            17.2.9-0ubuntu0.22.04.3                          amd64        common ceph daemon libraries and management tools
ii  ceph-common                          17.2.9-0ubuntu0.22.04.3                          amd64        common utilities to mount and interact with a ceph storage cluster
ii  ceph-mds                             17.2.9-0ubuntu0.22.04.3                          amd64        metadata server for the ceph distributed file system
ii  ceph-mgr                             17.2.9-0ubuntu0.22.04.3                          amd64        manager for the ceph distributed file system
ii  ceph-mgr-modules-core                17.2.9-0ubuntu0.22.04.3                          all          ceph manager modules which are always enabled
ii  ceph-mon                             17.2.9-0ubuntu0.22.04.3                          amd64        monitor server for the ceph storage system
ii  ceph-osd                             17.2.9-0ubuntu0.22.04.3                          amd64        OSD server for the ceph storage system
ii  ceph-volume                          17.2.9-0ubuntu0.22.04.3                          all          tool to facilidate OSD deployment
ii  libcephfs2                           17.2.9-0ubuntu0.22.04.3                          amd64        Ceph distributed file system client library
ii  libsqlite3-mod-ceph                  17.2.9-0ubuntu0.22.04.3                          amd64        SQLite3 VFS for Ceph
ii  python3-ceph-argparse                17.2.9-0ubuntu0.22.04.3                          amd64        Python 3 utility libraries for Ceph CLI
ii  python3-ceph-common                  17.2.9-0ubuntu0.22.04.3                          all          Python 3 utility libraries for Ceph
ii  python3-cephfs                       17.2.9-0ubuntu0.22.04.3                          amd64        Python 3 libraries for the Ceph libcephfs library


2. uploading a 10MB file named "test-file.txt":

$ ls -lh test.txt 
-rw-rw-r-- 1 ubuntu ubuntu 10M Apr 29 15:25 test.txt


$ ubuntu at juju-6062d5-ceph-quincy-4:~$ aws s3 --profile ceph --endpoint-url http://10.159.7.105 cp ./test.txt s3://test-bucket/ --debug
2026-04-29 15:32:33,573 - MainThread - awscli.clidriver - DEBUG - CLI version: aws-cli/1.22.34 Python/3.10.12 Linux/5.15.0-173-generic botocore/1.23.34
2026-04-29 15:32:33,573 - MainThread - awscli.clidriver - DEBUG - Arguments entered to CLI: ['s3', '--profile', 'ceph', '--endpoint-url', 'http://10.159.7.105', 'cp', './test.txt', 's3://test-bucket/', '--debug']
2026-04-29 15:32:33,573 - MainThread - botocore.hooks - DEBUG - Event session-initialized: calling handler <function add_scalar_parsers at 0x7fbe826cb520>
2026-04-29 15:32:33,573 - MainThread - botocore.hooks - DEBUG - Event session-initialized: calling handler <function register_uri_param_handler at 0x7fbe82a511b0>
2026-04-29 15:32:33,574 - MainThread - botocore.hooks - DEBUG - Event session-initialized: calling handler <function inject_assume_role_provider_cache at 0x7fbe82aa5e10>
2026-04-29 15:32:33,575 - MainThread - botocore.utils - DEBUG - IMDS ENDPOINT: http://169.254.169.254/
2026-04-29 15:32:33,576 - MainThread - botocore.credentials - DEBUG - Skipping environment variable credential check because profile name was explicitly set.
2026-04-29 15:32:33,576 - MainThread - botocore.hooks - DEBUG - Event session-initialized: calling handler <function attach_history_handler at 0x7fbe827881f0>
2026-04-29 15:32:33,576 - MainThread - botocore.hooks - DEBUG - Event building-command-table.s3: calling handler <function add_waiters at 0x7fbe826d8dc0>
2026-04-29 15:32:33,577 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.s3.anonymous: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,577 - MainThread - botocore.hooks - DEBUG - Event building-command-table.cp: calling handler <function add_waiters at 0x7fbe826d8dc0>
2026-04-29 15:32:33,578 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.paths: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,578 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.dryrun: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,578 - MainThread - botocore.hooks - DEBUG - Event process-cli-arg.custom.cp: calling handler <awscli.argprocess.ParamShorthandParser object at 0x7fbe82a777f0>
2026-04-29 15:32:33,578 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.quiet: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,578 - MainThread - botocore.hooks - DEBUG - Event process-cli-arg.custom.cp: calling handler <awscli.argprocess.ParamShorthandParser object at 0x7fbe82a777f0>
2026-04-29 15:32:33,579 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.anonymous: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,579 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.acl: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,579 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.follow-symlinks: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,579 - MainThread - botocore.hooks - DEBUG - Event process-cli-arg.custom.cp: calling handler <awscli.argprocess.ParamShorthandParser object at 0x7fbe82a777f0>
2026-04-29 15:32:33,579 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.anonymous: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,579 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.sse: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,579 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.sse-c: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,579 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.sse-c-key: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,579 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.sse-kms-key-id: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,579 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.sse-c-copy-source: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,580 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.sse-c-copy-source-key: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,580 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.storage-class: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,580 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.grants: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,580 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.website-redirect: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,580 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.content-type: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,580 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.cache-control: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,580 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.content-disposition: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,580 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.content-encoding: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,580 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.content-language: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,581 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.expires: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,581 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.source-region: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,581 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.only-show-errors: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,581 - MainThread - botocore.hooks - DEBUG - Event process-cli-arg.custom.cp: calling handler <awscli.argprocess.ParamShorthandParser object at 0x7fbe82a777f0>
2026-04-29 15:32:33,581 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.anonymous: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,581 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.page-size: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,581 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.ignore-glacier-warnings: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,581 - MainThread - botocore.hooks - DEBUG - Event process-cli-arg.custom.cp: calling handler <awscli.argprocess.ParamShorthandParser object at 0x7fbe82a777f0>
2026-04-29 15:32:33,581 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.force-glacier-transfer: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,581 - MainThread - botocore.hooks - DEBUG - Event process-cli-arg.custom.cp: calling handler <awscli.argprocess.ParamShorthandParser object at 0x7fbe82a777f0>
2026-04-29 15:32:33,582 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.request-payer: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,582 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.metadata: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,582 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.metadata-directive: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,582 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.expected-size: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,582 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.custom.cp.anonymous: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fbe825437f0>
2026-04-29 15:32:33,582 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: assume-role
2026-04-29 15:32:33,582 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: assume-role-with-web-identity
2026-04-29 15:32:33,582 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: sso
2026-04-29 15:32:33,583 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: shared-credentials-file
2026-04-29 15:32:33,583 - MainThread - botocore.credentials - INFO - Found credentials in shared credentials file: ~/.aws/credentials
2026-04-29 15:32:33,583 - MainThread - botocore.loaders - DEBUG - Loading JSON file: /usr/lib/python3/dist-packages/botocore/data/endpoints.json
2026-04-29 15:32:33,588 - MainThread - botocore.hooks - DEBUG - Event choose-service-name: calling handler <function handle_service_name_alias at 0x7fbe83037880>
2026-04-29 15:32:33,589 - MainThread - botocore.loaders - DEBUG - Loading JSON file: /usr/lib/python3/dist-packages/botocore/data/s3/2006-03-01/service-2.json
2026-04-29 15:32:33,594 - MainThread - botocore.hooks - DEBUG - Event creating-client-class.s3: calling handler <function add_generate_presigned_post at 0x7fbe82fee050>
2026-04-29 15:32:33,594 - MainThread - botocore.hooks - DEBUG - Event creating-client-class.s3: calling handler <function add_generate_presigned_url at 0x7fbe82fede10>
2026-04-29 15:32:33,594 - MainThread - botocore.regions - DEBUG - Creating a regex based endpoint for s3, east-us
2026-04-29 15:32:33,597 - MainThread - botocore.endpoint - DEBUG - Setting s3 timeout as (60, 60)
2026-04-29 15:32:33,597 - MainThread - botocore.loaders - DEBUG - Loading JSON file: /usr/lib/python3/dist-packages/botocore/data/_retry.json
2026-04-29 15:32:33,598 - MainThread - botocore.client - DEBUG - Registering retry handlers for service: s3
2026-04-29 15:32:33,598 - MainThread - botocore.hooks - DEBUG - Event choose-service-name: calling handler <function handle_service_name_alias at 0x7fbe83037880>
2026-04-29 15:32:33,599 - MainThread - botocore.hooks - DEBUG - Event creating-client-class.s3: calling handler <function add_generate_presigned_post at 0x7fbe82fee050>
2026-04-29 15:32:33,599 - MainThread - botocore.hooks - DEBUG - Event creating-client-class.s3: calling handler <function add_generate_presigned_url at 0x7fbe82fede10>
2026-04-29 15:32:33,599 - MainThread - botocore.regions - DEBUG - Creating a regex based endpoint for s3, east-us
2026-04-29 15:32:33,600 - MainThread - botocore.endpoint - DEBUG - Setting s3 timeout as (60, 60)
2026-04-29 15:32:33,601 - MainThread - botocore.client - DEBUG - Registering retry handlers for service: s3
2026-04-29 15:32:33,601 - MainThread - botocore.hooks - DEBUG - Event choose-service-name: calling handler <function handle_service_name_alias at 0x7fbe83037880>
2026-04-29 15:32:33,602 - MainThread - botocore.hooks - DEBUG - Event creating-client-class.s3: calling handler <function add_generate_presigned_post at 0x7fbe82fee050>
2026-04-29 15:32:33,602 - MainThread - botocore.hooks - DEBUG - Event creating-client-class.s3: calling handler <function add_generate_presigned_url at 0x7fbe82fede10>
2026-04-29 15:32:33,602 - MainThread - botocore.regions - DEBUG - Creating a regex based endpoint for s3, east-us
2026-04-29 15:32:33,603 - MainThread - botocore.endpoint - DEBUG - Setting s3 timeout as (60, 60)
2026-04-29 15:32:33,604 - MainThread - botocore.client - DEBUG - Registering retry handlers for service: s3
2026-04-29 15:32:33,604 - MainThread - awscli.customizations.s3.s3handler - DEBUG - Using a multipart threshold of 8388608 and a part size of 8388608
2026-04-29 15:32:33,605 - MainThread - s3transfer.utils - DEBUG - Acquiring 0
2026-04-29 15:32:33,606 - ThreadPoolExecutor-1_0 - s3transfer.tasks - DEBUG - UploadSubmissionTask(transfer_id=0, {'transfer_future': <s3transfer.futures.TransferFuture object at 0x7fbe82082c80>}) about to wait for the following futures []
2026-04-29 15:32:33,606 - ThreadPoolExecutor-1_0 - s3transfer.tasks - DEBUG - UploadSubmissionTask(transfer_id=0, {'transfer_future': <s3transfer.futures.TransferFuture object at 0x7fbe82082c80>}) done waiting for dependent futures
2026-04-29 15:32:33,606 - ThreadPoolExecutor-1_0 - s3transfer.tasks - DEBUG - Executing task UploadSubmissionTask(transfer_id=0, {'transfer_future': <s3transfer.futures.TransferFuture object at 0x7fbe82082c80>}) with kwargs {'client': <botocore.client.S3 object at 0x7fbe8201ded0>, 'config': <s3transfer.manager.TransferConfig object at 0x7fbe820816c0>, 'osutil': <s3transfer.utils.OSUtils object at 0x7fbe82081750>, 'request_executor': <s3transfer.futures.BoundedExecutor object at 0x7fbe82081930>, 'transfer_future': <s3transfer.futures.TransferFuture object at 0x7fbe82082c80>}
2026-04-29 15:32:33,608 - ThreadPoolExecutor-1_0 - s3transfer.futures - DEBUG - Submitting task CreateMultipartUploadTask(transfer_id=0, {'bucket': 'test-bucket', 'key': 'test.txt', 'extra_args': {'ContentType': 'text/plain'}}) to executor <s3transfer.futures.BoundedExecutor object at 0x7fbe82081930> for transfer request: 0.
2026-04-29 15:32:33,608 - ThreadPoolExecutor-1_0 - s3transfer.utils - DEBUG - Acquiring 0
2026-04-29 15:32:33,608 - ThreadPoolExecutor-0_0 - s3transfer.tasks - DEBUG - CreateMultipartUploadTask(transfer_id=0, {'bucket': 'test-bucket', 'key': 'test.txt', 'extra_args': {'ContentType': 'text/plain'}}) about to wait for the following futures []
2026-04-29 15:32:33,609 - ThreadPoolExecutor-1_0 - s3transfer.futures - DEBUG - Submitting task UploadPartTask(transfer_id=0, {'bucket': 'test-bucket', 'key': 'test.txt', 'part_number': 1, 'extra_args': {}}) to executor <s3transfer.futures.BoundedExecutor object at 0x7fbe82081930> for transfer request: 0.
2026-04-29 15:32:33,609 - ThreadPoolExecutor-1_0 - s3transfer.utils - DEBUG - Acquiring 0
2026-04-29 15:32:33,609 - ThreadPoolExecutor-0_0 - s3transfer.tasks - DEBUG - CreateMultipartUploadTask(transfer_id=0, {'bucket': 'test-bucket', 'key': 'test.txt', 'extra_args': {'ContentType': 'text/plain'}}) done waiting for dependent futures
2026-04-29 15:32:33,609 - ThreadPoolExecutor-0_0 - s3transfer.tasks - DEBUG - Executing task CreateMultipartUploadTask(transfer_id=0, {'bucket': 'test-bucket', 'key': 'test.txt', 'extra_args': {'ContentType': 'text/plain'}}) with kwargs {'client': <botocore.client.S3 object at 0x7fbe8201ded0>, 'bucket': 'test-bucket', 'key': 'test.txt', 'extra_args': {'ContentType': 'text/plain'}}
2026-04-29 15:32:33,609 - ThreadPoolExecutor-0_0 - botocore.hooks - DEBUG - Event before-parameter-build.s3.CreateMultipartUpload: calling handler <function validate_ascii_metadata at 0x7fbe830639a0>
2026-04-29 15:32:33,609 - ThreadPoolExecutor-0_0 - botocore.hooks - DEBUG - Event before-parameter-build.s3.CreateMultipartUpload: calling handler <function sse_md5 at 0x7fbe83062dd0>
2026-04-29 15:32:33,609 - ThreadPoolExecutor-0_0 - botocore.hooks - DEBUG - Event before-parameter-build.s3.CreateMultipartUpload: calling handler <function validate_bucket_name at 0x7fbe83062d40>
2026-04-29 15:32:33,609 - ThreadPoolExecutor-0_0 - botocore.hooks - DEBUG - Event before-parameter-build.s3.CreateMultipartUpload: calling handler <bound method S3RegionRedirector.redirect_from_cache of <botocore.utils.S3RegionRedirector object at 0x7fbe8201eb60>>
2026-04-29 15:32:33,609 - ThreadPoolExecutor-0_0 - botocore.hooks - DEBUG - Event before-parameter-build.s3.CreateMultipartUpload: calling handler <bound method S3ArnParamHandler.handle_arn of <botocore.utils.S3ArnParamHandler object at 0x7fbe8201eb30>>
2026-04-29 15:32:33,610 - ThreadPoolExecutor-0_0 - botocore.hooks - DEBUG - Event before-parameter-build.s3.CreateMultipartUpload: calling handler <function generate_idempotent_uuid at 0x7fbe83062b90>
2026-04-29 15:32:33,610 - ThreadPoolExecutor-0_0 - botocore.hooks - DEBUG - Event before-call.s3.CreateMultipartUpload: calling handler <function add_expect_header at 0x7fbe830630a0>
2026-04-29 15:32:33,610 - ThreadPoolExecutor-0_0 - botocore.hooks - DEBUG - Event before-call.s3.CreateMultipartUpload: calling handler <bound method S3RegionRedirector.set_request_url of <botocore.utils.S3RegionRedirector object at 0x7fbe8201eb60>>
2026-04-29 15:32:33,610 - ThreadPoolExecutor-0_0 - botocore.hooks - DEBUG - Event before-call.s3.CreateMultipartUpload: calling handler <function inject_api_version_header_if_needed at 0x7fbe83070430>
2026-04-29 15:32:33,610 - ThreadPoolExecutor-0_0 - botocore.endpoint - DEBUG - Making request for OperationModel(name=CreateMultipartUpload) with params: {'url_path': '/test-bucket/test.txt?uploads', 'query_string': {}, 'method': 'POST', 'headers': {'Content-Type': 'text/plain', 'User-Agent': 'aws-cli/1.22.34 Python/3.10.12 Linux/5.15.0-173-generic botocore/1.23.34'}, 'body': b'', 'url': 'http://10.159.7.105/test-bucket/test.txt?uploads', 'context': {'client_region': 'east-us', 'client_config': <botocore.config.Config object at 0x7fbe8201e050>, 'has_streaming_input': False, 'auth_type': None, 'signing': {'bucket': 'test-bucket'}}}
2026-04-29 15:32:33,610 - ThreadPoolExecutor-0_0 - botocore.hooks - DEBUG - Event request-created.s3.CreateMultipartUpload: calling handler <function signal_not_transferring at 0x7fbe8280a5f0>
2026-04-29 15:32:33,610 - ThreadPoolExecutor-0_0 - botocore.hooks - DEBUG - Event request-created.s3.CreateMultipartUpload: calling handler <bound method RequestSigner.handler of <botocore.signers.RequestSigner object at 0x7fbe8201dfc0>>
2026-04-29 15:32:33,611 - ThreadPoolExecutor-0_0 - botocore.hooks - DEBUG - Event choose-signer.s3.CreateMultipartUpload: calling handler <bound method S3EndpointSetter.set_signer of <botocore.utils.S3EndpointSetter object at 0x7fbe8201ec50>>
2026-04-29 15:32:33,611 - ThreadPoolExecutor-0_0 - botocore.hooks - DEBUG - Event choose-signer.s3.CreateMultipartUpload: calling handler <function set_operation_specific_signer at 0x7fbe83062a70>
2026-04-29 15:32:33,611 - ThreadPoolExecutor-0_0 - botocore.hooks - DEBUG - Event before-sign.s3.CreateMultipartUpload: calling handler <bound method S3EndpointSetter.set_endpoint of <botocore.utils.S3EndpointSetter object at 0x7fbe8201ec50>>
2026-04-29 15:32:33,611 - ThreadPoolExecutor-0_0 - botocore.utils - DEBUG - Using S3 path style addressing.
2026-04-29 15:32:33,611 - ThreadPoolExecutor-0_0 - botocore.auth - DEBUG - Calculating signature using v4 auth.
2026-04-29 15:32:33,611 - ThreadPoolExecutor-0_0 - botocore.auth - DEBUG - CanonicalRequest:
POST
/test-bucket/test.txt
uploads=
content-type:text/plain
host:10.159.7.105
x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
x-amz-date:20260429T153233Z

content-type;host;x-amz-content-sha256;x-amz-date
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
2026-04-29 15:32:33,612 - ThreadPoolExecutor-0_0 - botocore.auth - DEBUG - StringToSign:
AWS4-HMAC-SHA256
20260429T153233Z
20260429/east-us/s3/aws4_request
61e035333c5fd07f8b01fcf0009ed55e452211cb4bce06caa0b9492c6668d1da
2026-04-29 15:32:33,612 - ThreadPoolExecutor-0_0 - botocore.auth - DEBUG - Signature:
ec2a04eb73a9adb5aa81704edc5a1134d10939fa468ccfc7b1d788a71a06d835
2026-04-29 15:32:33,612 - ThreadPoolExecutor-0_0 - botocore.hooks - DEBUG - Event request-created.s3.CreateMultipartUpload: calling handler <function signal_transferring at 0x7fbe8280a680>
2026-04-29 15:32:33,612 - ThreadPoolExecutor-0_0 - botocore.endpoint - DEBUG - Sending http request: <AWSPreparedRequest stream_output=False, method=POST, url=http://10.159.7.105/test-bucket/test.txt?uploads, headers={'Content-Type': b'text/plain', 'User-Agent': b'aws-cli/1.22.34 Python/3.10.12 Linux/5.15.0-173-generic botocore/1.23.34', 'X-Amz-Date': b'20260429T153233Z', 'X-Amz-Content-SHA256': b'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', 'Authorization': b'AWS4-HMAC-SHA256 Credential=ZWM24KYHXVEZ95Y9CWDA/20260429/east-us/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=ec2a04eb73a9adb5aa81704edc5a1134d10939fa468ccfc7b1d788a71a06d835', 'Content-Length': '0'}>
2026-04-29 15:32:33,613 - ThreadPoolExecutor-0_0 - urllib3.connectionpool - DEBUG - Starting new HTTP connection (1): 10.159.7.105:80
2026-04-29 15:32:33,612 - ThreadPoolExecutor-0_1 - s3transfer.tasks - DEBUG - UploadPartTask(transfer_id=0, {'bucket': 'test-bucket', 'key': 'test.txt', 'part_number': 1, 'extra_args': {}}) about to wait for the following futures [<s3transfer.futures.ExecutorFuture object at 0x7fbe820836a0>]
2026-04-29 15:32:33,612 - ThreadPoolExecutor-1_0 - s3transfer.futures - DEBUG - Submitting task UploadPartTask(transfer_id=0, {'bucket': 'test-bucket', 'key': 'test.txt', 'part_number': 2, 'extra_args': {}}) to executor <s3transfer.futures.BoundedExecutor object at 0x7fbe82081930> for transfer request: 0.
2026-04-29 15:32:33,614 - ThreadPoolExecutor-1_0 - s3transfer.utils - DEBUG - Acquiring 0
2026-04-29 15:32:33,614 - ThreadPoolExecutor-0_1 - s3transfer.tasks - DEBUG - UploadPartTask(transfer_id=0, {'bucket': 'test-bucket', 'key': 'test.txt', 'part_number': 1, 'extra_args': {}}) about to wait for <s3transfer.futures.ExecutorFuture object at 0x7fbe820836a0>
2026-04-29 15:32:33,614 - ThreadPoolExecutor-0_2 - s3transfer.tasks - DEBUG - UploadPartTask(transfer_id=0, {'bucket': 'test-bucket', 'key': 'test.txt', 'part_number': 2, 'extra_args': {}}) about to wait for the following futures [<s3transfer.futures.ExecutorFuture object at 0x7fbe820836a0>]
2026-04-29 15:32:33,615 - ThreadPoolExecutor-1_0 - s3transfer.futures - DEBUG - Submitting task CompleteMultipartUploadTask(transfer_id=0, {'bucket': 'test-bucket', 'key': 'test.txt', 'extra_args': {}}) to executor <s3transfer.futures.BoundedExecutor object at 0x7fbe82081930> for transfer request: 0.
2026-04-29 15:32:33,615 - ThreadPoolExecutor-1_0 - s3transfer.utils - DEBUG - Acquiring 0
2026-04-29 15:32:33,615 - ThreadPoolExecutor-0_2 - s3transfer.tasks - DEBUG - UploadPartTask(transfer_id=0, {'bucket': 'test-bucket', 'key': 'test.txt', 'part_number': 2, 'extra_args': {}}) about to wait for <s3transfer.futures.ExecutorFuture object at 0x7fbe820836a0>
2026-04-29 15:32:33,615 - ThreadPoolExecutor-0_3 - s3transfer.tasks - DEBUG - CompleteMultipartUploadTask(transfer_id=0, {'bucket': 'test-bucket', 'key': 'test.txt', 'extra_args': {}}) about to wait for the following futures [<s3transfer.futures.ExecutorFuture object at 0x7fbe820836a0>, <s3transfer.futures.ExecutorFuture object at 0x7fbe81f44a00>, <s3transfer.futures.ExecutorFuture object at 0x7fbe81f45570>]
2026-04-29 15:32:33,615 - ThreadPoolExecutor-1_0 - s3transfer.utils - DEBUG - Releasing acquire 0/None
2026-04-29 15:32:33,615 - ThreadPoolExecutor-0_3 - s3transfer.tasks - DEBUG - CompleteMultipartUploadTask(transfer_id=0, {'bucket': 'test-bucket', 'key': 'test.txt', 'extra_args': {}}) about to wait for <s3transfer.futures.ExecutorFuture object at 0x7fbe820836a0>
2026-04-29 15:32:33,684 - ThreadPoolExecutor-0_0 - urllib3.connectionpool - DEBUG - http://10.159.7.105:80 "POST /test-bucket/test.txt?uploads HTTP/1.1" 200 250
2026-04-29 15:32:33,684 - ThreadPoolExecutor-0_0 - botocore.parsers - DEBUG - Response headers: {'x-amz-request-id': 'tx00000949dc85ab324df4a-0069f22491-1436-default', 'Content-Type': 'application/xml', 'Content-Length': '250', 'Date': 'Wed, 29 Apr 2026 15:32:33 GMT', 'Connection': 'Keep-Alive'}
2026-04-29 15:32:33,684 - ThreadPoolExecutor-0_0 - botocore.parsers - DEBUG - Response body:
b'<?xml version="1.0" encoding="UTF-8"?><InitiateMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Bucket>test-bucket</Bucket><Key>test.txt</Key><UploadId>2~IfZlkr2uGnFZSvzCk8w0GN_koArWtB3</UploadId></InitiateMultipartUploadResult>'
2026-04-29 15:32:33,685 - ThreadPoolExecutor-0_0 - botocore.hooks - DEBUG - Event needs-retry.s3.CreateMultipartUpload: calling handler <botocore.retryhandler.RetryHandler object at 0x7fbe8201eaa0>
2026-04-29 15:32:33,685 - ThreadPoolExecutor-0_0 - botocore.retryhandler - DEBUG - No retry needed.
2026-04-29 15:32:33,685 - ThreadPoolExecutor-0_0 - botocore.hooks - DEBUG - Event needs-retry.s3.CreateMultipartUpload: calling handler <bound method S3RegionRedirector.redirect_from_error of <botocore.utils.S3RegionRedirector object at 0x7fbe8201eb60>>
2026-04-29 15:32:33,685 - ThreadPoolExecutor-0_0 - botocore.hooks - DEBUG - Event after-call.s3.CreateMultipartUpload: calling handler <function enhance_error_msg at 0x7fbe826caf80>
2026-04-29 15:32:33,685 - ThreadPoolExecutor-0_0 - s3transfer.utils - DEBUG - Releasing acquire 0/None
2026-04-29 15:32:33,685 - ThreadPoolExecutor-0_1 - s3transfer.tasks - DEBUG - UploadPartTask(transfer_id=0, {'bucket': 'test-bucket', 'key': 'test.txt', 'part_number': 1, 'extra_args': {}}) done waiting for dependent futures
2026-04-29 15:32:33,685 - ThreadPoolExecutor-0_1 - s3transfer.tasks - DEBUG - Executing task UploadPartTask(transfer_id=0, {'bucket': 'test-bucket', 'key': 'test.txt', 'part_number': 1, 'extra_args': {}}) with kwargs {'client': <botocore.client.S3 object at 0x7fbe8201ded0>, 'fileobj': <s3transfer.utils.ReadFileChunk object at 0x7fbe820839a0>, 'bucket': 'test-bucket', 'key': 'test.txt', 'part_number': 1, 'extra_args': {}, 'upload_id': '2~IfZlkr2uGnFZSvzCk8w0GN_koArWtB3'}
2026-04-29 15:32:33,686 - ThreadPoolExecutor-0_1 - botocore.hooks - DEBUG - Event before-parameter-build.s3.UploadPart: calling handler <function sse_md5 at 0x7fbe83062dd0>
2026-04-29 15:32:33,686 - ThreadPoolExecutor-0_1 - botocore.hooks - DEBUG - Event before-parameter-build.s3.UploadPart: calling handler <function convert_body_to_file_like_object at 0x7fbe83070310>
2026-04-29 15:32:33,686 - ThreadPoolExecutor-0_1 - botocore.hooks - DEBUG - Event before-parameter-build.s3.UploadPart: calling handler <function validate_bucket_name at 0x7fbe83062d40>
2026-04-29 15:32:33,686 - ThreadPoolExecutor-0_1 - botocore.hooks - DEBUG - Event before-parameter-build.s3.UploadPart: calling handler <bound method S3RegionRedirector.redirect_from_cache of <botocore.utils.S3RegionRedirector object at 0x7fbe8201eb60>>
2026-04-29 15:32:33,686 - ThreadPoolExecutor-0_1 - botocore.hooks - DEBUG - Event before-parameter-build.s3.UploadPart: calling handler <bound method S3ArnParamHandler.handle_arn of <botocore.utils.S3ArnParamHandler object at 0x7fbe8201eb30>>
2026-04-29 15:32:33,686 - ThreadPoolExecutor-0_1 - botocore.hooks - DEBUG - Event before-parameter-build.s3.UploadPart: calling handler <function generate_idempotent_uuid at 0x7fbe83062b90>
2026-04-29 15:32:33,686 - ThreadPoolExecutor-0_1 - botocore.hooks - DEBUG - Event before-call.s3.UploadPart: calling handler <function conditionally_calculate_md5 at 0x7fbe830e0700>
2026-04-29 15:32:33,685 - ThreadPoolExecutor-0_2 - s3transfer.tasks - DEBUG - UploadPartTask(transfer_id=0, {'bucket': 'test-bucket', 'key': 'test.txt', 'part_number': 2, 'extra_args': {}}) done waiting for dependent futures
2026-04-29 15:32:33,690 - ThreadPoolExecutor-0_2 - s3transfer.tasks - DEBUG - Executing task UploadPartTask(transfer_id=0, {'bucket': 'test-bucket', 'key': 'test.txt', 'part_number': 2, 'extra_args': {}}) with kwargs {'client': <botocore.client.S3 object at 0x7fbe8201ded0>, 'fileobj': <s3transfer.utils.ReadFileChunk object at 0x7fbe81f44c70>, 'bucket': 'test-bucket', 'key': 'test.txt', 'part_number': 2, 'extra_args': {}, 'upload_id': '2~IfZlkr2uGnFZSvzCk8w0GN_koArWtB3'}
2026-04-29 15:32:33,690 - ThreadPoolExecutor-0_2 - botocore.hooks - DEBUG - Event before-parameter-build.s3.UploadPart: calling handler <function sse_md5 at 0x7fbe83062dd0>
2026-04-29 15:32:33,690 - ThreadPoolExecutor-0_2 - botocore.hooks - DEBUG - Event before-parameter-build.s3.UploadPart: calling handler <function convert_body_to_file_like_object at 0x7fbe83070310>
2026-04-29 15:32:33,690 - ThreadPoolExecutor-0_2 - botocore.hooks - DEBUG - Event before-parameter-build.s3.UploadPart: calling handler <function validate_bucket_name at 0x7fbe83062d40>
2026-04-29 15:32:33,690 - ThreadPoolExecutor-0_2 - botocore.hooks - DEBUG - Event before-parameter-build.s3.UploadPart: calling handler <bound method S3RegionRedirector.redirect_from_cache of <botocore.utils.S3RegionRedirector object at 0x7fbe8201eb60>>
2026-04-29 15:32:33,690 - ThreadPoolExecutor-0_2 - botocore.hooks - DEBUG - Event before-parameter-build.s3.UploadPart: calling handler <bound method S3ArnParamHandler.handle_arn of <botocore.utils.S3ArnParamHandler object at 0x7fbe8201eb30>>
2026-04-29 15:32:33,691 - ThreadPoolExecutor-0_2 - botocore.hooks - DEBUG - Event before-parameter-build.s3.UploadPart: calling handler <function generate_idempotent_uuid at 0x7fbe83062b90>
2026-04-29 15:32:33,691 - ThreadPoolExecutor-0_2 - botocore.hooks - DEBUG - Event before-call.s3.UploadPart: calling handler <function conditionally_calculate_md5 at 0x7fbe830e0700>
2026-04-29 15:32:33,694 - ThreadPoolExecutor-0_3 - s3transfer.tasks - DEBUG - CompleteMultipartUploadTask(transfer_id=0, {'bucket': 'test-bucket', 'key': 'test.txt', 'extra_args': {}}) about to wait for <s3transfer.futures.ExecutorFuture object at 0x7fbe81f44a00>
2026-04-29 15:32:33,698 - ThreadPoolExecutor-0_2 - botocore.hooks - DEBUG - Event before-call.s3.UploadPart: calling handler <function add_expect_header at 0x7fbe830630a0>
2026-04-29 15:32:33,698 - ThreadPoolExecutor-0_2 - botocore.handlers - DEBUG - Adding expect 100 continue header to request.
2026-04-29 15:32:33,698 - ThreadPoolExecutor-0_2 - botocore.hooks - DEBUG - Event before-call.s3.UploadPart: calling handler <bound method S3RegionRedirector.set_request_url of <botocore.utils.S3RegionRedirector object at 0x7fbe8201eb60>>
2026-04-29 15:32:33,698 - ThreadPoolExecutor-0_2 - botocore.hooks - DEBUG - Event before-call.s3.UploadPart: calling handler <function inject_api_version_header_if_needed at 0x7fbe83070430>
2026-04-29 15:32:33,698 - ThreadPoolExecutor-0_2 - botocore.endpoint - DEBUG - Making request for OperationModel(name=UploadPart) with params: {'url_path': '/test-bucket/test.txt', 'query_string': {'uploadId': '2~IfZlkr2uGnFZSvzCk8w0GN_koArWtB3', 'partNumber': 2}, 'method': 'PUT', 'headers': {'User-Agent': 'aws-cli/1.22.34 Python/3.10.12 Linux/5.15.0-173-generic botocore/1.23.34', 'Content-MD5': 'mqRjMkiuIslnvhOUEvp9lQ==', 'Expect': '100-continue'}, 'body': <s3transfer.utils.ReadFileChunk object at 0x7fbe81f44c70>, 'url': 'http://10.159.7.105/test-bucket/test.txt?uploadId=2~IfZlkr2uGnFZSvzCk8w0GN_koArWtB3&partNumber=2', 'context': {'client_region': 'east-us', 'client_config': <botocore.config.Config object at 0x7fbe8201e050>, 'has_streaming_input': True, 'auth_type': None, 'signing': {'bucket': 'test-bucket'}}}
2026-04-29 15:32:33,699 - ThreadPoolExecutor-0_2 - botocore.hooks - DEBUG - Event request-created.s3.UploadPart: calling handler <function signal_not_transferring at 0x7fbe8280a5f0>
2026-04-29 15:32:33,699 - ThreadPoolExecutor-0_2 - botocore.hooks - DEBUG - Event request-created.s3.UploadPart: calling handler <bound method RequestSigner.handler of <botocore.signers.RequestSigner object at 0x7fbe8201dfc0>>
2026-04-29 15:32:33,699 - ThreadPoolExecutor-0_2 - botocore.hooks - DEBUG - Event choose-signer.s3.UploadPart: calling handler <bound method S3EndpointSetter.set_signer of <botocore.utils.S3EndpointSetter object at 0x7fbe8201ec50>>
2026-04-29 15:32:33,699 - ThreadPoolExecutor-0_2 - botocore.hooks - DEBUG - Event choose-signer.s3.UploadPart: calling handler <function set_operation_specific_signer at 0x7fbe83062a70>
2026-04-29 15:32:33,699 - ThreadPoolExecutor-0_2 - botocore.hooks - DEBUG - Event before-sign.s3.UploadPart: calling handler <bound method S3EndpointSetter.set_endpoint of <botocore.utils.S3EndpointSetter object at 0x7fbe8201ec50>>
2026-04-29 15:32:33,701 - ThreadPoolExecutor-0_2 - botocore.auth - DEBUG - Calculating signature using v4 auth.
2026-04-29 15:32:33,701 - ThreadPoolExecutor-0_2 - botocore.auth - DEBUG - CanonicalRequest:
PUT
/test-bucket/test.txt
partNumber=2&uploadId=2~IfZlkr2uGnFZSvzCk8w0GN_koArWtB3
content-md5:mqRjMkiuIslnvhOUEvp9lQ==
host:10.159.7.105
x-amz-content-sha256:0df1be5550bce2ae3c2c659a69bd6670f0737ae40eada7e7f1a23f685606788a
x-amz-date:20260429T153233Z

content-md5;host;x-amz-content-sha256;x-amz-date
0df1be5550bce2ae3c2c659a69bd6670f0737ae40eada7e7f1a23f685606788a
2026-04-29 15:32:33,701 - ThreadPoolExecutor-0_2 - botocore.auth - DEBUG - StringToSign:
AWS4-HMAC-SHA256
20260429T153233Z
20260429/east-us/s3/aws4_request
a96aa28131732e2d68a9ff5b295ef293c87149d1b5eb7a036d3e13183f6701ec
2026-04-29 15:32:33,702 - ThreadPoolExecutor-0_2 - botocore.auth - DEBUG - Signature:
8a539013c96b92b59028a0b8f94269d842e8a2e8f889fe5fa41af19863efd2c9
2026-04-29 15:32:33,702 - ThreadPoolExecutor-0_2 - botocore.hooks - DEBUG - Event request-created.s3.UploadPart: calling handler <function signal_transferring at 0x7fbe8280a680>
2026-04-29 15:32:33,706 - ThreadPoolExecutor-0_2 - botocore.endpoint - DEBUG - Sending http request: <AWSPreparedRequest stream_output=False, method=PUT, url=http://10.159.7.105/test-bucket/test.txt?uploadId=2~IfZlkr2uGnFZSvzCk8w0GN_koArWtB3&partNumber=2, headers={'User-Agent': b'aws-cli/1.22.34 Python/3.10.12 Linux/5.15.0-173-generic botocore/1.23.34', 'Content-MD5': b'mqRjMkiuIslnvhOUEvp9lQ==', 'Expect': b'100-continue', 'X-Amz-Date': b'20260429T153233Z', 'X-Amz-Content-SHA256': b'0df1be5550bce2ae3c2c659a69bd6670f0737ae40eada7e7f1a23f685606788a', 'Authorization': b'AWS4-HMAC-SHA256 Credential=ZWM24KYHXVEZ95Y9CWDA/20260429/east-us/s3/aws4_request, SignedHeaders=content-md5;host;x-amz-content-sha256;x-amz-date, Signature=8a539013c96b92b59028a0b8f94269d842e8a2e8f889fe5fa41af19863efd2c9', 'Content-Length': '2097152'}>
2026-04-29 15:32:33,707 - ThreadPoolExecutor-0_2 - botocore.awsrequest - DEBUG - Waiting for 100 Continue response.
2026-04-29 15:32:33,708 - ThreadPoolExecutor-0_1 - botocore.hooks - DEBUG - Event before-call.s3.UploadPart: calling handler <function add_expect_header at 0x7fbe830630a0>
2026-04-29 15:32:33,709 - ThreadPoolExecutor-0_1 - botocore.handlers - DEBUG - Adding expect 100 continue header to request.
2026-04-29 15:32:33,709 - ThreadPoolExecutor-0_1 - botocore.hooks - DEBUG - Event before-call.s3.UploadPart: calling handler <bound method S3RegionRedirector.set_request_url of <botocore.utils.S3RegionRedirector object at 0x7fbe8201eb60>>
2026-04-29 15:32:33,709 - ThreadPoolExecutor-0_1 - botocore.hooks - DEBUG - Event before-call.s3.UploadPart: calling handler <function inject_api_version_header_if_needed at 0x7fbe83070430>
2026-04-29 15:32:33,709 - ThreadPoolExecutor-0_1 - botocore.endpoint - DEBUG - Making request for OperationModel(name=UploadPart) with params: {'url_path': '/test-bucket/test.txt', 'query_string': {'uploadId': '2~IfZlkr2uGnFZSvzCk8w0GN_koArWtB3', 'partNumber': 1}, 'method': 'PUT', 'headers': {'User-Agent': 'aws-cli/1.22.34 Python/3.10.12 Linux/5.15.0-173-generic botocore/1.23.34', 'Content-MD5': 'GJwH6rHllP4gT+lbzoBlUQ==', 'Expect': '100-continue'}, 'body': <s3transfer.utils.ReadFileChunk object at 0x7fbe820839a0>, 'url': 'http://10.159.7.105/test-bucket/test.txt?uploadId=2~IfZlkr2uGnFZSvzCk8w0GN_koArWtB3&partNumber=1', 'context': {'client_region': 'east-us', 'client_config': <botocore.config.Config object at 0x7fbe8201e050>, 'has_streaming_input': True, 'auth_type': None, 'signing': {'bucket': 'test-bucket'}}}
2026-04-29 15:32:33,709 - ThreadPoolExecutor-0_1 - botocore.hooks - DEBUG - Event request-created.s3.UploadPart: calling handler <function signal_not_transferring at 0x7fbe8280a5f0>
2026-04-29 15:32:33,709 - ThreadPoolExecutor-0_1 - botocore.hooks - DEBUG - Event request-created.s3.UploadPart: calling handler <bound method RequestSigner.handler of <botocore.signers.RequestSigner object at 0x7fbe8201dfc0>>
2026-04-29 15:32:33,709 - ThreadPoolExecutor-0_1 - botocore.hooks - DEBUG - Event choose-signer.s3.UploadPart: calling handler <bound method S3EndpointSetter.set_signer of <botocore.utils.S3EndpointSetter object at 0x7fbe8201ec50>>
2026-04-29 15:32:33,709 - ThreadPoolExecutor-0_1 - botocore.hooks - DEBUG - Event choose-signer.s3.UploadPart: calling handler <function set_operation_specific_signer at 0x7fbe83062a70>
2026-04-29 15:32:33,709 - ThreadPoolExecutor-0_1 - botocore.hooks - DEBUG - Event before-sign.s3.UploadPart: calling handler <bound method S3EndpointSetter.set_endpoint of <botocore.utils.S3EndpointSetter object at 0x7fbe8201ec50>>
2026-04-29 15:32:33,715 - ThreadPoolExecutor-0_1 - botocore.auth - DEBUG - Calculating signature using v4 auth.
2026-04-29 15:32:33,716 - ThreadPoolExecutor-0_1 - botocore.auth - DEBUG - CanonicalRequest:
PUT
/test-bucket/test.txt
partNumber=1&uploadId=2~IfZlkr2uGnFZSvzCk8w0GN_koArWtB3
content-md5:GJwH6rHllP4gT+lbzoBlUQ==
host:10.159.7.105
x-amz-content-sha256:8fe13fc655e4de7f8e6f01dc033ce0e898a002b29963fa6ed4cc27f770836435
x-amz-date:20260429T153233Z

content-md5;host;x-amz-content-sha256;x-amz-date
8fe13fc655e4de7f8e6f01dc033ce0e898a002b29963fa6ed4cc27f770836435
2026-04-29 15:32:33,716 - ThreadPoolExecutor-0_1 - botocore.auth - DEBUG - StringToSign:
AWS4-HMAC-SHA256
20260429T153233Z
20260429/east-us/s3/aws4_request
05d21ff864e9cfc77b1337659265f44f932c9c2d3e187746d591e9f304e83471
2026-04-29 15:32:33,716 - ThreadPoolExecutor-0_1 - botocore.auth - DEBUG - Signature:
5a47c0c68d2aee0491098ec35c5d51dbf499f98b265e3f64c4be8d5a3450a7cd
2026-04-29 15:32:33,716 - ThreadPoolExecutor-0_1 - botocore.hooks - DEBUG - Event request-created.s3.UploadPart: calling handler <function signal_transferring at 0x7fbe8280a680>
2026-04-29 15:32:33,717 - ThreadPoolExecutor-0_1 - botocore.endpoint - DEBUG - Sending http request: <AWSPreparedRequest stream_output=False, method=PUT, url=http://10.159.7.105/test-bucket/test.txt?uploadId=2~IfZlkr2uGnFZSvzCk8w0GN_koArWtB3&partNumber=1, headers={'User-Agent': b'aws-cli/1.22.34 Python/3.10.12 Linux/5.15.0-173-generic botocore/1.23.34', 'Content-MD5': b'GJwH6rHllP4gT+lbzoBlUQ==', 'Expect': b'100-continue', 'X-Amz-Date': b'20260429T153233Z', 'X-Amz-Content-SHA256': b'8fe13fc655e4de7f8e6f01dc033ce0e898a002b29963fa6ed4cc27f770836435', 'Authorization': b'AWS4-HMAC-SHA256 Credential=ZWM24KYHXVEZ95Y9CWDA/20260429/east-us/s3/aws4_request, SignedHeaders=content-md5;host;x-amz-content-sha256;x-amz-date, Signature=5a47c0c68d2aee0491098ec35c5d51dbf499f98b265e3f64c4be8d5a3450a7cd', 'Content-Length': '8388608'}>
2026-04-29 15:32:33,717 - ThreadPoolExecutor-0_1 - urllib3.connectionpool - DEBUG - Starting new HTTP connection (2): 10.159.7.105:80
2026-04-29 15:32:33,718 - ThreadPoolExecutor-0_1 - botocore.awsrequest - DEBUG - Waiting for 100 Continue response.
2026-04-29 15:32:33,722 - ThreadPoolExecutor-0_2 - botocore.awsrequest - DEBUG - 100 Continue response seen, now sending request body.
2026-04-29 15:32:33,737 - ThreadPoolExecutor-0_1 - botocore.awsrequest - DEBUG - 100 Continue response seen, now sending request body.
2026-04-29 15:32:33,849 - ThreadPoolExecutor-0_2 - urllib3.connectionpool - DEBUG - http://10.159.7.105:80 "PUT /test-bucket/test.txt?uploadId=2~IfZlkr2uGnFZSvzCk8w0GN_koArWtB3&partNumber=2 HTTP/1.1" 200 0
2026-04-29 15:32:33,850 - ThreadPoolExecutor-0_2 - botocore.parsers - DEBUG - Response headers: {'Content-Length': '0', 'ETag': '"9aa4633248ae22c967be139412fa7d95"', 'Accept-Ranges': 'bytes', 'x-amz-request-id': 'tx000008d2ffde25ecca756-0069f22491-1436-default', 'Date': 'Wed, 29 Apr 2026 15:32:33 GMT', 'Connection': 'Keep-Alive'}
2026-04-29 15:32:33,850 - ThreadPoolExecutor-0_2 - botocore.parsers - DEBUG - Response body:
b''
2026-04-29 15:32:33,850 - ThreadPoolExecutor-0_2 - botocore.hooks - DEBUG - Event needs-retry.s3.UploadPart: calling handler <botocore.retryhandler.RetryHandler object at 0x7fbe8201eaa0>
2026-04-29 15:32:33,850 - ThreadPoolExecutor-0_2 - botocore.retryhandler - DEBUG - No retry needed.
2026-04-29 15:32:33,850 - ThreadPoolExecutor-0_2 - botocore.hooks - DEBUG - Event needs-retry.s3.UploadPart: calling handler <bound method S3RegionRedirector.redirect_from_error of <botocore.utils.S3RegionRedirector object at 0x7fbe8201eb60>>
2026-04-29 15:32:33,850 - ThreadPoolExecutor-0_2 - botocore.hooks - DEBUG - Event after-call.s3.UploadPart: calling handler <function enhance_error_msg at 0x7fbe826caf80>
2026-04-29 15:32:33,850 - ThreadPoolExecutor-0_2 - s3transfer.utils - DEBUG - Releasing acquire 0/None
2026-04-29 15:32:33,874 - ThreadPoolExecutor-0_1 - urllib3.connectionpool - DEBUG - http://10.159.7.105:80 "PUT /test-bucket/test.txt?uploadId=2~IfZlkr2uGnFZSvzCk8w0GN_koArWtB3&partNumber=1 HTTP/1.1" 200 0
2026-04-29 15:32:33,874 - ThreadPoolExecutor-0_1 - botocore.parsers - DEBUG - Response headers: {'Content-Length': '0', 'ETag': '"189c07eab1e594fe204fe95bce806551"', 'Accept-Ranges': 'bytes', 'x-amz-request-id': 'tx0000016c99b0fc0a05ba6-0069f22491-1436-default', 'Date': 'Wed, 29 Apr 2026 15:32:33 GMT', 'Connection': 'Keep-Alive'}
2026-04-29 15:32:33,874 - ThreadPoolExecutor-0_1 - botocore.parsers - DEBUG - Response body:
b''
2026-04-29 15:32:33,874 - ThreadPoolExecutor-0_1 - botocore.hooks - DEBUG - Event needs-retry.s3.UploadPart: calling handler <botocore.retryhandler.RetryHandler object at 0x7fbe8201eaa0>
2026-04-29 15:32:33,875 - ThreadPoolExecutor-0_1 - botocore.retryhandler - DEBUG - No retry needed.
2026-04-29 15:32:33,875 - ThreadPoolExecutor-0_1 - botocore.hooks - DEBUG - Event needs-retry.s3.UploadPart: calling handler <bound method S3RegionRedirector.redirect_from_error of <botocore.utils.S3RegionRedirector object at 0x7fbe8201eb60>>
2026-04-29 15:32:33,875 - ThreadPoolExecutor-0_1 - botocore.hooks - DEBUG - Event after-call.s3.UploadPart: calling handler <function enhance_error_msg at 0x7fbe826caf80>
2026-04-29 15:32:33,875 - ThreadPoolExecutor-0_1 - s3transfer.utils - DEBUG - Releasing acquire 0/None
2026-04-29 15:32:33,875 - ThreadPoolExecutor-0_3 - s3transfer.tasks - DEBUG - CompleteMultipartUploadTask(transfer_id=0, {'bucket': 'test-bucket', 'key': 'test.txt', 'extra_args': {}}) about to wait for <s3transfer.futures.ExecutorFuture object at 0x7fbe81f45570>
2026-04-29 15:32:33,875 - ThreadPoolExecutor-0_3 - s3transfer.tasks - DEBUG - CompleteMultipartUploadTask(transfer_id=0, {'bucket': 'test-bucket', 'key': 'test.txt', 'extra_args': {}}) done waiting for dependent futures
2026-04-29 15:32:33,875 - ThreadPoolExecutor-0_3 - s3transfer.tasks - DEBUG - Executing task CompleteMultipartUploadTask(transfer_id=0, {'bucket': 'test-bucket', 'key': 'test.txt', 'extra_args': {}}) with kwargs {'client': <botocore.client.S3 object at 0x7fbe8201ded0>, 'bucket': 'test-bucket', 'key': 'test.txt', 'extra_args': {}, 'upload_id': '2~IfZlkr2uGnFZSvzCk8w0GN_koArWtB3', 'parts': [{'ETag': '"189c07eab1e594fe204fe95bce806551"', 'PartNumber': 1}, {'ETag': '"9aa4633248ae22c967be139412fa7d95"', 'PartNumber': 2}]}
2026-04-29 15:32:33,875 - ThreadPoolExecutor-0_3 - botocore.hooks - DEBUG - Event before-parameter-build.s3.CompleteMultipartUpload: calling handler <function validate_bucket_name at 0x7fbe83062d40>
2026-04-29 15:32:33,875 - ThreadPoolExecutor-0_3 - botocore.hooks - DEBUG - Event before-parameter-build.s3.CompleteMultipartUpload: calling handler <bound method S3RegionRedirector.redirect_from_cache of <botocore.utils.S3RegionRedirector object at 0x7fbe8201eb60>>
2026-04-29 15:32:33,875 - ThreadPoolExecutor-0_3 - botocore.hooks - DEBUG - Event before-parameter-build.s3.CompleteMultipartUpload: calling handler <bound method S3ArnParamHandler.handle_arn of <botocore.utils.S3ArnParamHandler object at 0x7fbe8201eb30>>
2026-04-29 15:32:33,876 - ThreadPoolExecutor-0_3 - botocore.hooks - DEBUG - Event before-parameter-build.s3.CompleteMultipartUpload: calling handler <function generate_idempotent_uuid at 0x7fbe83062b90>
2026-04-29 15:32:33,876 - ThreadPoolExecutor-0_3 - botocore.hooks - DEBUG - Event before-call.s3.CompleteMultipartUpload: calling handler <function add_expect_header at 0x7fbe830630a0>
2026-04-29 15:32:33,876 - ThreadPoolExecutor-0_3 - botocore.hooks - DEBUG - Event before-call.s3.CompleteMultipartUpload: calling handler <bound method S3RegionRedirector.set_request_url of <botocore.utils.S3RegionRedirector object at 0x7fbe8201eb60>>
2026-04-29 15:32:33,876 - ThreadPoolExecutor-0_3 - botocore.hooks - DEBUG - Event before-call.s3.CompleteMultipartUpload: calling handler <function inject_api_version_header_if_needed at 0x7fbe83070430>
2026-04-29 15:32:33,876 - ThreadPoolExecutor-0_3 - botocore.endpoint - DEBUG - Making request for OperationModel(name=CompleteMultipartUpload) with params: {'url_path': '/test-bucket/test.txt', 'query_string': {'uploadId': '2~IfZlkr2uGnFZSvzCk8w0GN_koArWtB3'}, 'method': 'POST', 'headers': {'User-Agent': 'aws-cli/1.22.34 Python/3.10.12 Linux/5.15.0-173-generic botocore/1.23.34'}, 'body': b'<CompleteMultipartUpload xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Part><ETag>"189c07eab1e594fe204fe95bce806551"</ETag><PartNumber>1</PartNumber></Part><Part><ETag>"9aa4633248ae22c967be139412fa7d95"</ETag><PartNumber>2</PartNumber></Part></CompleteMultipartUpload>', 'url': 'http://10.159.7.105/test-bucket/test.txt?uploadId=2~IfZlkr2uGnFZSvzCk8w0GN_koArWtB3', 'context': {'client_region': 'east-us', 'client_config': <botocore.config.Config object at 0x7fbe8201e050>, 'has_streaming_input': False, 'auth_type': None, 'signing': {'bucket': 'test-bucket'}}}
2026-04-29 15:32:33,876 - ThreadPoolExecutor-0_3 - botocore.hooks - DEBUG - Event request-created.s3.CompleteMultipartUpload: calling handler <function signal_not_transferring at 0x7fbe8280a5f0>
2026-04-29 15:32:33,876 - ThreadPoolExecutor-0_3 - botocore.hooks - DEBUG - Event request-created.s3.CompleteMultipartUpload: calling handler <bound method RequestSigner.handler of <botocore.signers.RequestSigner object at 0x7fbe8201dfc0>>
2026-04-29 15:32:33,877 - ThreadPoolExecutor-0_3 - botocore.hooks - DEBUG - Event choose-signer.s3.CompleteMultipartUpload: calling handler <bound method S3EndpointSetter.set_signer of <botocore.utils.S3EndpointSetter object at 0x7fbe8201ec50>>
2026-04-29 15:32:33,877 - ThreadPoolExecutor-0_3 - botocore.hooks - DEBUG - Event choose-signer.s3.CompleteMultipartUpload: calling handler <function set_operation_specific_signer at 0x7fbe83062a70>
2026-04-29 15:32:33,877 - ThreadPoolExecutor-0_3 - botocore.hooks - DEBUG - Event before-sign.s3.CompleteMultipartUpload: calling handler <bound method S3EndpointSetter.set_endpoint of <botocore.utils.S3EndpointSetter object at 0x7fbe8201ec50>>
2026-04-29 15:32:33,877 - ThreadPoolExecutor-0_3 - botocore.auth - DEBUG - Calculating signature using v4 auth.
2026-04-29 15:32:33,877 - ThreadPoolExecutor-0_3 - botocore.auth - DEBUG - CanonicalRequest:
POST
/test-bucket/test.txt
uploadId=2~IfZlkr2uGnFZSvzCk8w0GN_koArWtB3
host:10.159.7.105
x-amz-content-sha256:f466b00004771e7432e8749d3db7cd4c99695f1114cc33d44b7a9d822ae478ac
x-amz-date:20260429T153233Z

host;x-amz-content-sha256;x-amz-date
f466b00004771e7432e8749d3db7cd4c99695f1114cc33d44b7a9d822ae478ac
2026-04-29 15:32:33,878 - ThreadPoolExecutor-0_3 - botocore.auth - DEBUG - StringToSign:
AWS4-HMAC-SHA256
20260429T153233Z
20260429/east-us/s3/aws4_request
aaf52609d3256043af0885325134ef288bd75e3f0cdebe493efb605138770df1
2026-04-29 15:32:33,878 - ThreadPoolExecutor-0_3 - botocore.auth - DEBUG - Signature:
f0abe925ed62a44ea88e78f76ca4dcbb7c6bc1ca50debca9d39cbd8bd971a1f6
2026-04-29 15:32:33,878 - ThreadPoolExecutor-0_3 - botocore.hooks - DEBUG - Event request-created.s3.CompleteMultipartUpload: calling handler <function signal_transferring at 0x7fbe8280a680>
2026-04-29 15:32:33,878 - ThreadPoolExecutor-0_3 - botocore.endpoint - DEBUG - Sending http request: <AWSPreparedRequest stream_output=False, method=POST, url=http://10.159.7.105/test-bucket/test.txt?uploadId=2~IfZlkr2uGnFZSvzCk8w0GN_koArWtB3, headers={'User-Agent': b'aws-cli/1.22.34 Python/3.10.12 Linux/5.15.0-173-generic botocore/1.23.34', 'X-Amz-Date': b'20260429T153233Z', 'X-Amz-Content-SHA256': b'f466b00004771e7432e8749d3db7cd4c99695f1114cc33d44b7a9d822ae478ac', 'Authorization': b'AWS4-HMAC-SHA256 Credential=ZWM24KYHXVEZ95Y9CWDA/20260429/east-us/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=f0abe925ed62a44ea88e78f76ca4dcbb7c6bc1ca50debca9d39cbd8bd971a1f6', 'Content-Length': '271'}>
2026-04-29 15:32:33,967 - ThreadPoolExecutor-0_3 - urllib3.connectionpool - DEBUG - http://10.159.7.105:80 "POST /test-bucket/test.txt?uploadId=2~IfZlkr2uGnFZSvzCk8w0GN_koArWtB3 HTTP/1.1" 200 304
2026-04-29 15:32:34,010 - ThreadPoolExecutor-0_3 - botocore.parsers - DEBUG - Response headers: {'x-amz-request-id': 'tx00000fe3b24e5c0fe3365-0069f22491-1436-default', 'Content-Type': 'application/xml', 'Content-Length': '304', 'Date': 'Wed, 29 Apr 2026 15:32:33 GMT', 'Connection': 'Keep-Alive'}
2026-04-29 15:32:34,010 - ThreadPoolExecutor-0_3 - botocore.parsers - DEBUG - Response body:
b'<?xml version="1.0" encoding="UTF-8"?><CompleteMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Location>http://10.159.7.105/test-bucket/test.txt</Location><Bucket>test-bucket</Bucket><Key>test.txt</Key><ETag>9cf3651051c742fa55ce8b88672a4fa8-2</ETag></CompleteMultipartUploadResult>'
2026-04-29 15:32:34,011 - ThreadPoolExecutor-0_3 - botocore.hooks - DEBUG - Event needs-retry.s3.CompleteMultipartUpload: calling handler <function check_for_200_error at 0x7fbe83062950>
2026-04-29 15:32:34,011 - ThreadPoolExecutor-0_3 - botocore.hooks - DEBUG - Event needs-retry.s3.CompleteMultipartUpload: calling handler <botocore.retryhandler.RetryHandler object at 0x7fbe8201eaa0>
2026-04-29 15:32:34,011 - ThreadPoolExecutor-0_3 - botocore.retryhandler - DEBUG - No retry needed.
2026-04-29 15:32:34,011 - ThreadPoolExecutor-0_3 - botocore.hooks - DEBUG - Event needs-retry.s3.CompleteMultipartUpload: calling handler <bound method S3RegionRedirector.redirect_from_error of <botocore.utils.S3RegionRedirector object at 0x7fbe8201eb60>>
2026-04-29 15:32:34,011 - ThreadPoolExecutor-0_3 - botocore.hooks - DEBUG - Event after-call.s3.CompleteMultipartUpload: calling handler <function enhance_error_msg at 0x7fbe826caf80>
upload: ./test.txt to s3://test-bucket/test.txt                  
2026-04-29 15:32:34,012 - ThreadPoolExecutor-0_3 - s3transfer.utils - DEBUG - Releasing acquire 0/None
2026-04-29 15:32:34,012 - Thread-1 - awscli.customizations.s3.results - DEBUG - Shutdown request received in result processing thread, shutting down result thread.



As we can see from the output the line "2026-04-29 15:32:34,010 - ThreadPoolExecutor-0_3 - botocore.parsers - DEBUG - Response body:
b'<?xml version="1.0" encoding="UTF-8"?><CompleteMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Location>http://10.159.7.105/test-bucket/test.txt</Location><Bucket>test-bucket</Bucket><Key>test.txt</Key><ETag>9cf3651051c742fa55ce8b88672a4fa8-2</ETag></CompleteMultipartUploadResult>'"
contains the ETag.

3. Downloading the file from ceph and making sure the file is not
corrupted:

ubuntu at juju-6062d5-ceph-quincy-4:~$ aws s3 --profile ceph cp s3://test-bucket/test.txt ./test-from-ceph.txt --endpoint-url http://10.159.7.105
download: s3://test-bucket/test.txt to ./test-from-ceph.txt

ubuntu at juju-6062d5-ceph-quincy-4:~$ sha256sum ./test.txt ./test-from-ceph.txt 
6b30d89069a6a8ef6a927a2fb3c3e96174f887c3abf5a76b6a1785f29a6a9023  ./test.txt
6b30d89069a6a8ef6a927a2fb3c3e96174f887c3abf5a76b6a1785f29a6a9023  ./test-from-ceph.txt


Since both files have the same sha256 string, there has been no corruption hitting the file.


** Tags removed: verification-needed-jammy
** Tags added: verification-done-jammy

-- 
You received this bug notification because you are a member of Ubuntu
OpenStack, which is subscribed to ceph in Ubuntu.
https://bugs.launchpad.net/bugs/2131790

Title:
  RGW - etag not returned on multipart upload

Status in Ubuntu Cloud Archive:
  Fix Released
Status in Ubuntu Cloud Archive yoga series:
  New
Status in ceph package in Ubuntu:
  Fix Released
Status in ceph source package in Jammy:
  Fix Committed
Status in ceph source package in Noble:
  Fix Released

Bug description:
  Thank you @pponnuvel for the original description!

  [ Impact ]
  Currently in ceph 17.2.9, when doing multipart uploads, the etag of the multipart upload is not returned. This causes issues with some applications that rely on ceph and the etag which now have to calculate the etag manually causing performance issues.
  The issue was fixed upstream through https://github.com/ceph/ceph/pull/56453.
  However this commit caused regressions and three other commits that are part of this PR are also needed to resolve them: https://github.com/ceph/ceph/pull/57257

  A total of 4 commits are needed to resolve the issue.

  [ Test Plan ]
  1- Deploy ceph 17.2.9
  2- Use the awscli tool to upload a file large enough that it would be sent as part of a multipart upload. Make sure to use the "--debug" argument to verify if the etag is being returned or not:
  aws s3 --profile ceph --endpoint-url <ceph URL> cp ./test.txt s3://test-bucket/ --debug

  Currently the following output is seen towards the end of the debug
  log:

  2026-04-14 22:47:57,150 - ThreadPoolExecutor-0_3 - botocore.parsers - DEBUG - Response body:
  b'<?xml version="1.0" encoding="UTF-8"?><CompleteMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Location>http://10.159.7.70/test-bucket/test.txt</Location><Bucket>test-bucket</Bucket><Key>test.txt</Key><ETag></ETag></CompleteMultipartUploadResult>'

  Where the <ETag></ETag> clause is empty.

  The output should look like the following:

  2026-04-14 22:47:57,150 - ThreadPoolExecutor-0_3 - botocore.parsers - DEBUG - Response body:
  b'<?xml version="1.0" encoding="UTF-8"?><CompleteMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Location>http://10.159.7.70/test-bucket/test.txt</Location><Bucket>test-bucket</Bucket><Key>test.txt</Key><ETag>9609801fffde7f91a34c9686065d9785-2</ETag></CompleteMultipartUploadResult>'

  With the <ETag> clause being populated.

  3- Finally download the file from ceph to confirm that it is not corrupted:
  aws s3 --profile ceph cp s3://test-bucket/test.txt ./test-from-ceph.txt --endpoint-url <ceph URL>

  4- Compare both sha256 of the files to make sure they are the same
  sha256sum test.txt test-from-ceph.txt

  Alternatively use the command "cmp -l test.txt test-from-ceph.txt" to
  confirm that they are the same. No diff should be printed in the
  terminal if they are the same.

  [ Where problems could occur ]

  * Since the fix touches on the upload logic of ceph, there is a chance that issues related to uploading data to ceph fails.
  * ETag might still fail to be included similarly to previous patches that tried resolving this issue but failed

  [Original Description]
  With 17.2.9, when doing multipart uploads, etags don't get returned. And the etag body is empty.

  This was supposed to be fixed in the bug:
  https://github.com/ceph/ceph/pull/51446

  However, we still see the issue with that fix too (which is part of
  17.2.9).

To manage notifications about this bug go to:
https://bugs.launchpad.net/cloud-archive/+bug/2131790/+subscriptions




More information about the Ubuntu-openstack-bugs mailing list