influxdata/influxdb · error · TableIndexCacheError
Failed to list object store metadata
Error message
Failed to list object store metadata
What it means
TableIndexCacheError::ListMetasError, thrown when an object_store List call for object metadata fails inside the cache (e.g. while scanning for the conversion marker or snapshot info files). It wraps the provider's object_store::Error directly.
Solutions
- Retry with backoff — most list failures are transient provider errors
- Validate credentials and permissions for the configured bucket/container; re-authenticate if tokens expired
- Confirm bucket name, region/endpoint settings match the actual store
- Read the wrapped object_store::Error source for the provider-specific status code to target the exact misconfiguration
Example fix
// before: single list, hard failure
let metas: Vec<_> = store.list(Some(&prefix)).try_collect().await?;
// after: retry transient failures
let metas: Vec<_> = retry_backoff(3, || async {
store.list(Some(&prefix)).try_collect::<Vec<_>>().await
}).await?; Defensive patterns
Strategy: retry
Validate before calling
// preflight list check at startup
let probe = store.list(Some(&root)).next().await;
if let Some(Err(e)) = probe { return Err(format!("store list failed: {e}")); } Try / catch
match err {
TableIndexCacheError::ListMetasError(e)
if matches!(e.status(), Some(429 | 500..=599)) =>
retry_with_backoff(5, op).await?,
TableIndexCacheError::ListMetasError(e) => return Err(e.into()),
_ => unreachable!(),
} Prevention
- Rotate credentials before expiry; use instance profiles/IAM roles where possible
- Configure SDK-level retries and request timeouts
- Health-check the object store before marking the node ready
- Keep list prefixes narrow to reduce throttling exposure
When it happens
Trigger: Any code path in table_index_cache.rs that lists ObjectMeta from the ObjectStore — such as discovering the table index conversion marker file or parquet/snapshot metadata — when the store's list operation returns an error.
Common situations: Expired or rotated cloud credentials (403 AccessDenied); throttling (S3 SlowDown, HTTP 429/503); bucket/container misconfiguration; transient network failures; proxy/firewall interference.
Understand the failure class
Background: "API request failed": what wrapped HTTP errors from external APIs mean and how to find the real cause — this error's family across 29 libraries.
Related errors
- Failed to list table index snapshots from object store
- Failed to load table index conversion marker bytes from…
- Failed to put initial table index conversion marker to…
- Failed to create table index from object store
- Failed to delete parquet file
AI-assisted analysis of influxdata/influxdb@06200ef96b (2026-09-19).
Data as JSON: /api/errors/0b7eacaf59bffb6b.
Report an issue: GitHub.
Appendix: source
Thrown at influxdb3_write/src/table_index_cache.rs:78
#[error("Table snapshot persistence task failed")]
TableSnapshotPersistenceTaskFailed(#[source] tokio::task::JoinError),
#[error("Failed to list table indices from object store")]
ListIndices(#[source] object_store::Error),
#[error("Failed to parse table index path from object store path")]
TableIndexPath(#[source] crate::paths::PathError),
#[error("Failed to list table index snapshots from object store")]
ListSnapshots(#[source] object_store::Error),
#[error("Failed to parse table index snapshot path from object store path")]
TableIndexSnapshotPath(#[source] crate::paths::PathError),
#[error("Failed to update table index: join task failed")]
UpdateTaskFailed(#[source] tokio::task::JoinError),
#[error("Failed to list object store metadata")]
ListMetasError(#[source] object_store::Error),
#[error("Failed to load table index conversion marker bytes from object store")]
LoadConversionMarkerBytesError(#[source] object_store::Error),
#[error("Failed to serialize initial table index conversion marker")]
SerializeConversionMarkerError(#[source] serde_json::Error),
#[error("Failed to put initial table index conversion marker to object store")]
PutConversionMarkerError(#[source] object_store::Error),
#[error("Failed to parse snapshot info file path")]
ParseSnapshotPathError(#[source] anyhow::Error),
#[error("Failed to split persisted snapshot into table snapshots")]
SplitPersistedSnapshotError(#[source] crate::table_index::TableIndexError),
#[error("Failed to load table index from object store")]View on GitHub (pinned to 06200ef96b)