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

  1. Retry with backoff — most list failures are transient provider errors
  2. Validate credentials and permissions for the configured bucket/container; re-authenticate if tokens expired
  3. Confirm bucket name, region/endpoint settings match the actual store
  4. 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

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


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)