Skip to content

CLDSRV-869: Account level rate limiting#6163

Merged
bert-e merged 16 commits intodevelopment/9.2from
improvement/CLDSRV-869/account_limiting
Apr 29, 2026
Merged

CLDSRV-869: Account level rate limiting#6163
bert-e merged 16 commits intodevelopment/9.2from
improvement/CLDSRV-869/account_limiting

Conversation

@tmacro
Copy link
Copy Markdown
Contributor

@tmacro tmacro commented Apr 28, 2026

All code has been previously reviewed

@bert-e
Copy link
Copy Markdown
Contributor

bert-e commented Apr 28, 2026

Hello tmacro,

My role is to assist you with the merge of this
pull request. Please type @bert-e help to get information
on this process, or consult the user documentation.

Available options
name description privileged authored
/after_pull_request Wait for the given pull request id to be merged before continuing with the current one.
/bypass_author_approval Bypass the pull request author's approval
/bypass_build_status Bypass the build and test status
/bypass_commit_size Bypass the check on the size of the changeset TBA
/bypass_incompatible_branch Bypass the check on the source branch prefix
/bypass_jira_check Bypass the Jira issue check
/bypass_peer_approval Bypass the pull request peers' approval
/bypass_leader_approval Bypass the pull request leaders' approval
/approve Instruct Bert-E that the author has approved the pull request. ✍️
/create_pull_requests Allow the creation of integration pull requests.
/create_integration_branches Allow the creation of integration branches.
/no_octopus Prevent Wall-E from doing any octopus merge and use multiple consecutive merge instead
/unanimity Change review acceptance criteria from one reviewer at least to all reviewers
/wait Instruct Bert-E not to run until further notice.
Available commands
name description privileged
/help Print Bert-E's manual in the pull request.
/status Print Bert-E's current status in the pull request TBA
/clear Remove all comments from Bert-E from the history TBA
/retry Re-start a fresh build TBA
/build Re-start a fresh build TBA
/force_reset Delete integration branches & pull requests, and restart merge process from the beginning.
/reset Try to remove integration branches unless there are commits on them which do not appear on the source branch.

Status report is not available.

@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 28, 2026

❌ 74 Tests Failed:

