awslabs / aws-sdk-kotlin

Multiplatform AWS SDK for Kotlin
Apache License 2.0
414 stars 49 forks source link

fix: correctly handle all empty HeadObject/HeadBucket responses #1378

Closed lauzadis closed 3 months ago

lauzadis commented 3 months ago

Previously we only checked for empty bodies with HTTP 404, but it seems like S3 also returns empty bodies for HTTP 403. This PR expands the handler logic to catch all empty bodies rather than just 404's.

Issue \

Closes https://github.com/awslabs/aws-sdk-kotlin/issues/1368

Description of changes

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

github-actions[bot] commented 3 months ago

A new generated diff is ready to view.

github-actions[bot] commented 3 months ago

Affected Artifacts

Changed in size | Artifact |Pull Request (bytes) | Latest Release (bytes) | Delta (bytes) | Delta (percentage) | | -------- | ------------------: | ---------------------: | ------------: | -----------------: | |iotdataplane-jvm.jar closure|8,187,479|8,187,472|7|0.00%| |internetmonitor-jvm.jar closure|8,678,588|8,678,581|7|0.00%| |supplychain-jvm.jar closure|8,100,571|8,100,565|6|0.00%| |amplifyuibuilder-jvm.jar closure|9,667,357|9,667,350|7|0.00%| |licensemanagerlinuxsubscriptions-jvm.jar closure|8,345,719|8,345,713|6|0.00%| |marketplaceagreement-jvm.jar closure|8,392,420|8,392,414|6|0.00%| |serverlessapplicationrepository-jvm.jar closure|8,464,296|8,464,290|6|0.00%| |swf-jvm.jar closure|10,083,047|10,083,040|7|0.00%| |codeguruprofiler-jvm.jar closure|8,748,769|8,748,763|6|0.00%| |translate-jvm.jar closure|8,798,249|8,798,243|6|0.00%| |elastictranscoder-jvm.jar closure|8,812,090|8,812,084|6|0.00%| |wisdom-jvm.jar closure|9,584,210|9,584,204|6|0.00%| |bedrock-jvm.jar closure|9,586,015|9,586,009|6|0.00%| |memorydb-jvm.jar closure|9,798,037|9,798,031|6|0.00%| |cloudwatchlogs-jvm.jar closure|10,405,794|10,405,788|6|0.00%| |codepipeline-jvm.jar closure|10,655,119|10,655,113|6|0.00%| |appflow-jvm.jar closure|10,839,684|10,839,678|6|0.00%| |codecommit-jvm.jar closure|12,223,608|12,223,602|6|0.00%| |s3-jvm.jar closure|12,222,316|12,233,825|-11,509|-0.09%| |kinesisvideowebrtcstorage-jvm.jar closure|7,987,693|8,006,337|-18,644|-0.23%| |s3-jvm.jar|4,261,320|4,272,833|-11,513|-0.27%| |ecr-jvm.jar closure|10,020,386|10,061,622|-41,236|-0.41%| |ecr-jvm.jar|2,143,992|2,185,232|-41,240|-1.89%| |datazone-jvm.jar closure|13,032,393|13,298,385|-265,992|-2.00%| |datazone-jvm.jar|5,155,999|5,421,995|-265,996|-4.91%| |kinesisvideowebrtcstorage-jvm.jar|111,299|129,947|-18,648|-14.35%|
lauzadis commented 3 months ago

question: do S3s 403 responses frequently contain payloads? I think we would still fail with the same Failed to parse response as ... exception if that's the case

HeadObject 403 never contains a payload. Here is a sample codegen:

private fun throwHeadObjectError(context: ExecutionContext, call: HttpCall, payload: ByteArray?): kotlin.Nothing {
    val wrappedResponse = call.response.withPayload(payload)
    val wrappedCall = call.copy(response = wrappedResponse)

    val errorDetails = try {
        if (payload == null) {
            if (call.response.status == HttpStatusCode.NotFound) {
                S3ErrorDetails(code = "NotFound")

            } else {
                S3ErrorDetails(code = call.response.status.toString())

            }
        } else {
            checkNotNull(payload) { "unable to parse error from empty response" }
            parseS3ErrorResponse(payload)

        }
    } catch (ex: Exception) {
        throw S3Exception("Failed to parse response as restXml").also {
            setS3ErrorMetadata(it, wrappedCall.response, null)
        }
    }
    val ex = when(errorDetails.code) {
        "NotFound" -> NotFoundDeserializer().deserialize(context, wrappedCall, payload)
        else -> S3Exception(errorDetails.message)
    }

    setS3ErrorMetadata(ex, wrappedResponse, errorDetails)
    throw ex
}

I'm not sure how a 403 with a non-null payload will get an Failed to parse response as restXml error exception thrown unless it's malformed.

github-actions[bot] commented 3 months ago

A new generated diff is ready to view.

github-actions[bot] commented 3 months ago

Affected Artifacts

