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
- Grant write permission for the configured credentials on the bucket/container (e.g. s3:PutObject)
- Retry with backoff — startup bursts often hit provider throttling
- Check bucket retention/WORM policies and any deny rules preventing new object creation
- 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
- Grant the service account explicit write permissions (s3:PutObject / GCS create)
- Check bucket retention, WORM, and object-lock policies before deployment
- Use idempotent retry with backoff for puts during startup bursts
- Run a write-probe health check before serving traffic
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
- Failed to list object store metadata
- Failed to list table index snapshots from object store
- Failed to load table index conversion marker bytes from…
- 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/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)