{"record":{"id":"01ea2ac8d9247806","repo":"influxdata/influxdb","slug":"failed-to-load-table-index-from-object-store-cache","errorCode":null,"errorMessage":"Failed to load table index from object store","messagePattern":"Failed to load table index from object store","errorType":"exception","errorClass":"TableIndexCacheError","httpStatus":null,"severity":"error","filePath":"influxdb3_write/src/table_index_cache.rs","lineNumber":96,"sourceCode":"    #[error(\"Failed to list object store metadata\")]\n    ListMetasError(#[source] object_store::Error),\n\n    #[error(\"Failed to load table index conversion marker bytes from object store\")]\n    LoadConversionMarkerBytesError(#[source] object_store::Error),\n\n    #[error(\"Failed to serialize initial table index conversion marker\")]\n    SerializeConversionMarkerError(#[source] serde_json::Error),\n\n    #[error(\"Failed to put initial table index conversion marker to object store\")]\n    PutConversionMarkerError(#[source] object_store::Error),\n\n    #[error(\"Failed to parse snapshot info file path\")]\n    ParseSnapshotPathError(#[source] anyhow::Error),\n\n    #[error(\"Failed to split persisted snapshot into table snapshots\")]\n    SplitPersistedSnapshotError(#[source] crate::table_index::TableIndexError),\n\n    #[error(\"Failed to load table index from object store\")]\n    LoadTableIndexFromObjectStoreError(#[source] crate::table_index::TableIndexError),\n\n    #[error(\"Failed to update table index from object store\")]\n    UpdateTableIndexFromObjectStoreError(#[source] crate::table_index::TableIndexError),\n\n    #[error(\"Failed to create table index from object store\")]\n    CreateTableIndexFromObjectStoreError(#[source] crate::table_index::TableIndexError),\n\n    #[error(\"Failed to delete parquet file {path} from object store\")]\n    DeleteParquetFile {\n        path: String,\n        #[source]\n        source: object_store::Error,\n    },\n\n    #[error(\"Failed to delete table index {table_id} from object store\")]\n    DeleteTableIndex {\n        table_id: TableIndexId,","sourceCodeStart":78,"sourceCodeEnd":114,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/influxdb3_write/src/table_index_cache.rs#L78-L114","documentation":"This error is a TableIndexCacheError::LoadTableIndexFromObjectStoreError, thrown when the cache cannot load a persisted table index snapshot from the object store. It wraps a crate::table_index::TableIndexError as its #[source], so the underlying cause (network failure, missing object, corrupt snapshot) is preserved. It indicates the table index could not be reconstructed from persisted state during cache initialization or refresh.","triggerScenarios":"Calling table_index_cache paths that load an existing TableIndex from the object store (e.g. cache initialization or get/refresh of a cached index) where TableIndex::load/persist machinery returns a TableIndexError — object missing, deserialization failure, or store I/O error.","commonSituations":"Object store credentials or endpoint misconfigured so snapshot reads fail; snapshot object deleted or truncated by another process; corrupt/older-format snapshot files after a version upgrade; network partitions between the node and S3/GCS/Azure blob storage.","solutions":["Inspect the wrapped #[source] TableIndexError to find the root cause (object not found vs deserialize vs store I/O).","Verify object store connection settings (endpoint, bucket, credentials) are correct and reachable.","Check that the snapshot files for the database/table exist and were written by a compatible InfluxDB 3 version.","If snapshots are corrupt, restore from a backup or re-bootstrap the database catalog."],"exampleFix":"// before: ignoring the wrapped cause\neprintln!(\"cache error: {}\", err);\n// after: surface the source chain for diagnosis\nlog::error!(\"failed to load table index from object store: {err}\";\n  source = ?anyhow::Error::new(err));","handlingStrategy":"try-catch","validationCode":"// Rust: pre-check object store reachability\nlet head = object_store.head(&snapshot_prefix).await;\nassert!(head.is_ok(), \"object store unreachable: {:?}\", head.err());","typeGuard":"fn is_load_table_index_err(e: &TableIndexCacheError) -> bool {\n  matches!(e, TableIndexCacheError::LoadTableIndexFromObjectStoreError(_))\n}","tryCatchPattern":"match cache.load_index(db).await {\n  Err(TableIndexCacheError::LoadTableIndexFromObjectStoreError(src)) => {\n    log::error!(\"index load failed: {src}\");\n    // inspect src: NotFound => stale snapshot; other => store/I-O issue\n  }\n  Err(e) => return Err(e),\n  Ok(idx) => idx,\n}","preventionTips":["Health-check object store connectivity at startup before opening the cache.","Pin snapshot format/versions: upgrade nodes in lockstep with snapshot format changes.","Protect snapshot objects from external deletion (IAM, lifecycle rules).","Log the full #[source] chain, not just the wrapper message."],"tags":["object-store","influxdb3","table-index","storage"],"backgroundTag":"object-store-operation-failed","analyzedSha":"06200ef96ba82c5f6727e5038a83af8e722c6875","analyzedAt":"2026-09-19T12:55:30.003Z","contentChangedAt":"2026-09-19T12:55:30.003Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}