influxdata/influxdb · error · TableIndexCacheError
Failed to load table index conversion marker bytes from…
Error message
Failed to load table index conversion marker bytes from object store
What it means
TableIndexCacheError::LoadConversionMarkerBytesError, thrown when a Get on the object store fails while fetching the bytes of the table index conversion marker file (the marker recording that table index conversion completed). Note a NotFound here means the marker was expected to exist; absence of the marker otherwise triggers creation of an initial marker, so this variant reflects genuine get failures.
Solutions
- Retry the get with backoff; transient store errors are the most common cause
- Check whether a cleanup/lifecycle rule or script deletes objects in the marker directory concurrently, and exclude the marker from such jobs
- Verify credentials and read permissions on the bucket/container
- Use a consistent provider (or versioned bucket) if list/get races against concurrent writers are suspected
Example fix
// before: treat every get error as fatal
let bytes = store.get(&marker_path).await?.bytes().await?;
// after: tolerate NotFound, retry transient errors
match store.get(&marker_path).await {
Ok(r) => Some(r.bytes().await?),
Err(e) if matches!(e, object_store::Error::NotFound{..}) => None,
Err(e) => return retry_backoff(3, || store.get(&marker_path)).await.map_err(Into::into),
} Defensive patterns
Strategy: retry
Validate before calling
// only attempt the get if the marker was listed (avoid races)
let exists = store.list(Some(&marker_dir))
.any(|m| futures::future::ready(m.as_ref().map(|m| m.location == marker).unwrap_or(false)));
Try / catch
match err {
TableIndexCacheError::LoadConversionMarkerBytesError(e)
if matches!(e, object_store::Error::NotFound{..}) =>
create_initial_marker().await?, // treated as absent
TableIndexCacheError::LoadConversionMarkerBytesError(e) =>
retry_with_backoff(3, || store.get(&marker)).await??,
_ => unreachable!(),
} Prevention
- Exclude the marker path from lifecycle/cleanup policies
- Use a strongly consistent store or conditional gets to avoid list/get races
- Retry get operations with jittered backoff
- Never hand-edit or delete marker objects in production buckets
When it happens
Trigger: During cache/table-index initialization, the code checks for the conversion marker by listing, then loads its bytes with ObjectStore::get; a get that errors (as opposed to returning NotFound, which is handled by writing an initial marker) produces this variant.
Common situations: Auth/permission failures on get (403); throttling (429/503); the marker deleted concurrently by another process between list and get (racy cleanup script); network interruption mid-request.
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 object store metadata
- Failed to list table index snapshots from object store
- 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/f36a9f735fb6d510.
Report an issue: GitHub.
Appendix: source
Thrown at influxdb3_write/src/table_index_cache.rs:81
#[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")]
LoadTableIndexFromObjectStoreError(#[source] crate::table_index::TableIndexError),
#[error("Failed to update table index from object store")]View on GitHub (pinned to 06200ef96b)