influxdata/influxdb · error · TableIndexError
Failed to list table indices from object store
Error message
Failed to list table indices from object store
What it means
TableIndexError::ListIndices wraps an object_store::Error raised while listing table index objects from the object store (e.g. enumerating per-table index keys). Listing the indices prefix failed for transport, auth, or permission reasons and the error is wrapped with the source preserved. This occurs during bootstrap/scan of all table indices.
Solutions
- Inspect #[source] object_store::Error for the failing operation and status code
- Grant LIST permission on the table-index prefix to the configured credentials
- Retry after verifying object-store health (status page, throttling limits)
- Verify the bucket and prefix configuration matches the cluster that wrote the indices
Example fix
// before export INFLUXDB3_OBJECT_STORE_BUCKET=wrong-bucket // after export INFLUXDB3_OBJECT_STORE_BUCKET=influxdb3-data export INFLUXDB3_OBJECT_STORE_ENDPOINT=https://s3.us-east-1.amazonaws.com
Defensive patterns
Strategy: retry
Validate before calling
// pre-flight: list the table-index prefix with the same client before startup let probe = client.list(Some(&table_index_prefix)).next().await;
Type guard
fn is_list_indices(e: &TableIndexError) -> bool {
matches!(e, TableIndexError::ListIndices(_))
} Try / catch
match res {
Err(e) if is_list_indices(&e) => {
if e.source_object_store().map(|oe| oe.is_transient()).unwrap_or(false) {
retry_with_backoff(op, 5)
} else { return Err(e); }
}
other => other?,
} Prevention
- Use the same bucket/prefix across all cluster nodes
- Provision list permissions on the table-index prefix before deployment
- Add startup health checks against the object store
- Configure timeouts/retries in the object_store client
When it happens
Trigger: Calling the operation that lists all table index objects (list over the table-index prefix, mapping each failed item to ListIndices) while resolving the set of tables and their snapshots.
Common situations: Bucket-level permission misconfiguration (LIST denied on the table-index prefix); object-store outage or rate limiting at startup; pointing a node at the wrong bucket containing unexpected content.
Related errors
- Failed to list table index snapshots from object store
- Failed to load table index from object store
- Failed to load table index snapshot from object store
- Failed to create table index from object store
- Failed to delete table index snapshot from object store
AI-assisted analysis of influxdata/influxdb@06200ef96b (2026-09-19).
Data as JSON: /api/errors/d4bbdf3b83bc1574.
Report an issue: GitHub.
Appendix: source
Thrown at influxdb3_write/src/table_index.rs:34
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}")]
MergeMismatch {
expected: TableIndexId,
actual: TableIndexId,View on GitHub (pinned to 06200ef96b)