Tests completed Failed Passed Skipped
8194 74 8120 0
View the top 3 failed test(s) by shortest run time
should put a part to mem based on mpu location::objectPutPart API with multiple backends should put a part to mem based on mpu location
Stack Traces | 0s run time
No failure message available
GET /_/backbeat/api/... should respond with 403 if the request is unauthenticated::backbeat routes backbeat authorization checks when api proxy is configured GET /_/backbeat/api/... should respond with 403 if the request is unauthenticated
Stack Traces | 0.001s run time
No failure message available
PUT data should respond with 403 Forbidden if backbeat user has wrong secret key::backbeat routes backbeat authorization checks PUT data should respond with 403 Forbidden if backbeat user has wrong secret key
Stack Traces | 0.001s run time
No failure message available
PUT data should respond with 403 Forbidden if wrong credentials are provided::backbeat routes backbeat authorization checks PUT data should respond with 403 Forbidden if wrong credentials are provided
Stack Traces | 0.001s run time
No failure message available
PUT metadata should respond with 403 Forbidden if backbeat user has wrong secret key::backbeat routes backbeat authorization checks PUT metadata should respond with 403 Forbidden if backbeat user has wrong secret key
Stack Traces | 0.001s run time
No failure message available
should put a part to mem based on bucket location::objectPutPart API with multiple backends should put a part to mem based on bucket location
Stack Traces | 0.001s run time
No failure message available
should return error on abort of MPU that does not exist::Multipart Upload API with AWS Backend should return error on abort of MPU that does not exist
Stack Traces | 0.001s run time
No failure message available
should return result for every location constraint in locationConfig and at least one of every external locations with flightCheckOnStartUp set to false::Healthcheck response should return result for every location constraint in locationConfig and at least one of every external locations with flightCheckOnStartUp set to false
Stack Traces | 0.001s run time
No failure message available
should skip batch delete of empty location array::backbeat routes Batch Delete Route should skip batch delete of empty location array
Stack Traces | 0.001s run time
No failure message available
should upload part based on mpu location even if part location constraint is specified ::objectPutPart API with multiple backends should upload part based on mpu location even if part location constraint is specified 
Stack Traces | 0.001s run time
No failure message available
PUT metadata should respond with 403 Forbidden if wrong credentials are provided::backbeat routes backbeat authorization checks PUT metadata should respond with 403 Forbidden if wrong credentials are provided
Stack Traces | 0.002s run time
No failure message available
should copy part to mem based on bucket location::ObjectCopyPutPart API with multiple backends should copy part to mem based on bucket location
Stack Traces | 0.002s run time
No failure message available
should fail with error if given malformed JSON::backbeat routes Batch Delete Route should fail with error if given malformed JSON
Stack Traces | 0.002s run time
No failure message available
should skip batch delete of a non-existent location::backbeat routes Batch Delete Route should skip batch delete of a non-existent location
Stack Traces | 0.002s run time
No failure message available
should store a part even if the MPU was initiated on legacy version::objectPutPart API with multiple backends should store a part even if the MPU was initiated on legacy version
Stack Traces | 0.002s run time
No failure message available
should upload a part to file based on mpu location::objectPutPart API with multiple backends should upload a part to file based on mpu location
Stack Traces | 0.002s run time
No failure message available
PUT data should respond with 403 Forbidden if no credentials are provided::backbeat routes backbeat authorization checks PUT data should respond with 403 Forbidden if no credentials are provided
Stack Traces | 0.003s run time
No failure message available
PUT data should respond with 403 Forbidden if the account does not match the backbeat user::backbeat routes backbeat authorization checks PUT data should respond with 403 Forbidden if the account does not match the backbeat user
Stack Traces | 0.003s run time
No failure message available
should copy part to file based on mpu location::ObjectCopyPutPart API with multiple backends should copy part to file based on mpu location
Stack Traces | 0.003s run time
No failure message available
should put a part to file based on bucket location::objectPutPart API with multiple backends should put a part to file based on bucket location
Stack Traces | 0.003s run time
No failure message available
should refuse PUT data if bucket is not versioned and x-scal-versioning-required is true::backbeat routes backbeat PUT routes should refuse PUT data if bucket is not versioned and x-scal-versioning-required is true
Stack Traces | 0.003s run time
No failure message available
should refuse PUT data if no x-scal-canonical-id header is provided::backbeat routes backbeat PUT routes should refuse PUT data if no x-scal-canonical-id header is provided
Stack Traces | 0.003s run time
No failure message available
should refuse PUT in metadata-only mode if object does not exist::backbeat routes backbeat PUT routes should refuse PUT in metadata-only mode if object does not exist
Stack Traces | 0.003s run time
No failure message available
should refuse PUT metadata if bucket is not versioned and x-scal-versioning-required is true::backbeat routes backbeat PUT routes should refuse PUT metadata if bucket is not versioned and x-scal-versioning-required is true
Stack Traces | 0.003s run time
No failure message available
should refuse PUT metadata if bucket is version suspended and x-scal-versioning-required is true::backbeat routes backbeat PUT routes should refuse PUT metadata if bucket is version suspended and x-scal-versioning-required is true
Stack Traces | 0.003s run time
No failure message available
should return error if bucket does not exist::backbeat routes GET Metadata route should return error if bucket does not exist
Stack Traces | 0.003s run time
No failure message available
should return error if object does not exist::backbeat routes GET Metadata route should return error if object does not exist
Stack Traces | 0.003s run time
No failure message available
should return metadata blob for a versionId::backbeat routes GET Metadata route should return metadata blob for a versionId
Stack Traces | 0.003s run time
No failure message available
GET /_/backbeat/api/... should respond with 503 on authenticated requests (API server down)::backbeat routes backbeat authorization checks when api proxy is configured GET /_/backbeat/api/... should respond with 503 on authenticated requests (API server down)
Stack Traces | 0.004s run time
No failure message available
PUT metadata should respond with 403 Forbidden if the account does not match the backbeat user::backbeat routes backbeat authorization checks PUT metadata should respond with 403 Forbidden if the account does not match the backbeat user
Stack Traces | 0.004s run time
No failure message available
should put a part to file based on request endpoint::objectPutPart API with multiple backends should put a part to file based on request endpoint
Stack Traces | 0.004s run time
No failure message available
PUT metadata should respond with 403 Forbidden if no credentials are provided::backbeat routes backbeat authorization checks PUT metadata should respond with 403 Forbidden if no credentials are provided
Stack Traces | 0.005s run time
No failure message available
should copy part to file based on request endpoint::ObjectCopyPutPart API with multiple backends should copy part to file based on request endpoint
Stack Traces | 0.005s run time
No failure message available
should copy part to mem based on mpu location::ObjectCopyPutPart API with multiple backends should copy part to mem based on mpu location
Stack Traces | 0.005s run time
No failure message available
should refuse PUT data if bucket is version suspended and x-scal-versioning-required is true::backbeat routes backbeat PUT routes should refuse PUT data if bucket is version suspended and x-scal-versioning-required is true
Stack Traces | 0.005s run time
No failure message available
should copy part to file based on bucket location::ObjectCopyPutPart API with multiple backends should copy part to file based on bucket location
Stack Traces | 0.006s run time
No failure message available
with encryption configuration and legacy API v1::backbeat routes backbeat PUT routes PUT data + metadata should create a new complete object with encryption configuration and legacy API v1
Stack Traces | 0.012s run time
No failure message available
object metadata for newly stored object should have dataStoreName if copying to mem based on bucket location::ObjectCopy API with multiple backends object metadata for newly stored object should have dataStoreName if copying to mem based on bucket location
Stack Traces | 0.013s run time
No failure message available
with legacy API v1::backbeat routes backbeat PUT routes PUT data + metadata should create a new complete object with legacy API v1
Stack Traces | 0.013s run time
No failure message available
with ascii test key::backbeat routes backbeat PUT routes PUT data + metadata should create a new complete object with ascii test key
Stack Traces | 0.014s run time
No failure message available
with key notes/yore.rs::backbeat routes backbeat PUT routes PUT data + metadata should create a new complete object with key notes/yore.rs
Stack Traces | 0.015s run time
No failure message available
with key Pâtisserie=中文-español-English::backbeat routes backbeat PUT routes PUT data + metadata should create a new complete object with key Pâtisserie=中文-español-English
Stack Traces | 0.016s run time
No failure message available
with percents and spaces encoded as '+' in key::backbeat routes backbeat PUT routes PUT data + metadata should create a new complete object with percents and spaces encoded as '+' in key
Stack Traces | 0.016s run time
No failure message available
with key notes/spring/march/1.txt::backbeat routes backbeat PUT routes PUT data + metadata should create a new complete object with key notes/spring/march/1.txt
Stack Traces | 0.017s run time
No failure message available
with key notes/year.txt::backbeat routes backbeat PUT routes PUT data + metadata should create a new complete object with key notes/year.txt
Stack Traces | 0.017s run time
No failure message available
with key notes/zaphod/Beeblebrox.txt::backbeat routes backbeat PUT routes PUT data + metadata should create a new complete object with key notes/zaphod/Beeblebrox.txt
Stack Traces | 0.017s run time
No failure message available
with UTF8 key::backbeat routes backbeat PUT routes PUT data + metadata should create a new complete object with UTF8 key
Stack Traces | 0.018s run time
No failure message available
with encryption configuration::backbeat routes backbeat PUT routes PUT data + metadata should create a new complete object with encryption configuration
Stack Traces | 0.018s run time
No failure message available
with key notes/spring/1.txt::backbeat routes backbeat PUT routes PUT data + metadata should create a new complete object with key notes/spring/1.txt
Stack Traces | 0.018s run time
No failure message available
with key notes/spring/2.txt::backbeat routes backbeat PUT routes PUT data + metadata should create a new complete object with key notes/spring/2.txt
Stack Traces | 0.018s run time
No failure message available
with key notes/summer/1.txt::backbeat routes backbeat PUT routes PUT data + metadata should create a new complete object with key notes/summer/1.txt
Stack Traces | 0.018s run time
No failure message available
with key notes/summer/2.txt::backbeat routes backbeat PUT routes PUT data + metadata should create a new complete object with key notes/summer/2.txt
Stack Traces | 0.018s run time
No failure message available
with key notes/summer/august/1.txt::backbeat routes backbeat PUT routes PUT data + metadata should create a new complete object with key notes/summer/august/1.txt
Stack Traces | 0.018s run time
No failure message available
with key 䆩鈁櫨㟔罳/䆩鈁櫨㟔罳/%42/mykey::backbeat routes backbeat PUT routes PUT data + metadata should create a new complete object with key 䆩鈁櫨㟔罳/䆩鈁櫨㟔罳/%42/mykey
Stack Traces | 0.018s run time
No failure message available
should PUT metadata and data if bucket is not versioned and x-scal-versioning-required is not set::backbeat routes backbeat PUT routes should PUT metadata and data if bucket is not versioned and x-scal-versioning-required is not set
Stack Traces | 0.019s run time
No failure message available
should abort a multipart upload::Multipart Upload API with AWS Backend with mpu initiated on legacy version should abort a multipart upload
Stack Traces | 0.02s run time
No failure message available
should complete a multipart upload::Multipart Upload API with AWS Backend with mpu initiated on legacy version should complete a multipart upload
Stack Traces | 0.02s run time
No failure message available
should list multipart upload parts::Multipart Upload API with AWS Backend with mpu initiated on legacy version should list multipart upload parts
Stack Traces | 0.02s run time
No failure message available
should not remove data locations on replayed metadata PUT::backbeat routes backbeat PUT routes should not remove data locations on replayed metadata PUT
Stack Traces | 0.021s run time
No failure message available
should batch delete a local location::backbeat routes Batch Delete Route should batch delete a local location
Stack Traces | 0.022s run time
No failure message available
should PUT metadata and data if bucket is version suspended and x-scal-versioning-required is not set::backbeat routes backbeat PUT routes should PUT metadata and data if bucket is version suspended and x-scal-versioning-required is not set
Stack Traces | 0.023s run time
No failure message available
should fail to replicate a version if the provided account is invalid::backbeat routes for replication (cross account) should fail to replicate a version if the provided account is invalid
Stack Traces | 0.023s run time
No failure message available
should put an object to mem based on bucket location::objectPutAPI with multiple backends should put an object to mem based on bucket location
Stack Traces | 0.023s run time
No failure message available
should put an object to mem::objectPutAPI with multiple backends should put an object to mem
Stack Traces | 0.024s run time
No failure message available
should copy an object as a part to a multipart upload::Multipart Upload API with AWS Backend with mpu initiated on legacy version should copy an object as a part to a multipart upload
Stack Traces | 0.025s run time
No failure message available
should fail to replicate a version if the provided account is invalid::backbeat routes for replication (same account) should fail to replicate a version if the provided account is invalid
Stack Traces | 0.025s run time
No failure message available
should put an object to file based on bucket location::objectPutAPI with multiple backends should put an object to file based on bucket location
Stack Traces | 0.028s run time
No failure message available
should put an object to us-east-1 which is file based on bucket location if no locationConstraint provided::objectPutAPI with multiple backends should put an object to us-east-1 which is file based on bucket location if no locationConstraint provided
Stack Traces | 0.028s run time
No failure message available
should successfully replicate a version and update account info::backbeat routes for replication (cross account) should successfully replicate a version and update account info
Stack Traces | 0.028s run time
No failure message available
should put an object to sproxyd::objectPutAPI with multiple backends should put an object to sproxyd
Stack Traces | 0.029s run time
No failure message available
should PUT metadata for a non-versioned bucket::backbeat routes backbeat PUT routes should PUT metadata for a non-versioned bucket
Stack Traces | 0.03s run time
No failure message available
should put an object to file::objectPutAPI with multiple backends should put an object to file
Stack Traces | 0.03s run time
No failure message available
should successfully replicate a null version::backbeat routes for replication (cross account) should successfully replicate a null version
Stack Traces | 0.032s run time
No failure message available
should successfully replicate a version::backbeat routes for replication (cross account) should successfully replicate a version
Stack Traces | 0.032s run time
No failure message available
should successfully replicate a null version::backbeat routes for replication (same account) should successfully replicate a null version
Stack Traces | 0.033s run time
No failure message available
should update metadata of a non-version object::backbeat routes null version should update metadata of a non-version object
Stack Traces | 0.033s run time
No failure message available
should successfully replicate a version and update account info::backbeat routes for replication (same account) should successfully replicate a version and update account info
Stack Traces | 0.035s run time
No failure message available
should update null version with no version id and versioning suspended::backbeat routes null version should update null version with no version id and versioning suspended
Stack Traces | 0.035s run time
No failure message available
should successfully replicate a null version and update it::backbeat routes for replication (cross account) should successfully replicate a null version and update it
Stack Traces | 0.036s run time
No failure message available
should successfully replicate a version and update it::backbeat routes for replication (cross account) should successfully replicate a version and update it
Stack Traces | 0.037s run time
No failure message available
should successfully replicate a version::backbeat routes for replication (same account) should successfully replicate a version
Stack Traces | 0.037s run time
No failure message available
should successfully replicate a suspended null version::backbeat routes for replication (cross account) should successfully replicate a suspended null version
Stack Traces | 0.038s run time
No failure message available
should replicate/put NULL metadata to a destination that has a version::backbeat routes for replication (cross account) should replicate/put NULL metadata to a destination that has a version
Stack Traces | 0.039s run time
No failure message available
should successfully replicate a null version and update it::backbeat routes for replication (same account) should successfully replicate a null version and update it
Stack Traces | 0.039s run time
No failure message available
should update null version if versioning suspended and null version has a version id::backbeat routes null version should update null version if versioning suspended and null version has a version id
Stack Traces | 0.04s run time
No failure message available
should successfully put object after replicating a null version::backbeat routes for replication (cross account) should successfully put object after replicating a null version
Stack Traces | 0.041s run time
No failure message available
should successfully replicate a delete marker::backbeat routes for replication (cross account) should successfully replicate a delete marker
Stack Traces | 0.041s run time
No failure message available
should successfully replicate a suspended null version::backbeat routes for replication (same account) should successfully replicate a suspended null version
Stack Traces | 0.041s run time
No failure message available
should replicate/put metadata to a destination that has a null version::backbeat routes for replication (cross account) should replicate/put metadata to a destination that has a null version
Stack Traces | 0.042s run time
No failure message available
should replicate/put NULL metadata to a destination that has a null version::backbeat routes for replication (cross account) should replicate/put NULL metadata to a destination that has a null version
Stack Traces | 0.043s run time
No failure message available
should replicate/put NULL metadata to a destination that has a version::backbeat routes for replication (same account) should replicate/put NULL metadata to a destination that has a version
Stack Traces | 0.043s run time
No failure message available
should successfully put object after replicating a null version::backbeat routes for replication (same account) should successfully put object after replicating a null version
Stack Traces | 0.043s run time
No failure message available
should successfully replicate a version and update it::backbeat routes for replication (same account) should successfully replicate a version and update it
Stack Traces | 0.043s run time
No failure message available
should replicate/put metadata to a destination that has a version::backbeat routes for replication (cross account) should replicate/put metadata to a destination that has a version
Stack Traces | 0.044s run time
No failure message available
should replicate/put NULL metadata to a destination that has a null version::backbeat routes for replication (same account) should replicate/put NULL metadata to a destination that has a null version
Stack Traces | 0.045s run time
No failure message available
should replicate/put a lifecycled NULL metadata to a destination that has a version::backbeat routes for replication (cross account) should replicate/put a lifecycled NULL metadata to a destination that has a version
Stack Traces | 0.045s run time
No failure message available
should replicate/put metadata to a destination that has a null version::backbeat routes for replication (same account) should replicate/put metadata to a destination that has a null version
Stack Traces | 0.047s run time
No failure message available
should replicate/put metadata to a destination that has a version::backbeat routes for replication (same account) should replicate/put metadata to a destination that has a version
Stack Traces | 0.048s run time
No failure message available
PUT metadata with "x-scal-replication-content: METADATA"header should replicate metadata only::backbeat routes backbeat PUT routes PUT metadata with "x-scal-replication-content: METADATA"header should replicate metadata only
Stack Traces | 0.049s run time
No failure message available
should update non-current null version if versioning suspended::backbeat routes null version should update non-current null version if versioning suspended
Stack Traces | 0.049s run time
No failure message available
should create a new null version if versioning suspended and no version::backbeat routes null version should create a new null version if versioning suspended and no version
Stack Traces | 0.05s run time
No failure message available
should replicate/put a lifecycled NULL metadata to a destination that has a version::backbeat routes for replication (same account) should replicate/put a lifecycled NULL metadata to a destination that has a version
Stack Traces | 0.05s run time
No failure message available
should replicate/put metadata to a destination that has a previously updated null version::backbeat routes for replication (cross account) should replicate/put metadata to a destination that has a previously updated null version
Stack Traces | 0.05s run time
No failure message available
should update metadata of a suspended null version::backbeat routes null version should update metadata of a suspended null version
Stack Traces | 0.05s run time
No failure message available
should replicate/put metadata to a destination that has a suspended null version::backbeat routes for replication (same account) should replicate/put metadata to a destination that has a suspended null version
Stack Traces | 0.051s run time
No failure message available
should successfully replicate multiple versions and keep original order::backbeat routes for replication (cross account) should successfully replicate multiple versions and keep original order
Stack Traces | 0.051s run time
No failure message available
should replicate/put metadata to a destination that has a suspended null version::backbeat routes for replication (cross account) should replicate/put metadata to a destination that has a suspended null version
Stack Traces | 0.052s run time
No failure message available
should update null version if versioning suspended and null version has a version id andput version afterward::backbeat routes null version should update null version if versioning suspended and null version has a version id andput version afterward
Stack Traces | 0.052s run time
No failure message available
should update null version if versioning suspended and null version has a version id andput object afterward::backbeat routes null version should update null version if versioning suspended and null version has a version id andput object afterward
Stack Traces | 0.053s run time
No failure message available
should create a new null version if versioning suspended and delete marker null version::backbeat routes null version should create a new null version if versioning suspended and delete marker null version
Stack Traces | 0.055s run time
No failure message available
should successfully replicate a delete marker::backbeat routes for replication (same account) should successfully replicate a delete marker
Stack Traces | 0.055s run time
No failure message available
should successfully replicate multiple versions and keep original order::backbeat routes for replication (same account) should successfully replicate multiple versions and keep original order
Stack Traces | 0.057s run time
No failure message available
should replicate/put metadata to a destination that has a suspended null version with internal version::backbeat routes for replication (cross account) should replicate/put metadata to a destination that has a suspended null version with internal version
Stack Traces | 0.058s run time
No failure message available
should mimic null version replication by crrExistingObjects, then replicate version::backbeat routes for replication (cross account) should mimic null version replication by crrExistingObjects, then replicate version
Stack Traces | 0.065s run time
No failure message available
should update metadata of a suspended null version with internal version id::backbeat routes null version should update metadata of a suspended null version with internal version id
Stack Traces | 0.066s run time
No failure message available
should replicate/put metadata to a destination that has a suspended null version with internal version::backbeat routes for replication (same account) should replicate/put metadata to a destination that has a suspended null version with internal version
Stack Traces | 0.069s run time
No failure message available
should update current null version if versioning suspended and put a version afterwards::backbeat routes null version should update current null version if versioning suspended and put a version afterwards
Stack Traces | 0.072s run time
No failure message available
should update current null version if versioning suspended and put a null version afterwards::backbeat routes null version should update current null version if versioning suspended and put a null version afterwards
Stack Traces | 0.073s run time
No failure message available
should mimic null version replication by crrExistingObjects, then replicate version::backbeat routes for replication (same account) should mimic null version replication by crrExistingObjects, then replicate version
Stack Traces | 0.074s run time
No failure message available
should replicate/put metadata to a destination that has a previously updated null version::backbeat routes for replication (same account) should replicate/put metadata to a destination that has a previously updated null version
Stack Traces | 0.075s run time
No failure message available
should update metadata of a non-current null version::backbeat routes null version should update metadata of a non-current null version
Stack Traces | 0.078s run time
No failure message available
should update metadata of a current null version::backbeat routes null version should update metadata of a current null version
Stack Traces | 0.08s run time
No failure message available
should update current null version if versioning suspended::backbeat routes null version should update current null version if versioning suspended
Stack Traces | 0.082s run time
No failure message available
should not put delete tags if the source is not Azure and if-unmodified-since header is not provided::backbeat routes Batch Delete Route should not put delete tags if the source is not Azure and if-unmodified-since header is not provided
Stack Traces | 0.083s run time
No failure message available
should put an object to Azure based on bucket location::objectPutAPI with multiple backends should put an object to Azure based on bucket location
Stack Traces | 0.102s run time
No failure message available
should delete the object if the source is Azure and if-unmodified-since condition is met::backbeat routes Batch Delete Route should delete the object if the source is Azure and if-unmodified-since condition is met
Stack Traces | 0.105s run time
No failure message available
should not delete the object if the source is Azure and if-unmodified-since condition is not met::backbeat routes Batch Delete Route should not delete the object if the source is Azure and if-unmodified-since condition is not met
Stack Traces | 0.11s run time
No failure message available
should put an object to azure::objectPutAPI with multiple backends should put an object to azure
Stack Traces | 0.18s run time
No failure message available
should initiate a multipart upload with tags on AWS::Multipart Upload API with AWS Backend should initiate a multipart upload with tags on AWS
Stack Traces | 0.202s run time
No failure message available
should copy part to mem from AWS based on mpu location::ObjectCopyPutPart API with multiple backends should copy part to mem from AWS based on mpu location
Stack Traces | 0.224s run time
No failure message available
should initiate a multipart upload on AWS location with bucketMatch equals false::Multipart Upload API with AWS Backend should initiate a multipart upload on AWS location with bucketMatch equals false
Stack Traces | 0.232s run time
No failure message available
should put tags if the source is Azure and tags are provided when completing the multipart upload::backbeat routes backbeat multipart upload operations (external location) should put tags if the source is Azure and tags are provided when completing the multipart upload
Stack Traces | 0.238s run time
No failure message available
should initiate a multipart upload on real AWS::Multipart Upload API with AWS Backend should initiate a multipart upload on real AWS
Stack Traces | 0.286s run time
No failure message available
should complete MPU on file with same key as object put to AWS::Multipart Upload API with AWS Backend should complete MPU on file with same key as object put to AWS
Stack Traces | 0.287s run time
No failure message available
should be successful initiating MPU on AWS with Scality S3 versioning enabled::Multipart Upload API with AWS Backend should be successful initiating MPU on AWS with Scality S3 versioning enabled
Stack Traces | 0.296s run time
No failure message available
should return no error with flightCheckOnStartUp set to false::Healthcheck response should return no error with flightCheckOnStartUp set to false
Stack Traces | 0.372s run time
No failure message available
should put an object to AWS based on bucket location::objectPutAPI with multiple backends should put an object to AWS based on bucket location
Stack Traces | 0.396s run time
No failure message available
should put a part to AWS based on bucket location with bucketMatch set to true::objectPutPart API with multiple backends should put a part to AWS based on bucket location with bucketMatch set to true
Stack Traces | 0.4s run time
No failure message available
should put a part to AWS based on bucket location::objectPutPart API with multiple backends should put a part to AWS based on bucket location
Stack Traces | 0.404s run time
No failure message available
should put an object to AWS::objectPutAPI with multiple backends should put an object to AWS
Stack Traces | 0.406s run time
No failure message available
should put a part to AWS based on bucket location with bucketMatch set to false::objectPutPart API with multiple backends should put a part to AWS based on bucket location with bucketMatch set to false
Stack Traces | 0.43s run time
No failure message available
should put a part to AWS based on mpu location::objectPutPart API with multiple backends should put a part to AWS based on mpu location
Stack Traces | 0.521s run time
No failure message available
should copy part to AWS based on mpu location::ObjectCopyPutPart API with multiple backends should copy part to AWS based on mpu location
Stack Traces | 0.552s run time
No failure message available
should replace part if two parts uploaded with same part number to AWS::objectPutPart API with multiple backends should replace part if two parts uploaded with same part number to AWS
Stack Traces | 0.604s run time
No failure message available
should copy part to AWS based on bucket location::ObjectCopyPutPart API with multiple backends should copy part to AWS based on bucket location
Stack Traces | 0.66s run time
No failure message available
should copy part an object on AWS location that has bucketMatch equals false to a mpu with a different AWS location::ObjectCopyPutPart API with multiple backends should copy part an object on AWS location that has bucketMatch equals false to a mpu with a different AWS location
Stack Traces | 0.719s run time
No failure message available
should copy part an object on AWS to a mpu with a different AWS location that has bucketMatch equals false::ObjectCopyPutPart API with multiple backends should copy part an object on AWS to a mpu with a different AWS location that has bucketMatch equals false
Stack Traces | 0.722s run time
No failure message available
should abort a multipart upload on real AWS::Multipart Upload API with AWS Backend should abort a multipart upload on real AWS
Stack Traces | 0.909s run time
No failure message available
should list the parts of a multipart upload on real AWS::Multipart Upload API with AWS Backend should list the parts of a multipart upload on real AWS
Stack Traces | 0.933s run time
No failure message available
should only return number of parts equal to specified maxParts::Multipart Upload API with AWS Backend should only return number of parts equal to specified maxParts
Stack Traces | 0.97s run time
No failure message available
should return invalidPart error::Multipart Upload API with AWS Backend should return invalidPart error
Stack Traces | 0.978s run time
No failure message available
should list the parts of a multipart upload on real AWS location with bucketMatch set to false::Multipart Upload API with AWS Backend should list the parts of a multipart upload on real AWS location with bucketMatch set to false
Stack Traces | 0.995s run time
No failure message available
should return an error on listParts of deleted MPU::Multipart Upload API with AWS Backend should return an error on listParts of deleted MPU
Stack Traces | 1.03s run time
No failure message available
should return entityTooSmall error::Multipart Upload API with AWS Backend should return entityTooSmall error
Stack Traces | 1.03s run time
No failure message available
should remove old object data locations if version is overwritten with empty contents::backbeat routes backbeat PUT routes should remove old object data locations if version is overwritten with empty contents
Stack Traces | 1.03s run time
No failure message available
should create a new version when no versionId is passed in query string::backbeat routes backbeat PUT routes should create a new version when no versionId is passed in query string
Stack Traces | 1.03s run time
No failure message available
should remove old object data locations if version is overwritten with same contents::backbeat routes backbeat PUT routes should remove old object data locations if version is overwritten with same contents
Stack Traces | 1.04s run time
No failure message available
should only list parts after PartNumberMarker::Multipart Upload API with AWS Backend should only list parts after PartNumberMarker
Stack Traces | 1.05s run time
No failure message available
should create a new null version if versioning suspended and version has version id::backbeat routes null version should create a new null version if versioning suspended and version has version id
Stack Traces | 1.07s run time
No failure message available
should return invalidPartOrder error::Multipart Upload API with AWS Backend should return invalidPartOrder error
Stack Traces | 1.08s run time
No failure message available
should return ServiceUnavailable if MPU deleted directly from AWS and try to complete from S3::Multipart Upload API with AWS Backend should return ServiceUnavailable if MPU deleted directly from AWS and try to complete from S3
Stack Traces | 1.08s run time
No failure message available
should complete a multipart upload on real AWS location with bucketMatch set to false::Multipart Upload API with AWS Backend should complete a multipart upload on real AWS location with bucketMatch set to false
Stack Traces | 1.13s run time
No failure message available
should complete a multipart upload on real AWS::Multipart Upload API with AWS Backend should complete a multipart upload on real AWS
Stack Traces | 1.13s run time
No failure message available
should list all multipart uploads on all backends::Multipart Upload API with AWS Backend should list all multipart uploads on all backends
Stack Traces | 1.14s run time
No failure message available
should abort a multipart upload on real AWS location withbucketMatch set to false::Multipart Upload API with AWS Backend should abort a multipart upload on real AWS location withbucketMatch set to false
Stack Traces | 1.15s run time
No failure message available
should complete MPU on AWS with same key as object put to file::Multipart Upload API with AWS Backend should complete MPU on AWS with same key as object put to file
Stack Traces | 1.27s run time
No failure message available
should return result for every location constraint in locationConfig and every external locations with flightCheckOnStartUp set to true::Healthcheck response should return result for every location constraint in locationConfig and every external locations with flightCheckOnStartUp set to true
Stack Traces | 20s run time
Timeout of 20000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (.../tests/multipleBackend/backendHealthcheckResponse.js)
View the full list of 5 ❄️ flaky test(s)
should PUT tags for a non-versioned bucket (awslocation)::backbeat routes backbeat PUT routes should PUT tags for a non-versioned bucket (awslocation)

