From 624914daa1510edc26f576e31c3728624220912a Mon Sep 17 00:00:00 2001 From: Krish Date: Fri, 19 Jun 2026 16:19:37 +0000 Subject: [PATCH 01/10] add check to ci --- .github/workflows/check-abi.yml | 45 +++++++++++++++++++++++++ include/aws/s3/private/s3_client_impl.h | 2 ++ include/aws/s3/s3_client.h | 2 ++ 3 files changed, 49 insertions(+) create mode 100644 .github/workflows/check-abi.yml diff --git a/.github/workflows/check-abi.yml b/.github/workflows/check-abi.yml new file mode 100644 index 000000000..15db8c0cd --- /dev/null +++ b/.github/workflows/check-abi.yml @@ -0,0 +1,45 @@ +name: Check ABI compliance + +on: + pull_request: + types: [opened, synchronize, reopened] + workflow_dispatch: + +concurrency: + group: check-abi-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +env: + # Minimum builder version that ships AbiCheck. Update when a new release tags it. + BUILDER_VERSION: abi-check + BUILDER_SOURCE: releases + BUILDER_HOST: https://d19elf31gohf1l.cloudfront.net + PACKAGE_NAME: aws-c-s3 + RUN: ${{ github.run_id }}-${{ github.run_number }} + CRT_CI_ROLE: ${{ secrets.CRT_CI_ROLE_ARN }} + AWS_DEFAULT_REGION: us-east-1 + +permissions: + id-token: write + contents: read + +jobs: + check-abi: + name: check-abi + runs-on: ubuntu-24.04 + steps: + - uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ env.CRT_CI_ROLE }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: ABI check + run: | + python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder')" + chmod a+x builder + python builder run AbiCheck --lib-name "${{ env.PACKAGE_NAME }}" diff --git a/include/aws/s3/private/s3_client_impl.h b/include/aws/s3/private/s3_client_impl.h index 0fb87ca57..4f88f2d5a 100644 --- a/include/aws/s3/private/s3_client_impl.h +++ b/include/aws/s3/private/s3_client_impl.h @@ -215,6 +215,8 @@ struct aws_s3_upload_part_timeout_stats { struct aws_s3_client { struct aws_allocator *allocator; + int random_new_member; + struct aws_s3_buffer_pool *buffer_pool; struct aws_s3_client_vtable *vtable; diff --git a/include/aws/s3/s3_client.h b/include/aws/s3/s3_client.h index e23ea9f47..4a4558be1 100644 --- a/include/aws/s3/s3_client.h +++ b/include/aws/s3/s3_client.h @@ -222,6 +222,8 @@ typedef int(aws_s3_meta_request_receive_body_callback_ex_fn)( * Information sent in the meta_request progress callback. */ struct aws_s3_meta_request_progress { + /* Total bytes transferred so far across all progress updates */ + uint64_t total_bytes_transferred; /* Bytes transferred since the previous progress update */ uint64_t bytes_transferred; From c07a94c5f68b6a202a943b85c5e9bcb35a32c731 Mon Sep 17 00:00:00 2001 From: Krish Date: Fri, 19 Jun 2026 16:47:38 +0000 Subject: [PATCH 02/10] forgot channels --- .github/workflows/check-abi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-abi.yml b/.github/workflows/check-abi.yml index 15db8c0cd..7a7ce682e 100644 --- a/.github/workflows/check-abi.yml +++ b/.github/workflows/check-abi.yml @@ -12,7 +12,7 @@ concurrency: env: # Minimum builder version that ships AbiCheck. Update when a new release tags it. BUILDER_VERSION: abi-check - BUILDER_SOURCE: releases + BUILDER_SOURCE: channels BUILDER_HOST: https://d19elf31gohf1l.cloudfront.net PACKAGE_NAME: aws-c-s3 RUN: ${{ github.run_id }}-${{ github.run_number }} From a5e53ffbb06c27cd92383466636a3c2604ed154d Mon Sep 17 00:00:00 2001 From: Krish Date: Mon, 22 Jun 2026 03:16:54 +0000 Subject: [PATCH 03/10] fix to use reusable yml --- .github/workflows/check-abi.yml | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/.github/workflows/check-abi.yml b/.github/workflows/check-abi.yml index 7a7ce682e..cdd89b324 100644 --- a/.github/workflows/check-abi.yml +++ b/.github/workflows/check-abi.yml @@ -3,19 +3,13 @@ name: Check ABI compliance on: pull_request: types: [opened, synchronize, reopened] - workflow_dispatch: concurrency: - group: check-abi-${{ github.event.pull_request.number || github.ref }} + group: check-abi-${{ github.event.pull_request.number }} cancel-in-progress: true env: - # Minimum builder version that ships AbiCheck. Update when a new release tags it. - BUILDER_VERSION: abi-check - BUILDER_SOURCE: channels - BUILDER_HOST: https://d19elf31gohf1l.cloudfront.net PACKAGE_NAME: aws-c-s3 - RUN: ${{ github.run_id }}-${{ github.run_number }} CRT_CI_ROLE: ${{ secrets.CRT_CI_ROLE_ARN }} AWS_DEFAULT_REGION: us-east-1 @@ -38,8 +32,11 @@ jobs: with: fetch-depth: 0 - - name: ABI check - run: | - python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder')" - chmod a+x builder - python builder run AbiCheck --lib-name "${{ env.PACKAGE_NAME }}" + - name: Check ABI + # Pointing at the fork branch while the builder change is in review. + # Switch to awslabs/aws-crt-builder/.github/actions/check-abi@main once merged. + uses: azkrishpy/aws-crt-builder/.github/actions/check-abi@abi-check + with: + lib-name: ${{ env.PACKAGE_NAME }} + builder-version: abi-check + builder-source: channels From 1f69ab4c9c74ce184d6b647b034b1d9ab6083aca Mon Sep 17 00:00:00 2001 From: Krish Date: Mon, 22 Jun 2026 03:28:57 +0000 Subject: [PATCH 04/10] fix origin --- .github/workflows/check-abi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-abi.yml b/.github/workflows/check-abi.yml index cdd89b324..045a56578 100644 --- a/.github/workflows/check-abi.yml +++ b/.github/workflows/check-abi.yml @@ -35,7 +35,7 @@ jobs: - name: Check ABI # Pointing at the fork branch while the builder change is in review. # Switch to awslabs/aws-crt-builder/.github/actions/check-abi@main once merged. - uses: azkrishpy/aws-crt-builder/.github/actions/check-abi@abi-check + uses: awslabs/aws-crt-builder/.github/actions/check-abi@abi-check with: lib-name: ${{ env.PACKAGE_NAME }} builder-version: abi-check From f1049a62a019fc9d2f49b33c01319cd1e8c92787 Mon Sep 17 00:00:00 2001 From: Krish Date: Wed, 1 Jul 2026 22:46:45 +0000 Subject: [PATCH 05/10] undo public struct change --- include/aws/s3/s3_client.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/include/aws/s3/s3_client.h b/include/aws/s3/s3_client.h index 4a4558be1..e23ea9f47 100644 --- a/include/aws/s3/s3_client.h +++ b/include/aws/s3/s3_client.h @@ -222,8 +222,6 @@ typedef int(aws_s3_meta_request_receive_body_callback_ex_fn)( * Information sent in the meta_request progress callback. */ struct aws_s3_meta_request_progress { - /* Total bytes transferred so far across all progress updates */ - uint64_t total_bytes_transferred; /* Bytes transferred since the previous progress update */ uint64_t bytes_transferred; From 2899ef2c3c85254f13b2315957d63d276d0628fe Mon Sep 17 00:00:00 2001 From: Krish Date: Wed, 5 Aug 2026 17:33:11 +0000 Subject: [PATCH 06/10] switch to main --- .github/workflows/check-abi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-abi.yml b/.github/workflows/check-abi.yml index 045a56578..29c937f8e 100644 --- a/.github/workflows/check-abi.yml +++ b/.github/workflows/check-abi.yml @@ -35,7 +35,7 @@ jobs: - name: Check ABI # Pointing at the fork branch while the builder change is in review. # Switch to awslabs/aws-crt-builder/.github/actions/check-abi@main once merged. - uses: awslabs/aws-crt-builder/.github/actions/check-abi@abi-check + uses: awslabs/aws-crt-builder/.github/actions/check-abi@main with: lib-name: ${{ env.PACKAGE_NAME }} builder-version: abi-check From ab339e873becb7271da7e4747c59dab98b301efb Mon Sep 17 00:00:00 2001 From: Krish Date: Wed, 5 Aug 2026 18:40:22 +0000 Subject: [PATCH 07/10] abi breaks --- include/aws/s3/s3_client.h | 9 ++++++--- source/s3_request.c | 3 +-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/include/aws/s3/s3_client.h b/include/aws/s3/s3_client.h index 46cd3fdea..3c6d90641 100644 --- a/include/aws/s3/s3_client.h +++ b/include/aws/s3/s3_client.h @@ -226,6 +226,9 @@ struct aws_s3_meta_request_progress { /* Bytes transferred since the previous progress update */ uint64_t bytes_transferred; + /* Total bytes transferred so far across all progress updates */ + uint64_t total_bytes_transferred; + /* Length of the entire meta request operation */ uint64_t content_length; }; @@ -286,8 +289,8 @@ typedef struct aws_string *(aws_s3_meta_request_full_object_checksum_fn)(struct void *user_data); enum aws_s3_meta_request_tls_mode { - AWS_MR_TLS_ENABLED, AWS_MR_TLS_DISABLED, + AWS_MR_TLS_ENABLED, }; enum aws_s3_meta_request_compute_content_md5 { @@ -313,8 +316,8 @@ enum aws_s3_checksum_algorithm { enum aws_s3_checksum_location { AWS_SCL_NONE = 0, - AWS_SCL_HEADER, AWS_SCL_TRAILER, + AWS_SCL_HEADER, }; enum aws_s3_recv_file_options { @@ -1809,7 +1812,7 @@ int aws_s3_request_metrics_get_connection_id(const struct aws_s3_request_metrics /* Get the pointer to the request that attempt was made from. Always available. */ AWS_S3_API -int aws_s3_request_metrics_get_request_ptr(const struct aws_s3_request_metrics *metrics, size_t *out_request_ptr); +void aws_s3_request_metrics_get_request_ptr(const struct aws_s3_request_metrics *metrics, size_t *out_request_ptr); /* Get the thread ID of the thread that request was made from. AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE will be raised if * data not available */ diff --git a/source/s3_request.c b/source/s3_request.c index 453ea4aac..27be40982 100644 --- a/source/s3_request.c +++ b/source/s3_request.c @@ -596,11 +596,10 @@ int aws_s3_request_metrics_get_connection_id(const struct aws_s3_request_metrics return AWS_OP_SUCCESS; } -int aws_s3_request_metrics_get_request_ptr(const struct aws_s3_request_metrics *metrics, size_t *out_request_ptr) { +void aws_s3_request_metrics_get_request_ptr(const struct aws_s3_request_metrics *metrics, size_t *out_request_ptr) { AWS_PRECONDITION(metrics); AWS_PRECONDITION(out_request_ptr); *out_request_ptr = (size_t)metrics->crt_info_metrics.request_ptr; - return AWS_OP_SUCCESS; } int aws_s3_request_metrics_get_thread_id(const struct aws_s3_request_metrics *metrics, aws_thread_id_t *thread_id) { From 04f0ac0ce1518598a7f65750e83639064f77de1a Mon Sep 17 00:00:00 2001 From: Krish Date: Wed, 5 Aug 2026 19:07:38 +0000 Subject: [PATCH 08/10] add permissions and switch to releases --- .github/workflows/check-abi.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check-abi.yml b/.github/workflows/check-abi.yml index 29c937f8e..ab3b882b2 100644 --- a/.github/workflows/check-abi.yml +++ b/.github/workflows/check-abi.yml @@ -16,6 +16,7 @@ env: permissions: id-token: write contents: read + pull-requests: write jobs: check-abi: @@ -38,5 +39,5 @@ jobs: uses: awslabs/aws-crt-builder/.github/actions/check-abi@main with: lib-name: ${{ env.PACKAGE_NAME }} - builder-version: abi-check - builder-source: channels + builder-version: latest + builder-source: releases From 7087333c871819bf51bca85fc875d78e75f6db7d Mon Sep 17 00:00:00 2001 From: Krish Date: Wed, 5 Aug 2026 23:14:56 +0000 Subject: [PATCH 09/10] add blocker for needs-review label --- .github/workflows/block-needs-review.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .github/workflows/block-needs-review.yml diff --git a/.github/workflows/block-needs-review.yml b/.github/workflows/block-needs-review.yml new file mode 100644 index 000000000..014120500 --- /dev/null +++ b/.github/workflows/block-needs-review.yml @@ -0,0 +1,12 @@ +name: Block needs-review merges + +on: + pull_request: + types: [opened, synchronize, reopened, labeled, unlabeled] + +permissions: + pull-requests: read + +jobs: + gate: + uses: awslabs/aws-crt-builder/.github/workflows/block-needs-review-label.yml@main From 61ceb349cd7211f414f18eadd29568ea3a26df02 Mon Sep 17 00:00:00 2001 From: Krish Date: Fri, 7 Aug 2026 19:30:43 +0000 Subject: [PATCH 10/10] Revert "abi breaks" This reverts commit ab339e873becb7271da7e4747c59dab98b301efb. --- include/aws/s3/s3_client.h | 9 +++------ source/s3_request.c | 3 ++- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/include/aws/s3/s3_client.h b/include/aws/s3/s3_client.h index 3c6d90641..46cd3fdea 100644 --- a/include/aws/s3/s3_client.h +++ b/include/aws/s3/s3_client.h @@ -226,9 +226,6 @@ struct aws_s3_meta_request_progress { /* Bytes transferred since the previous progress update */ uint64_t bytes_transferred; - /* Total bytes transferred so far across all progress updates */ - uint64_t total_bytes_transferred; - /* Length of the entire meta request operation */ uint64_t content_length; }; @@ -289,8 +286,8 @@ typedef struct aws_string *(aws_s3_meta_request_full_object_checksum_fn)(struct void *user_data); enum aws_s3_meta_request_tls_mode { - AWS_MR_TLS_DISABLED, AWS_MR_TLS_ENABLED, + AWS_MR_TLS_DISABLED, }; enum aws_s3_meta_request_compute_content_md5 { @@ -316,8 +313,8 @@ enum aws_s3_checksum_algorithm { enum aws_s3_checksum_location { AWS_SCL_NONE = 0, - AWS_SCL_TRAILER, AWS_SCL_HEADER, + AWS_SCL_TRAILER, }; enum aws_s3_recv_file_options { @@ -1812,7 +1809,7 @@ int aws_s3_request_metrics_get_connection_id(const struct aws_s3_request_metrics /* Get the pointer to the request that attempt was made from. Always available. */ AWS_S3_API -void aws_s3_request_metrics_get_request_ptr(const struct aws_s3_request_metrics *metrics, size_t *out_request_ptr); +int aws_s3_request_metrics_get_request_ptr(const struct aws_s3_request_metrics *metrics, size_t *out_request_ptr); /* Get the thread ID of the thread that request was made from. AWS_ERROR_S3_METRIC_DATA_NOT_AVAILABLE will be raised if * data not available */ diff --git a/source/s3_request.c b/source/s3_request.c index 27be40982..453ea4aac 100644 --- a/source/s3_request.c +++ b/source/s3_request.c @@ -596,10 +596,11 @@ int aws_s3_request_metrics_get_connection_id(const struct aws_s3_request_metrics return AWS_OP_SUCCESS; } -void aws_s3_request_metrics_get_request_ptr(const struct aws_s3_request_metrics *metrics, size_t *out_request_ptr) { +int aws_s3_request_metrics_get_request_ptr(const struct aws_s3_request_metrics *metrics, size_t *out_request_ptr) { AWS_PRECONDITION(metrics); AWS_PRECONDITION(out_request_ptr); *out_request_ptr = (size_t)metrics->crt_info_metrics.request_ptr; + return AWS_OP_SUCCESS; } int aws_s3_request_metrics_get_thread_id(const struct aws_s3_request_metrics *metrics, aws_thread_id_t *thread_id) {