aws-sdk-rust
aws-sdk-rust copied to clipboard
next token did not change is not always a bug
Describe the bug
The generated code currently assumes that an unchanged next token returned from AWS is a bug and returns an error (generator code here).
However, at least the AWS CloudWatch logs GetLogEvents token has an expected behavior for not changing the token, in both the forward & backward direction:
The token for the next set of items in the backward direction. The token expires after 24 hours. This token is never null. If you have reached the end of the stream, it returns the same token you passed in.
The token for the next set of items in the forward direction. The token expires after 24 hours. If you have reached the end of the stream, it returns the same token you passed in.
When using this API with the paginator, we see this error on every call (at least with more than one page).
Expected Behavior
Pagination works correctly with no errors.
Current Behavior
Probably not particularly interesting, but we see the expected error due to the faulty implementation:
Error: failed to construct request: next token did not change, aborting paginator. This indicates an SDK or AWS service bug.
Reproduction Steps
let client = aws_sdk_cloudwatchlogs::Client::new(&config);
let mut events_pages = client
.get_log_events()
.log_group_name(group)
.log_stream_name(stream)
.start_from_head(true)
.into_paginator()
.send();
while let Some(page) = events_pages.next().await {
let page = page?; // Error comes from here.
}
Possible Solution
No response
Additional Information/Context
No response
Version
├── aws-config v0.47.0
│ ├── aws-http v0.47.0
│ │ ├── aws-smithy-http v0.47.0
│ │ │ ├── aws-smithy-types v0.47.0
│ │ ├── aws-smithy-types v0.47.0 (*)
│ │ ├── aws-types v0.47.0
│ │ │ ├── aws-smithy-async v0.47.0
│ │ │ ├── aws-smithy-client v0.47.0
│ │ │ │ ├── aws-smithy-async v0.47.0 (*)
│ │ │ │ ├── aws-smithy-http v0.47.0 (*)
│ │ │ │ ├── aws-smithy-http-tower v0.47.0
│ │ │ │ │ ├── aws-smithy-http v0.47.0 (*)
│ │ │ │ ├── aws-smithy-types v0.47.0 (*)
│ │ │ ├── aws-smithy-http v0.47.0 (*)
│ │ │ ├── aws-smithy-types v0.47.0 (*)
│ ├── aws-sdk-sso v0.17.0
│ │ ├── aws-endpoint v0.47.0
│ │ │ ├── aws-smithy-http v0.47.0 (*)
│ │ │ ├── aws-types v0.47.0 (*)
│ │ ├── aws-http v0.47.0 (*)
│ │ ├── aws-sig-auth v0.47.0
│ │ │ ├── aws-sigv4 v0.47.0
│ │ │ │ ├── aws-smithy-http v0.47.0 (*)
│ │ │ ├── aws-smithy-http v0.47.0 (*)
│ │ │ ├── aws-types v0.47.0 (*)
│ │ ├── aws-smithy-async v0.47.0 (*)
│ │ ├── aws-smithy-client v0.47.0 (*)
│ │ ├── aws-smithy-http v0.47.0 (*)
│ │ ├── aws-smithy-http-tower v0.47.0 (*)
│ │ ├── aws-smithy-json v0.47.0
│ │ │ └── aws-smithy-types v0.47.0 (*)
│ │ ├── aws-smithy-types v0.47.0 (*)
│ │ ├── aws-types v0.47.0 (*)
│ ├── aws-sdk-sts v0.17.0
│ │ ├── aws-endpoint v0.47.0 (*)
│ │ ├── aws-http v0.47.0 (*)
│ │ ├── aws-sig-auth v0.47.0 (*)
│ │ ├── aws-smithy-async v0.47.0 (*)
│ │ ├── aws-smithy-client v0.47.0 (*)
│ │ ├── aws-smithy-http v0.47.0 (*)
│ │ ├── aws-smithy-http-tower v0.47.0 (*)
│ │ ├── aws-smithy-query v0.47.0
│ │ │ ├── aws-smithy-types v0.47.0 (*)
│ │ ├── aws-smithy-types v0.47.0 (*)
│ │ ├── aws-smithy-xml v0.47.0
│ │ ├── aws-types v0.47.0 (*)
│ ├── aws-smithy-async v0.47.0 (*)
│ ├── aws-smithy-client v0.47.0 (*)
│ ├── aws-smithy-http v0.47.0 (*)
│ ├── aws-smithy-http-tower v0.47.0 (*)
│ ├── aws-smithy-json v0.47.0 (*)
│ ├── aws-smithy-types v0.47.0 (*)
│ ├── aws-types v0.47.0 (*)
├── aws-sdk-cloudwatchlogs v0.17.0
│ ├── aws-endpoint v0.47.0 (*)
│ ├── aws-http v0.47.0 (*)
│ ├── aws-sig-auth v0.47.0 (*)
│ ├── aws-smithy-async v0.47.0 (*)
│ ├── aws-smithy-client v0.47.0 (*)
│ ├── aws-smithy-http v0.47.0 (*)
│ ├── aws-smithy-http-tower v0.47.0 (*)
│ ├── aws-smithy-json v0.47.0 (*)
│ ├── aws-smithy-types v0.47.0 (*)
│ ├── aws-types v0.47.0 (*)
├── aws-sdk-dynamodb v0.17.0
│ ├── aws-endpoint v0.47.0 (*)
│ ├── aws-http v0.47.0 (*)
│ ├── aws-sig-auth v0.47.0 (*)
│ ├── aws-smithy-async v0.47.0 (*)
│ ├── aws-smithy-client v0.47.0 (*)
│ ├── aws-smithy-http v0.47.0 (*)
│ ├── aws-smithy-http-tower v0.47.0 (*)
│ ├── aws-smithy-json v0.47.0 (*)
│ ├── aws-smithy-types v0.47.0 (*)
│ ├── aws-types v0.47.0 (*)
├── aws-types v0.47.0 (*)
Environment details (OS name and version, etc.)
AL2, but likely not relevant.
Logs
No response
Thanks for reporting this! It definitely looks like a bug. The spec specifically calls out this use-case:
If a client receives an identical continuation token from a service in back to back calls, then the client MAY choose to stop sending requests. This scenario implies a "tail" style API operation where clients are running in an infinite loop to send requests to a service in order to retrieve results as they are available.
The fix for this will go out in the next release.
The fix for this was released in release-2022-10-26
.
⚠️COMMENT VISIBILITY WARNING⚠️
Comments on closed issues are hard for our team to see. If you need more assistance, please either tag a team member or open a new issue that references this one. If you wish to keep having a conversation with other community members under this issue feel free to do so.