influxdata/influxdb · error · TableIndexError
Failed to list table index snapshots from object store
Error message
Failed to list table index snapshots from object store
What it means
TableIndexError::ListSnapshots wraps an object_store::Error raised while listing the snapshot objects referenced by a table index. The code issues list() against the snapshot prefix and collects entries into a Vec; any listing failure (network, auth, throttling) is mapped to this variant. The source object_store::Error identifies the exact cause.
Solutions
- Check #[source] object_store::Error for the HTTP status and operation
- Verify the identity has list permission on the bucket/prefix (e.g. s3:ListBucket)
- Retry with backoff — list failures are frequently transient throttling
- Confirm the configured bucket/endpoint matches the environment that wrote the snapshots
Example fix
// before: IAM policy missing list rights
{"Effect":"Deny","Action":"s3:ListBucket","Resource":"arn:aws:s3:::mybucket"}
// after
{"Effect":"Allow","Action":"s3:ListBucket","Resource":"arn:aws:s3:::mybucket"} Defensive patterns
Strategy: retry
Validate before calling
// pre-flight: confirm LIST permission on the snapshot prefix client.list(Some(snapshot_prefix)).next().await.transpose()?;
Type guard
fn is_list_snapshots(e: &TableIndexError) -> bool {
matches!(e, TableIndexError::ListSnapshots(_))
} Try / catch
match list_result {
Err(e) if is_list_snapshots(&e) => retry_with_backoff(list, 5),
other => other?,
} Prevention
- Grant s3:ListBucket / equivalent on the data prefix
- Configure request rate limits and retries in the object_store client
- Verify bucket/endpoint/region config at startup
- Watch for throttling (503 SlowDown) and add backoff
When it happens
Trigger: Calling the table-index snapshot enumeration path that does .collect::<Result<Vec<_>, _>>() over the object store list stream and maps the error to ListSnapshots (table_index.rs:380).
Common situations: S3/Azure/GCS throttling or 5xx during list pagination; misconfigured credentials that pass auth for GET but fail LIST; wrong bucket or prefix permissions (s3:ListBucket denied).
Related errors
- Failed to list table indices from object store
- Failed to create table index from object store
- Failed to delete table index
- Failed to list object store metadata
- Failed to list table index snapshots from object store
AI-assisted analysis of influxdata/influxdb@06200ef96b (2026-09-19).
Data as JSON: /api/errors/e1b9ddb177fc5584.
Report an issue: GitHub.
Appendix: source
Thrown at influxdb3_write/src/table_index.rs:31
use influxdb3_wal::SnapshotSequenceNumber;
use crate::{
ParquetFile, PersistedSnapshot, PersistedSnapshotVersion,
paths::{SnapshotInfoFilePath, TableIndexPath, TableIndexSnapshotPath},
};
#[derive(Debug, Error)]
pub enum TableIndexError {
#[error("Failed to load table index from object store")]
LoadIndex(#[source] object_store::Error),
#[error("Failed to deserialize table index")]
SerializeIndex(#[source] serde_json::Error),
#[error("Failed to deserialize table index")]
DeserializeIndex(#[source] serde_json::Error),
#[error("Failed to list table index snapshots from object store")]
ListSnapshots(#[source] object_store::Error),
#[error("Failed to list table indices from object store")]
ListIndices(#[source] object_store::Error),
#[error("Failed to load table index snapshot from object store")]
LoadSnapshot(#[source] object_store::Error),
#[error("Failed to deserialize table index snapshot")]
DeserializeSnapshot(#[source] serde_json::Error),
#[error("Failed to persist table index to object store")]
PersistIndex(#[source] object_store::Error),
#[error("Failed to delete table index snapshot from object store")]
DeleteSnapshot(#[source] object_store::Error),
#[error("Cannot merge table indices with mismatched identifiers: {expected} != {actual}")]View on GitHub (pinned to 06200ef96b)