Flake rate in main: 29.73% (Passed 26 times, Failed 11 times)

Stack Traces | 0.248s run time
No failure message available
should batch delete a versioned AWS location::backbeat routes Batch Delete Route should batch delete a versioned AWS location

Flake rate in main: 29.73% (Passed 26 times, Failed 11 times)

Stack Traces | 0.21s run time
No failure message available
should not put tags if the source is not Azure and if-unmodified-since condition is not met::backbeat routes Batch Delete Route should not put tags if the source is not Azure and if-unmodified-since condition is not met

Flake rate in main: 29.73% (Passed 26 times, Failed 11 times)

Stack Traces | 0.19s run time
No failure message available
should put tags if the source is AWS and tags are provided when initiating the multipart upload::backbeat routes backbeat multipart upload operations (external location) should put tags if the source is AWS and tags are provided when initiating the multipart upload

Flake rate in main: 29.73% (Passed 26 times, Failed 11 times)

Stack Traces | 0.667s run time
No failure message available
should put tags if the source is not Azure and if-unmodified-since condition is met::backbeat routes Batch Delete Route should put tags if the source is not Azure and if-unmodified-since condition is met

Flake rate in main: 29.73% (Passed 26 times, Failed 11 times)

Stack Traces | 0.429s run time
No failure message available

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@tmacro tmacro changed the base branch from development/9.3 to development/9.2 April 28, 2026 17:50
@scality scality deleted a comment from bert-e Apr 28, 2026
@scality scality deleted a comment from bert-e Apr 28, 2026
@bert-e
Copy link
Copy Markdown
Contributor