Changed in size | Artifact |Pull Request (bytes) | Latest Release (bytes) | Delta (bytes) | Delta (percentage) | | -------- | ------------------: | ---------------------: | ------------: | -----------------: | |iotdataplane-jvm.jar closure|8,187,479|8,187,472|7|0.00%| |internetmonitor-jvm.jar closure|8,678,588|8,678,581|7|0.00%| |supplychain-jvm.jar closure|8,100,571|8,100,565|6|0.00%| |amplifyuibuilder-jvm.jar closure|9,667,357|9,667,350|7|0.00%| |licensemanagerlinuxsubscriptions-jvm.jar closure|8,345,719|8,345,713|6|0.00%| |marketplaceagreement-jvm.jar closure|8,392,420|8,392,414|6|0.00%| |serverlessapplicationrepository-jvm.jar closure|8,464,296|8,464,290|6|0.00%| |swf-jvm.jar closure|10,083,047|10,083,040|7|0.00%| |codeguruprofiler-jvm.jar closure|8,748,769|8,748,763|6|0.00%| |translate-jvm.jar closure|8,798,249|8,798,243|6|0.00%| |elastictranscoder-jvm.jar closure|8,812,090|8,812,084|6|0.00%| |wisdom-jvm.jar closure|9,584,210|9,584,204|6|0.00%| |bedrock-jvm.jar closure|9,586,015|9,586,009|6|0.00%| |memorydb-jvm.jar closure|9,798,037|9,798,031|6|0.00%| |cloudwatchlogs-jvm.jar closure|10,405,794|10,405,788|6|0.00%| |codepipeline-jvm.jar closure|10,655,119|10,655,113|6|0.00%| |appflow-jvm.jar closure|10,839,684|10,839,678|6|0.00%| |codecommit-jvm.jar closure|12,223,608|12,223,602|6|0.00%| |s3-jvm.jar closure|12,222,755|12,233,825|-11,070|-0.09%| |kinesisvideowebrtcstorage-jvm.jar closure|7,987,693|8,006,337|-18,644|-0.23%| |s3-jvm.jar|4,261,759|4,272,833|-11,074|-0.26%| |ecr-jvm.jar closure|10,020,386|10,061,622|-41,236|-0.41%| |ecr-jvm.jar|2,143,992|2,185,232|-41,240|-1.89%| |datazone-jvm.jar closure|13,032,393|13,298,385|-265,992|-2.00%| |datazone-jvm.jar|5,155,999|5,421,995|-265,996|-4.91%| |kinesisvideowebrtcstorage-jvm.jar|111,299|129,947|-18,648|-14.35%|
sonarcloud[bot] commented 3 months ago

Quality Gate Passed Quality Gate passed

Issues
0 New issues
0 Accepted issues

Measures
0 Security Hotspots
0.0% Coverage on New Code
0.0% Duplication on New Code

See analysis details on SonarCloud

github-actions[bot] commented 3 months ago

A new generated diff is ready to view.

github-actions[bot] commented 3 months ago

Affected Artifacts

