quickwit-oss/quickwit · error · anyhow::Error
no stream summary was returned from AWS
Error message
no stream summary was returned from AWS
What it means
When describing a Kinesis stream, AWS may respond without the `stream_description` member. The client expects exactly one StreamDescriptionSummary and treats a missing one as an unexpected response, failing with this error instead of proceeding with `None`.
Source
Thrown at quickwit/quickwit-indexing/src/source/kinesis/api.rs:183
/// Provides a summarized description of the specified Kinesis data stream without the shard
/// list. https://docs.aws.amazon.com/kinesis/latest/APIReference/API_DescribeStreamSummary.html
pub(crate) async fn describe_stream(
kinesis_client: &KinesisClient,
stream_name: &str,
) -> anyhow::Result<StreamDescription> {
let response = aws_retry(&DEFAULT_RETRY_PARAMS, || async {
kinesis_client
.describe_stream()
.stream_name(stream_name.to_string())
.send()
.await
})
.await?;
response
.stream_description
.ok_or_else(|| anyhow!("no stream summary was returned from AWS"))
}
/// Lists the Kinesis data streams.
/// https://docs.aws.amazon.com/kinesis/latest/APIReference/API_ListStreams.html
pub(crate) async fn list_streams(
kinesis_client: &KinesisClient,
mut exclusive_start_stream_name: Option<String>,
limit_per_request: Option<usize>,
) -> anyhow::Result<BTreeSet<String>> {
let mut stream_names = BTreeSet::new();
let mut has_more_streams = true;
let limit_per_request = limit_per_request.map(|limit| limit as i32);
while has_more_streams {
let response = aws_retry(&DEFAULT_RETRY_PARAMS, || async {
kinesis_client
.list_streams()
.set_exclusive_start_stream_name(exclusive_start_stream_name.clone())
.set_limit(limit_per_request)
.send()View on GitHub (pinned to a39730c5cd)
Solutions
- Verify the stream name and region in the Kinesis source config point to an existing active stream.
- Retry the source startup once the stream is in ACTIVE state (check `aws kinesis describe-stream-summary`).
- If using a custom endpoint (LocalStack/proxy), verify it returns a full DescribeStream response.
- Check IAM permissions for `kinesis:DescribeStream` and confirm no deletion of the stream is in progress.
Defensive patterns
Strategy: retry
Try / catch
match result {
Err(e) if e.to_string().contains("no stream summary was returned from AWS") => {
// verify stream exists and is ACTIVE, then retry with backoff
}
other => other?,
} Prevention
- Confirm the stream exists and is ACTIVE before starting the source.
- Use the correct AWS region/endpoint in the Kinesis source config.
- Ensure full DescribeStream responses (beware of proxies/LocalStack quirks).
- Grant kinesis:DescribeStream permissions to the indexer's role.
When it happens
Trigger: Calling `describe_stream` (used by `wait_for_stream_status` while a source starts up) against an AWS Kinesis endpoint whose DescribeStream response lacks `stream_description` — e.g. stream in a transient/deleting state or a proxied/misbehaving endpoint returning a partial response.
Common situations: Source startup racing with stream deletion/recreation, wrong AWS region or endpoint (custom endpoint/proxy like LocalStack) returning minimal responses, or IAM-limited setups where the response shape is altered.
Understand the failure class
Background: "invalid response format", "malformed payload", "missing data field": when an API returns 200 but the response shape is wrong — this error's family across 23 libraries.
Related errors
- unable to sniff region from environment
- created function has no version number
- Quickwit was compiled without the `kinesis` feature
- Partition is owned by this indexing pipeline but is not at t
- fatal_error (non-retryable batch error propagated via bail!)
AI-assisted analysis of quickwit-oss/quickwit@a39730c5cd (2026-09-08).
Data as JSON: /api/errors/8651ac47eb806597.
Report an issue: GitHub.