bert-e commented Apr 28, 2026

Request integration branches

Waiting for integration branch creation to be requested by the user.

To request integration branches, please comment on this pull request with the following command:

/create_integration_branches

Alternatively, the /approve and /create_pull_requests commands will automatically
create the integration branches.

@tmacro tmacro force-pushed the improvement/CLDSRV-869/account_limiting branch from 951a9d8 to 57f02cb Compare April 28, 2026 17:54
@tmacro
Copy link
Copy Markdown
Contributor Author

tmacro commented Apr 28, 2026

/create_integration_branches

Comment thread lib/api/apiUtils/rateLimit/config.js
Comment thread lib/api/apiUtils/rateLimit/helpers.js
@claude
Copy link
Copy Markdown

claude Bot commented Apr 28, 2026

  • Breaking change in config validation (config.js): serviceUserArn is now required by the Joi schema even when rate limiting is disabled. Previously parseRateLimitConfig was only called when enabled: true, so this is a regression for users with "rateLimiting": {} or "rateLimiting": { "enabled": false } in their config — server will crash at startup.
    • Use Joi.when('enabled', { is: true, then: Joi.string().required(), otherwise: Joi.string() }) to make it conditionally required.
  • Misleading trace log (helpers.js:181): Log says "token consumed" before tryConsume() is actually called (line 191). Should say "capacity available" or similar.

