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

  1. Inspect #[source] object_store::Error for the failing operation and status code
  2. Grant LIST permission on the table-index prefix to the configured credentials
  3. Retry after verifying object-store health (status page, throttling limits)
  4. 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

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


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)