Fix S3 ListParts pagination infinite loop (#3679)
## Motivation and Context <!--- Why is this change required? What problem does it solve? --> <!--- If it fixes an open issue, please link to the issue here --> The paginator for the S3 `ListParts` operation could loop forever: https://github.com/awslabs/aws-sdk-rust/issues/1143. This is because most paginated operations use an empty next token as an indication that pagination is exhausted. `ListParts` instead sets the final next token as `0` causing the pagination to loop back to the first page and loop forever. Instead of an empty next token `ListParts` uses `IsTruncated = false` to indicate that pagination has been exhausted. ## Description <!--- Describe your changes in detail --> * Added a new trait `isTruncatedPaginatorTrait` * Add that trait to the S3 `ListPartsOutput` shape * Use the presence of that trait to vary the logic setting the `is_empty` value in the paginator. * If the trait is absent it looks for an empty next token as always * if the trait is present the value is set based on the value of the response's `is_truncated` field ## Testing <!--- Please describe in detail how you tested your changes --> <!--- Include details of your testing environment, and the tests you ran to --> <!--- see how your change affects other areas of the code, etc. --> * Added integration test confirming that pagination terminates when a response contains `is_truncated = false` **Note:** I'm still working on turning this into a model test rather than an S3 specific integration test, but I wanted to get some feedback on the actual fix while I'm figuring that out) ## Checklist <!--- If a checkbox below is not applicable, then please DELETE it rather than leaving it unchecked --> - [x] I have updated `CHANGELOG.next.toml` if I made changes to the smithy-rs codegen or runtime crates - [x] I have updated `CHANGELOG.next.toml` if I made changes to the AWS SDK, generated SDK code, or SDK runtime crates ---- _By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice._
Loading
Please register or sign in to comment