Review by Claude Code

@bert-e
Copy link
Copy Markdown
Contributor

bert-e commented Apr 28, 2026

Waiting for approval

The following approvals are needed before I can proceed with the merge:

  • the author

  • 2 peers

The following options are set: create_integration_branches

@scality scality deleted a comment from bert-e Apr 28, 2026
@scality scality deleted a comment from bert-e Apr 28, 2026
Comment thread lib/api/apiUtils/rateLimit/config.js
Comment thread lib/api/apiUtils/rateLimit/helpers.js
@claude
Copy link
Copy Markdown

claude Bot commented Apr 28, 2026

  • Backward-incompatible config validation: serviceUserArn is now required by the Joi schema even when enabled: false. Previously parseRateLimitConfig was only called when enabled was true, so configs like rateLimiting: { enabled: false } or rateLimiting: {} worked fine. Now they crash on startup.
    • Make serviceUserArn conditionally required (only when enabled: true) using Joi.when()
  • Misleading trace log in checkRateLimitsForRequest (helpers.js:181): Logs "token consumed" inside the capacity-check loop, but actual consumption happens after the loop at line 191. If a later check denies the request, the log falsely claims tokens were consumed.
    • Change the message to "token available" or move logging after tryConsume()

Review by Claude Code

@tmacro
Copy link
Copy Markdown
Contributor Author

tmacro commented Apr 29, 2026

/approve

@bert-e
Copy link
Copy Markdown
Contributor

bert-e commented Apr 29, 2026

Build failed

The build for commit did not succeed in branch w/9.3/improvement/CLDSRV-869/account_limiting

The following options are set: approve, create_integration_branches

@bert-e
Copy link
Copy Markdown
Contributor

bert-e commented Apr 29, 2026

I have successfully merged the changeset of this pull request
into targetted development branches:

  • ✔️ development/9.2

  • ✔️ development/9.3

  • ✔️ development/9.4

The following branches have NOT changed:

  • development/7.10
  • development/7.4
  • development/7.70
  • development/8.8
  • development/9.0
  • development/9.1

Please check the status of the associated issue CLDSRV-869.

Goodbye tmacro.

The following options are set: approve, create_integration_branches

@bert-e bert-e merged commit 28e587a into development/9.2 Apr 29, 2026
33 checks passed
@bert-e bert-e deleted the improvement/CLDSRV-869/account_limiting branch April 29, 2026 16:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants