influxdata/influxdb · error · TableIndexCacheError

Failed to put initial table index conversion marker to…

Error message

Failed to put initial table index conversion marker to object store

What it means

TableIndexCacheError::PutConversionMarkerError, thrown when writing (Put) the initial table index conversion marker to the object store fails. The marker must persist before the cache treats conversion as complete, so a failed put blocks index initialization for that database.

Solutions

  1. Grant write permission for the configured credentials on the bucket/container (e.g. s3:PutObject)
  2. Retry with backoff — startup bursts often hit provider throttling
  3. Check bucket retention/WORM policies and any deny rules preventing new object creation
  4. Inspect the wrapped object_store::Error source for the provider status code to pinpoint the cause

Example fix

// before: single put, fatal on failure
store.put(&marker_path, payload.into()).await?;
// after: bounded retry
retry_backoff(5, || async {
    store.put(&marker_path, payload.clone().into()).await
}).await.map_err(TableIndexCacheError::from)?;
Defensive patterns

Strategy: retry

Validate before calling

// preflight: verify write access before initialization
let probe = ObjPath::from(".write_probe");
store.put(&probe, b"ok".to_vec().into()).await?;
store.delete(&probe).await?;

Try / catch

match err {
    TableIndexCacheError::PutConversionMarkerError(e)
        if e.is_transient() => retry_with_backoff(5, op).await?,
    TableIndexCacheError::PutConversionMarkerError(e) => {
        error!(source=?e, "marker put failed — check write permissions/retention policy");
        return Err(e.into());
    }
    _ => unreachable!(),
}

Prevention

When it happens

Trigger: During first-time marker creation, the cache serializes the marker then calls ObjectStore::put on the marker path; any provider-level put failure (permissions, throttling, network, size limits) surfaces here wrapped in object_store::Error.

Common situations: Read-only credentials or missing s3:PutObject/gcs storage.objects.create permission; bucket lifecycle/retention policies blocking writes; provider throttling (429/503) during startup bursts; network outage to the store endpoint.

Related errors


AI-assisted analysis of influxdata/influxdb@06200ef96b (2026-09-19). Data as JSON: /api/errors/53a0ad265bb0316c. Report an issue: GitHub.

Appendix: source

Thrown at influxdb3_write/src/table_index_cache.rs:87

    #[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")]
    LoadTableIndexFromObjectStoreError(#[source] crate::table_index::TableIndexError),

    #[error("Failed to update table index from object store")]
    UpdateTableIndexFromObjectStoreError(#[source] crate::table_index::TableIndexError),

    #[error("Failed to create table index from object store")]
    CreateTableIndexFromObjectStoreError(#[source] crate::table_index::TableIndexError),

    #[error("Failed to delete parquet file {path} from object store")]

View on GitHub (pinned to 06200ef96b)