influxdata/influxdb · error · TableIndexCacheError

Failed to parse snapshot info file path

Error message

Failed to parse snapshot info file path

What it means

TableIndexCacheError::ParseSnapshotPathError, thrown when parsing a snapshot info file path fails, wrapping an anyhow::Error. The cache derives a SnapshotInfoFilePath from object store paths; failure means the path does not encode the expected database/snapshot sequence components.

Solutions

  1. List the snapshot directory and remove or relocate objects that are not valid snapshot info files
  2. Restore from the same InfluxDB 3 version that wrote the data so path schemes match; complete interrupted restores
  3. Re-run the catalog/index recovery tooling to rebuild derived snapshot paths from canonical data
  4. Report upstream with the offending path if the server itself wrote the malformed name

Example fix

// before: abort load on first unparseable path
let p = SnapshotInfoFilePath::parse(&loc)?;
// after: skip foreign objects
let p = match SnapshotInfoFilePath::parse(&loc) {
    Ok(p) => p,
    Err(e) => { warn!(%loc, %e, "ignoring non-snapshot-info object"); continue; }
};
Defensive patterns

Strategy: validation

Validate before calling

fn is_snapshot_info_name(loc: &ObjPath) -> bool {
    loc.filename()
        .map(|f| f.ends_with(".json") && f.contains("snapshot"))
        .unwrap_or(false)
}

Type guard

fn parse_snapshot_info(loc: &ObjPath) -> Option<SnapshotInfoFilePath> {
    SnapshotInfoFilePath::parse(loc.to_string()).ok()
}

Try / catch

match result {
    Err(TableIndexCacheError::ParseSnapshotPathError(e)) => {
        warn!(error=?e, "non-snapshot-info object encountered; skipping");
        continue_processing();
    }
    other => other?,
}

Prevention

When it happens

Trigger: During index loading, snapshot info file locations discovered in the object store are converted into SnapshotInfoFilePath via a fallible parse returning anyhow::Result; any path whose filename/segments don't match the expected snapshot-info naming triggers this variant.

Common situations: Non-InfluxDB files placed in the snapshot directory by backup tools or manual operations; partially uploaded snapshot info files; path scheme drift between InfluxDB 3 versions sharing a bucket; renamed/moved objects during restore.

Understand the failure class

Background: "invalid id" errors: invalid identifier format — why libraries reject IDs before lookup, and how to fix them — this error's family across 37 libraries.

Related errors


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

Appendix: source

Thrown at influxdb3_write/src/table_index_cache.rs:90

    #[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")]
    DeleteParquetFile {
        path: String,
        #[source]

View on GitHub (pinned to 06200ef96b)