Changed in size | Artifact |Pull Request (bytes) | Latest Release (bytes) | Delta (bytes) | Delta (percentage) | | -------- | ------------------: | ---------------------: | ------------: | -----------------: | |glacier-jvm.jar|1,237,625|1,236,141|1,484|0.12%| |route53-jvm.jar|2,952,572|2,951,554|1,018|0.03%| |aws-config-jvm.jar|983,186|983,001|185|0.02%| |glacier-jvm.jar closure|9,114,143|9,112,474|1,669|0.02%| |route53-jvm.jar closure|10,829,090|10,827,887|1,203|0.01%| |apigatewaymanagementapi-jvm.jar closure|8,018,577|8,018,391|186|0.00%| |inspectorscan-jvm.jar closure|8,021,596|8,021,410|186|0.00%| |sagemakermetrics-jvm.jar closure|7,980,341|7,980,156|185|0.00%| |marketplacecommerceanalytics-jvm.jar closure|8,033,606|8,033,420|186|0.00%| |cloudtraildata-jvm.jar closure|8,036,552|8,036,366|186|0.00%| |sso-jvm.jar closure|8,082,833|8,082,646|187|0.00%| |forecastquery-jvm.jar closure|8,040,821|8,040,635|186|0.00%| |supplychain-jvm.jar closure|8,100,695|8,100,508|187|0.00%| |marketplaceentitlementservice-jvm.jar closure|8,016,306|8,016,121|185|0.00%| |eksauth-jvm.jar closure|8,067,797|8,067,611|186|0.00%| |kinesisvideomedia-jvm.jar closure|8,029,731|8,029,546|185|0.00%| |kinesisvideosignaling-jvm.jar closure|8,045,740|8,045,555|185|0.00%| |freetier-jvm.jar closure|8,049,937|8,049,752|185|0.00%| |connectcontactlens-jvm.jar closure|8,096,853|8,096,667|186|0.00%| |iotdataplane-jvm.jar closure|8,187,603|8,187,415|188|0.00%| |workmailmessageflow-jvm.jar closure|8,025,660|8,025,476|184|0.00%| |personalizeruntime-jvm.jar closure|8,071,789|8,071,604|185|0.00%| |personalizeevents-jvm.jar closure|8,118,643|8,118,457|186|0.00%| |appconfigdata-jvm.jar closure|8,046,351|8,046,167|184|0.00%| |marketplacedeployment-jvm.jar closure|8,093,858|8,093,673|185|0.00%| |migrationhubconfig-jvm.jar closure|8,101,395|8,101,210|185|0.00%| |sagemakeredge-jvm.jar closure|8,103,019|8,102,834|185|0.00%| |qldbsession-jvm.jar closure|8,165,832|8,165,646|186|0.00%| |cloudfrontkeyvaluestore-jvm.jar closure|8,172,254|8,172,068|186|0.00%| |iotjobsdataplane-jvm.jar closure|8,132,292|8,132,107|185|0.00%| |ec2instanceconnect-jvm.jar closure|8,088,727|8,088,543|184|0.00%| |mediastoredata-jvm.jar closure|8,099,153|8,098,969|184|0.00%| |sagemakerfeaturestoreruntime-jvm.jar closure|8,150,646|8,150,461|185|0.00%| |sagemakera2iruntime-jvm.jar closure|8,153,156|8,152,971|185|0.00%| |dynamodbstreams-jvm.jar closure|8,197,812|8,197,626|186|0.00%| |route53recoverycluster-jvm.jar closure|8,155,105|8,154,920|185|0.00%| |cloudsearchdomain-jvm.jar closure|8,113,081|8,112,897|184|0.00%| |artifact-jvm.jar closure|8,204,305|8,204,119|186|0.00%| |elasticinference-jvm.jar closure|8,161,199|8,161,014|185|0.00%| |s3outposts-jvm.jar closure|8,171,545|8,171,360|185|0.00%| |iotfleethub-jvm.jar closure|8,175,507|8,175,322|185|0.00%| |sagemakerruntime-jvm.jar closure|8,180,905|8,180,720|185|0.00%| |pricing-jvm.jar closure|8,192,003|8,191,818|185|0.00%| |pinpointsmsvoice-jvm.jar closure|8,249,113|8,248,927|186|0.00%| |iotsecuretunneling-jvm.jar closure|8,209,168|8,208,983|185|0.00%| |ssooidc-jvm.jar closure|8,167,369|8,167,185|184|0.00%| |costandusagereportservice-jvm.jar closure|8,257,616|8,257,430|186|0.00%| |repostspace-jvm.jar closure|8,277,122|8,276,936|186|0.00%| |marketplacemetering-jvm.jar closure|8,240,131|8,239,946|185|0.00%| |rdsdata-jvm.jar closure|8,286,283|8,286,097|186|0.00%| |ebs-jvm.jar closure|8,245,249|8,245,064|185|0.00%| |marketplaceagreement-jvm.jar closure|8,392,544|8,392,356|188|0.00%| |sts-jvm.jar closure|8,261,760|8,261,575|185|0.00%| |applicationcostprofiler-jvm.jar closure|8,176,118|8,175,935|183|0.00%| |kendraranking-jvm.jar closure|8,267,260|8,267,075|185|0.00%| |controlcatalog-jvm.jar closure|8,238,839|8,238,655|184|0.00%| |oam-jvm.jar closure|8,419,210|8,419,022|188|0.00%| |resourcegroupstaggingapi-jvm.jar closure|8,292,382|8,292,197|185|0.00%| |licensemanagerlinuxsubscriptions-jvm.jar closure|8,345,843|8,345,657|186|0.00%| |iot1clickdevicesservice-jvm.jar closure|8,306,211|8,306,026|185|0.00%| |networkmonitor-jvm.jar closure|8,355,262|8,355,076|186|0.00%| |supportapp-jvm.jar closure|8,223,469|8,223,286|183|0.00%| |rbin-jvm.jar closure|8,329,376|8,329,191|185|0.00%| |ssmquicksetup-jvm.jar closure|8,344,174|8,343,989|185|0.00%| |connectparticipant-jvm.jar closure|8,350,323|8,350,138|185|0.00%| |account-jvm.jar closure|8,306,364|8,306,180|184|0.00%| |lexruntimeservice-jvm.jar closure|8,327,979|8,327,795|184|0.00%| |kinesisvideoarchivedmedia-jvm.jar closure|8,378,238|8,378,053|185|0.00%| |iot1clickprojects-jvm.jar closure|8,379,311|8,379,126|185|0.00%| |redshiftdata-jvm.jar closure|8,383,800|8,383,615|185|0.00%| |cloud9-jvm.jar closure|8,399,335|8,399,150|185|0.00%| |cloudcontrol-jvm.jar closure|8,399,509|8,399,324|185|0.00%| |launchwizard-jvm.jar closure|8,405,664|8,405,479|185|0.00%| |autoscalingplans-jvm.jar closure|8,411,435|8,411,250|185|0.00%| |timestreaminfluxdb-jvm.jar closure|8,420,958|8,420,773|185|0.00%| |pcaconnectorscep-jvm.jar closure|8,376,761|8,376,577|184|0.00%| |iotdeviceadvisor-jvm.jar closure|8,428,316|8,428,131|185|0.00%| |docdbelastic-jvm.jar closure|8,476,448|8,476,262|186|0.00%| |cloudhsm-jvm.jar closure|8,431,793|8,431,608|185|0.00%| |codestarnotifications-jvm.jar closure|8,436,244|8,436,059|185|0.00%| |licensemanagerusersubscriptions-jvm.jar closure|8,412,719|8,412,535|184|0.00%| |mwaa-jvm.jar closure|8,416,402|8,416,218|184|0.00%| |workspacesthinclient-jvm.jar closure|8,560,539|8,560,352|187|0.00%| |osis-jvm.jar closure|8,524,023|8,523,837|186|0.00%| |mediastore-jvm.jar closure|8,479,259|8,479,074|185|0.00%| |rum-jvm.jar closure|8,576,774|8,576,587|187|0.00%| |bcmdataexports-jvm.jar closure|8,490,794|8,490,609|185|0.00%| |route53profiles-jvm.jar closure|8,451,853|8,451,669|184|0.00%| |simspaceweaver-jvm.jar closure|8,500,039|8,499,854|185|0.00%| |cognitosync-jvm.jar closure|8,502,680|8,502,495|185|0.00%| |savingsplans-jvm.jar closure|8,463,960|8,463,776|184|0.00%| |serverlessapplicationrepository-jvm.jar closure|8,464,420|8,464,236|184|0.00%| |codestar-jvm.jar closure|8,561,066|8,560,880|186|0.00%| |opsworkscm-jvm.jar closure|8,562,355|8,562,169|186|0.00%| |qldb-jvm.jar closure|8,565,330|8,565,144|186|0.00%| |arczonalshift-jvm.jar closure|8,473,528|8,473,344|184|0.00%| |codegurusecurity-jvm.jar closure|8,523,303|8,523,118|185|0.00%| |healthlake-jvm.jar closure|8,489,824|8,489,640|184|0.00%| |migrationhub-jvm.jar closure|8,536,531|8,536,346|185|0.00%| |ivschat-jvm.jar closure|8,539,513|8,539,328|185|0.00%| |internetmonitor-jvm.jar closure|8,678,712|8,678,524|188|0.00%| |scheduler-jvm.jar closure|8,543,590|8,543,405|185|0.00%| |polly-jvm.jar closure|8,552,166|8,551,981|185|0.00%| |snowdevicemanagement-jvm.jar closure|8,510,623|8,510,439|184|0.00%| |taxsettings-jvm.jar closure|8,605,015|8,604,829|186|0.00%| |dlm-jvm.jar closure|8,570,828|8,570,643|185|0.00%| |pi-jvm.jar closure|8,524,596|8,524,412|184|0.00%| |support-jvm.jar closure|8,577,596|8,577,411|185|0.00%| |trustedadvisor-jvm.jar closure|8,534,493|8,534,309|184|0.00%| |transcribestreaming-jvm.jar closure|8,582,215|8,582,030|185|0.00%| |acm-jvm.jar closure|8,675,254|8,675,067|187|0.00%| |managedblockchainquery-jvm.jar closure|8,589,160|8,588,975|185|0.00%| |datapipeline-jvm.jar closure|8,595,363|8,595,178|185|0.00%| |health-jvm.jar closure|8,612,666|8,612,481|185|0.00%| |cloudhsmv2-jvm.jar closure|8,519,818|8,519,635|183|0.00%| |secretsmanager-jvm.jar closure|8,713,874|8,713,687|187|0.00%| |keyspaces-jvm.jar closure|8,671,869|8,671,683|186|0.00%| |identitystore-jvm.jar closure|8,631,647|8,631,462|185|0.00%| |resourceexplorer2-jvm.jar closure|8,635,318|8,635,133|185|0.00%| |resourcegroups-jvm.jar closure|8,637,442|8,637,257|185|0.00%| |ioteventsdata-jvm.jar closure|8,604,278|8,604,094|184|0.00%| |codeguruprofiler-jvm.jar closure|8,748,893|8,748,706|187|0.00%| |codegurureviewer-jvm.jar closure|8,689,505|8,689,320|185|0.00%| |connectcampaigns-jvm.jar closure|8,694,877|8,694,692|185|0.00%| |timestreamquery-jvm.jar closure|8,742,648|8,742,462|186|0.00%| |applicationautoscaling-jvm.jar closure|8,697,396|8,697,211|185|0.00%| |route53recoverycontrolconfig-jvm.jar closure|8,698,179|8,697,994|185|0.00%| |cognitoidentity-jvm.jar closure|8,702,835|8,702,650|185|0.00%| |backupgateway-jvm.jar closure|8,704,580|8,704,395|185|0.00%| |medicalimaging-jvm.jar closure|8,704,603|8,704,418|185|0.00%| |worklink-jvm.jar closure|8,758,928|8,758,742|186|0.00%| |chimesdkmeetings-jvm.jar closure|8,713,665|8,713,480|185|0.00%| |elastictranscoder-jvm.jar closure|8,812,214|8,812,027|187|0.00%| |servicequotas-jvm.jar closure|8,679,274|8,679,090|184|0.00%| |signer-jvm.jar closure|8,683,844|8,683,660|184|0.00%| |braket-jvm.jar closure|8,735,720|8,735,535|185|0.00%| |applicationsignals-jvm.jar closure|8,689,602|8,689,418|184|0.00%| |lexruntimev2-jvm.jar closure|8,744,648|8,744,463|185|0.00%| |emrserverless-jvm.jar closure|8,752,281|8,752,096|185|0.00%| |synthetics-jvm.jar closure|8,755,582|8,755,397|185|0.00%| |mediapackagevod-jvm.jar closure|8,720,258|8,720,074|184|0.00%| |servicecatalogappregistry-jvm.jar closure|8,729,802|8,729,618|184|0.00%| |schemas-jvm.jar closure|8,788,053|8,787,868|185|0.00%| |translate-jvm.jar closure|8,798,373|8,798,188|185|0.00%| |paymentcryptography-jvm.jar closure|8,805,042|8,804,857|185|0.00%| |mq-jvm.jar closure|8,805,982|8,805,797|185|0.00%| |rolesanywhere-jvm.jar closure|8,819,435|8,819,250|185|0.00%| |amp-jvm.jar closure|8,819,965|8,819,780|185|0.00%| |lookoutvision-jvm.jar closure|8,826,009|8,825,824|185|0.00%| |dax-jvm.jar closure|8,834,995|8,834,810|185|0.00%| |ssmsap-jvm.jar closure|8,805,817|8,805,633|184|0.00%| |cleanroomsml-jvm.jar closure|8,870,718|8,870,533|185|0.00%| |ecrpublic-jvm.jar closure|8,877,807|8,877,622|185|0.00%| |migrationhubrefactorspaces-jvm.jar closure|8,927,429|8,927,243|186|0.00%| |appfabric-jvm.jar closure|8,882,724|8,882,539|185|0.00%| |b2bi-jvm.jar closure|8,891,548|8,891,363|185|0.00%| |kafkaconnect-jvm.jar closure|8,906,563|8,906,378|185|0.00%| |codestarconnections-jvm.jar closure|8,910,309|8,910,124|185|0.00%| |grafana-jvm.jar closure|8,915,394|8,915,209|185|0.00%| |qapps-jvm.jar closure|8,872,882|8,872,698|184|0.00%| |paymentcryptographydata-jvm.jar closure|8,882,432|8,882,248|184|0.00%| |mediapackage-jvm.jar closure|8,883,321|8,883,137|184|0.00%| |chimesdkidentity-jvm.jar closure|8,942,034|8,941,849|185|0.00%| |codeconnections-jvm.jar closure|8,902,670|8,902,486|184|0.00%| |sqs-jvm.jar closure|8,866,154|8,865,971|183|0.00%| |timestreamwrite-jvm.jar closure|8,872,512|8,872,329|183|0.00%| |kinesisanalytics-jvm.jar closure|9,024,358|9,024,172|186|0.00%| |route53recoveryreadiness-jvm.jar closure|8,931,290|8,931,106|184|0.00%| |emrcontainers-jvm.jar closure|8,983,429|8,983,244|185|0.00%| |detective-jvm.jar closure|8,937,117|8,936,933|184|0.00%| |machinelearning-jvm.jar closure|8,987,720|8,987,535|185|0.00%| |applicationinsights-jvm.jar closure|8,991,176|8,990,991|185|0.00%| |neptunegraph-jvm.jar closure|8,994,050|8,993,865|185|0.00%| |fis-jvm.jar closure|8,996,935|8,996,750|185|0.00%| |finspacedata-jvm.jar closure|9,046,424|9,046,238|186|0.00%| |chatbot-jvm.jar closure|8,901,370|8,901,187|183|0.00%| |acmpca-jvm.jar closure|9,047,361|9,047,175|186|0.00%| |budgets-jvm.jar closure|9,062,209|9,062,023|186|0.00%| |securitylake-jvm.jar closure|9,023,915|9,023,730|185|0.00%| |privatenetworks-jvm.jar closure|8,927,032|8,926,849|183|0.00%| |cloudsearch-jvm.jar closure|9,026,837|9,026,652|185|0.00%| |migrationhuborchestrator-jvm.jar closure|9,076,762|9,076,576|186|0.00%| |mediapackagev2-jvm.jar closure|9,050,157|9,049,972|185|0.00%| |controltower-jvm.jar closure|8,955,874|8,955,691|183|0.00%| |comprehendmedical-jvm.jar closure|9,072,727|9,072,542|185|0.00%| |shield-jvm.jar closure|9,134,668|9,134,482|186|0.00%| |managedblockchain-jvm.jar closure|9,087,498|9,087,313|185|0.00%| |elasticloadbalancing-jvm.jar closure|9,088,151|9,087,966|185|0.00%| |bedrockruntime-jvm.jar closure|9,041,885|9,041,701|184|0.00%| |voiceid-jvm.jar closure|9,094,031|9,093,846|185|0.00%| |mturk-jvm.jar closure|9,097,079|9,096,894|185|0.00%| |outposts-jvm.jar closure|9,108,513|9,108,328|185|0.00%| |kinesis-jvm.jar closure|9,162,253|9,162,067|186|0.00%| |amplify-jvm.jar closure|9,116,866|9,116,681|185|0.00%| |ivs-jvm.jar closure|9,130,335|9,130,150|185|0.00%| |kinesisvideo-jvm.jar closure|9,130,751|9,130,566|185|0.00%| |iotthingsgraph-jvm.jar closure|9,136,249|9,136,064|185|0.00%| |ivsrealtime-jvm.jar closure|9,148,377|9,148,192|185|0.00%| |applicationdiscoveryservice-jvm.jar closure|9,149,437|9,149,252|185|0.00%| |servicediscovery-jvm.jar closure|9,154,536|9,154,351|185|0.00%| |snowball-jvm.jar closure|9,178,242|9,178,057|185|0.00%| |efs-jvm.jar closure|9,194,554|9,194,369|185|0.00%| |tnb-jvm.jar closure|9,154,169|9,153,985|184|0.00%| |amplifybackend-jvm.jar closure|9,227,245|9,227,060|185|0.00%| |opensearchserverless-jvm.jar closure|9,229,001|9,228,816|185|0.00%| |textract-jvm.jar closure|9,283,311|9,283,125|186|0.00%| |ssmincidents-jvm.jar closure|9,244,051|9,243,866|185|0.00%| |ssmcontacts-jvm.jar closure|9,308,913|9,308,727|186|0.00%| |appconfig-jvm.jar closure|9,265,400|9,265,215|185|0.00%| |xray-jvm.jar closure|9,316,891|9,316,705|186|0.00%| |sms-jvm.jar closure|9,286,981|9,286,796|185|0.00%| |ram-jvm.jar closure|9,248,188|9,248,004|184|0.00%| |codecatalyst-jvm.jar closure|9,304,316|9,304,131|185|0.00%| |pipes-jvm.jar closure|9,305,710|9,305,525|185|0.00%| |pcaconnectorad-jvm.jar closure|9,307,731|9,307,546|185|0.00%| |connectcases-jvm.jar closure|9,321,597|9,321,412|185|0.00%| |sns-jvm.jar closure|9,328,817|9,328,632|185|0.00%| |verifiedpermissions-jvm.jar closure|9,381,670|9,381,484|186|0.00%| |sagemakergeospatial-jvm.jar closure|9,334,884|9,334,699|185|0.00%| |pinpointemail-jvm.jar closure|9,337,206|9,337,021|185|0.00%| |marketplacecatalog-jvm.jar closure|9,292,609|9,292,425|184|0.00%| |greengrassv2-jvm.jar closure|9,294,258|9,294,074|184|0.00%| |route53domains-jvm.jar closure|9,359,932|9,359,747|185|0.00%| |m2-jvm.jar closure|9,372,105|9,371,920|185|0.00%| |iotevents-jvm.jar closure|9,372,203|9,372,018|185|0.00%| |apprunner-jvm.jar closure|9,376,381|9,376,196|185|0.00%| |panorama-jvm.jar closure|9,388,042|9,387,857|185|0.00%| |lookoutmetrics-jvm.jar closure|9,422,459|9,422,274|185|0.00%| |billingconductor-jvm.jar closure|9,475,945|9,475,759|186|0.00%| |groundstation-jvm.jar closure|9,491,019|9,490,833|186|0.00%| |inspector-jvm.jar closure|9,472,533|9,472,348|185|0.00%| |evidently-jvm.jar closure|9,490,272|9,490,087|185|0.00%| |lexmodelbuildingservice-jvm.jar closure|9,544,131|9,543,945|186|0.00%| |neptunedata-jvm.jar closure|9,546,006|9,545,820|186|0.00%| |amplifyuibuilder-jvm.jar closure|9,667,481|9,667,293|188|0.00%| |apptest-jvm.jar closure|9,462,210|9,462,026|184|0.00%| |entityresolution-jvm.jar closure|9,474,770|9,474,586|184|0.00%| |wisdom-jvm.jar closure|9,584,334|9,584,148|186|0.00%| |bedrock-jvm.jar closure|9,586,139|9,585,953|186|0.00%| |dataexchange-jvm.jar closure|9,544,783|9,544,598|185|0.00%| |migrationhubstrategy-jvm.jar closure|9,493,419|9,493,235|184|0.00%| |cloudwatch-jvm.jar closure|9,546,138|9,545,953|185|0.00%| |codeartifact-jvm.jar closure|9,551,514|9,551,329|185|0.00%| |workspacesweb-jvm.jar closure|9,567,232|9,567,047|185|0.00%| |vpclattice-jvm.jar closure|9,668,321|9,668,135|186|0.00%| |redshiftserverless-jvm.jar closure|9,671,018|9,670,832|186|0.00%| |iotanalytics-jvm.jar closure|9,647,346|9,647,161|185|0.00%| |chimesdkmessaging-jvm.jar closure|9,649,211|9,649,026|185|0.00%| |mediatailor-jvm.jar closure|9,659,351|9,659,166|185|0.00%| |firehose-jvm.jar closure|9,701,391|9,701,206|185|0.00%| |lookoutequipment-jvm.jar closure|9,724,546|9,724,361|185|0.00%| |workdocs-jvm.jar closure|9,738,584|9,738,399|185|0.00%| |transcribe-jvm.jar closure|9,790,005|9,789,820|185|0.00%| |sfn-jvm.jar closure|9,795,505|9,795,320|185|0.00%| |memorydb-jvm.jar closure|9,798,161|9,797,976|185|0.00%| |databrew-jvm.jar closure|9,807,082|9,806,897|185|0.00%| |globalaccelerator-jvm.jar closure|9,843,914|9,843,729|185|0.00%| |licensemanager-jvm.jar closure|9,915,135|9,914,949|186|0.00%| |batch-jvm.jar closure|9,873,094|9,872,909|185|0.00%| |finspace-jvm.jar closure|9,828,838|9,828,654|184|0.00%| |nimble-jvm.jar closure|9,895,595|9,895,410|185|0.00%| |devopsguru-jvm.jar closure|9,900,099|9,899,914|185|0.00%| |directconnect-jvm.jar closure|9,954,078|9,953,892|186|0.00%| |cloudwatchevents-jvm.jar closure|9,910,570|9,910,385|185|0.00%| |kms-jvm.jar closure|9,992,576|9,992,390|186|0.00%| |networkfirewall-jvm.jar closure|9,831,421|9,831,238|183|0.00%| |qconnect-jvm.jar closure|9,995,188|9,995,003|185|0.00%| |apigatewayv2-jvm.jar closure|10,003,190|10,003,005|185|0.00%| |accessanalyzer-jvm.jar closure|9,959,931|9,959,747|184|0.00%| |mailmanager-jvm.jar closure|10,020,432|10,020,247|185|0.00%| |iottwinmaker-jvm.jar closure|10,023,123|10,022,938|185|0.00%| |swf-jvm.jar closure|10,083,171|10,082,985|186|0.00%| |organizations-jvm.jar closure|10,032,779|10,032,594|185|0.00%| |fms-jvm.jar closure|10,047,437|10,047,252|185|0.00%| |chimesdkmediapipelines-jvm.jar closure|10,001,526|10,001,342|184|0.00%| |lakeformation-jvm.jar closure|10,057,752|10,057,567|185|0.00%| |elasticbeanstalk-jvm.jar closure|10,009,898|10,009,714|184|0.00%| |eventbridge-jvm.jar closure|10,164,906|10,164,721|185|0.00%| |location-jvm.jar closure|10,165,219|10,165,034|185|0.00%| |auditmanager-jvm.jar closure|10,110,295|10,110,111|184|0.00%| |athena-jvm.jar closure|10,203,210|10,203,025|185|0.00%| |docdb-jvm.jar closure|10,259,020|10,258,834|186|0.00%| |ssoadmin-jvm.jar closure|10,259,817|10,259,631|186|0.00%| |appsync-jvm.jar closure|10,211,211|10,211,026|185|0.00%| |transfer-jvm.jar closure|10,224,047|10,223,862|185|0.00%| |opsworks-jvm.jar closure|10,287,812|10,287,626|186|0.00%| |iotfleetwise-jvm.jar closure|10,236,056|10,235,871|185|0.00%| |drs-jvm.jar closure|10,240,697|10,240,512|185|0.00%| |elasticloadbalancingv2-jvm.jar closure|10,246,181|10,245,996|185|0.00%| |kinesisanalyticsv2-jvm.jar closure|10,258,300|10,258,115|185|0.00%| |mediaconnect-jvm.jar closure|10,268,714|10,268,529|185|0.00%| |ses-jvm.jar closure|10,278,651|10,278,466|185|0.00%| |kafka-jvm.jar closure|10,278,895|10,278,710|185|0.00%| |elasticsearchservice-jvm.jar closure|10,347,130|10,346,944|186|0.00%| |cloudtrail-jvm.jar closure|10,296,903|10,296,718|185|0.00%| |datasync-jvm.jar closure|10,297,649|10,297,464|185|0.00%| |codebuild-jvm.jar closure|10,307,845|10,307,660|185|0.00%| |workmail-jvm.jar closure|10,366,744|10,366,558|186|0.00%| |costexplorer-jvm.jar closure|10,311,103|10,310,918|185|0.00%| |route53resolver-jvm.jar closure|10,271,005|10,270,821|184|0.00%| |customerprofiles-jvm.jar closure|10,274,138|10,273,954|184|0.00%| |robomaker-jvm.jar closure|10,351,066|10,350,881|185|0.00%| |frauddetector-jvm.jar closure|10,409,769|10,409,583|186|0.00%| |resiliencehub-jvm.jar closure|10,373,679|10,373,494|185|0.00%| |forecast-jvm.jar closure|10,385,069|10,384,884|185|0.00%| |cloudwatchlogs-jvm.jar closure|10,405,918|10,405,733|185|0.00%| |directoryservice-jvm.jar closure|10,429,871|10,429,686|185|0.00%| |personalize-jvm.jar closure|10,499,617|10,499,432|185|0.00%| |appstream-jvm.jar closure|10,500,773|10,500,588|185|0.00%| |codepipeline-jvm.jar closure|10,655,243|10,655,056|187|0.00%| |eks-jvm.jar closure|10,492,885|10,492,701|184|0.00%| |wellarchitected-jvm.jar closure|10,554,429|10,554,244|185|0.00%| |greengrass-jvm.jar closure|10,469,335|10,469,152|183|0.00%| |computeoptimizer-jvm.jar closure|10,682,082|10,681,896|186|0.00%| |storagegateway-jvm.jar closure|10,636,901|10,636,716|185|0.00%| |devicefarm-jvm.jar closure|10,660,080|10,659,895|185|0.00%| |autoscaling-jvm.jar closure|10,697,675|10,697,490|185|0.00%| |waf-jvm.jar closure|10,703,619|10,703,434|185|0.00%| |emr-jvm.jar closure|10,715,949|10,715,765|184|0.00%| |chimesdkvoice-jvm.jar closure|10,721,343|10,721,159|184|0.00%| |appflow-jvm.jar closure|10,839,808|10,839,622|186|0.00%| |wafregional-jvm.jar closure|10,838,024|10,837,839|185|0.00%| |qbusiness-jvm.jar closure|10,853,088|10,852,903|185|0.00%| |clouddirectory-jvm.jar closure|10,983,917|10,983,730|187|0.00%| |lambda-jvm.jar closure|10,876,718|10,876,533|185|0.00%| |appmesh-jvm.jar closure|10,765,730|10,765,547|183|0.00%| |servicecatalog-jvm.jar closure|10,956,020|10,955,834|186|0.00%| |proton-jvm.jar closure|10,900,452|10,900,267|185|0.00%| |backup-jvm.jar closure|10,905,504|10,905,319|185|0.00%| |neptune-jvm.jar closure|10,924,362|10,924,177|185|0.00%| |mgn-jvm.jar closure|10,877,126|10,876,943|183|0.00%| |fsx-jvm.jar closure|11,012,655|11,012,470|185|0.00%| |codedeploy-jvm.jar closure|11,021,823|11,021,638|185|0.00%| |networkmanager-jvm.jar closure|11,079,560|11,079,375|185|0.00%| |opensearch-jvm.jar closure|11,091,546|11,091,361|185|0.00%| |omics-jvm.jar closure|11,146,497|11,146,313|184|0.00%| |dynamodb-jvm.jar closure|11,262,339|11,262,154|185|0.00%| |bedrockagent-jvm.jar closure|11,265,958|11,265,773|185|0.00%| |sesv2-jvm.jar closure|11,210,642|11,210,458|184|0.00%| |wafv2-jvm.jar closure|11,346,368|11,346,182|186|0.00%| |imagebuilder-jvm.jar closure|11,312,580|11,312,395|185|0.00%| |cleanrooms-jvm.jar closure|11,400,363|11,400,178|185|0.00%| |ecs-jvm.jar closure|11,351,914|11,351,730|184|0.00%| |apigateway-jvm.jar closure|11,437,802|11,437,617|185|0.00%| |pinpointsmsvoicev2-jvm.jar closure|11,342,158|11,341,975|183|0.00%| |comprehend-jvm.jar closure|11,565,837|11,565,652|185|0.00%| |iotsitewise-jvm.jar closure|11,652,852|11,652,667|185|0.00%| |elasticache-jvm.jar closure|11,657,133|11,656,948|185|0.00%| |macie2-jvm.jar closure|11,671,971|11,671,786|185|0.00%| |cloudformation-jvm.jar closure|11,687,369|11,687,184|185|0.00%| |guardduty-jvm.jar closure|11,768,142|11,767,957|185|0.00%| |rekognition-jvm.jar closure|11,820,810|11,820,625|185|0.00%| |s3control-jvm.jar closure|11,915,854|11,915,669|185|0.00%| |inspector2-jvm.jar closure|12,012,691|12,012,506|185|0.00%| |iotwireless-jvm.jar closure|12,021,770|12,021,585|185|0.00%| |kendra-jvm.jar closure|12,105,459|12,105,274|185|0.00%| |deadline-jvm.jar closure|12,144,362|12,144,177|185|0.00%| |gamelift-jvm.jar closure|12,215,423|12,215,238|185|0.00%| |codecommit-jvm.jar closure|12,223,732|12,223,547|185|0.00%| |databasemigrationservice-jvm.jar closure|12,343,436|12,343,252|184|0.00%| |iam-jvm.jar closure|12,450,621|12,450,436|185|0.00%| |configservice-jvm.jar closure|12,657,199|12,657,014|185|0.00%| |pinpoint-jvm.jar closure|13,098,658|13,098,473|185|0.00%| |chime-jvm.jar closure|13,451,528|13,451,344|184|0.00%| |lightsail-jvm.jar closure|13,701,831|13,701,647|184|0.00%| |redshift-jvm.jar closure|13,821,912|13,821,727|185|0.00%| |cloudfront-jvm.jar closure|13,803,449|13,803,265|184|0.00%| |lexmodelsv2-jvm.jar closure|14,235,714|14,235,529|185|0.00%| |mediaconvert-jvm.jar closure|14,396,924|14,396,739|185|0.00%| |rds-jvm.jar closure|15,273,583|15,273,398|185|0.00%| |ssm-jvm.jar closure|15,424,933|15,424,747|186|0.00%| |medialive-jvm.jar closure|15,685,115|15,684,930|185|0.00%| |iot-jvm.jar closure|16,914,688|16,914,503|185|0.00%| |connect-jvm.jar closure|18,380,519|18,380,334|185|0.00%| |securityhub-jvm.jar closure|19,775,370|19,775,185|185|0.00%| |quicksight-jvm.jar closure|25,557,286|25,557,101|185|0.00%| |sagemaker-jvm.jar closure|26,474,497|26,474,312|185|0.00%| |ec2-jvm.jar closure|35,582,170|35,581,985|185|0.00%| |workspaces-jvm.jar closure|11,328,977|11,329,934|-957|-0.01%| |workspaces-jvm.jar|3,452,459|3,453,601|-1,142|-0.03%| |costoptimizationhub-jvm.jar closure|8,743,635|8,758,625|-14,990|-0.17%| |s3-jvm.jar closure|12,212,147|12,233,764|-21,617|-0.18%| |kinesisvideowebrtcstorage-jvm.jar closure|7,987,817|8,006,273|-18,456|-0.23%| |cognitoidentityprovider-jvm.jar closure|11,903,779|11,939,374|-35,595|-0.30%| |bedrockagentruntime-jvm.jar closure|9,501,512|9,534,893|-33,381|-0.35%| |ecr-jvm.jar closure|10,020,510|10,061,565|-41,055|-0.41%| |s3-jvm.jar|4,251,027|4,272,829|-21,802|-0.51%| |cognitoidentityprovider-jvm.jar|4,027,261|4,063,041|-35,780|-0.88%| |appintegrations-jvm.jar closure|8,659,085|8,760,491|-101,406|-1.16%| |glue-jvm.jar closure|18,319,921|18,550,238|-230,317|-1.24%| |costoptimizationhub-jvm.jar|867,117|882,292|-15,175|-1.72%| |ecr-jvm.jar|2,143,992|2,185,232|-41,240|-1.89%| |datazone-jvm.jar closure|13,032,517|13,298,328|-265,811|-2.00%| |bedrockagentruntime-jvm.jar|1,540,392|1,573,958|-33,566|-2.13%| |glue-jvm.jar|10,443,403|10,673,905|-230,502|-2.16%| |datazone-jvm.jar|5,155,999|5,421,995|-265,996|-4.91%| |appintegrations-jvm.jar|782,567|884,158|-101,591|-11.49%| |kinesisvideowebrtcstorage-jvm.jar|111,299|129,940|-18,641|-14.35%|