{"record":{"id":"d4bbdf3b83bc1574","repo":"influxdata/influxdb","slug":"failed-to-list-table-indices-from-object-store","errorCode":null,"errorMessage":"Failed to list table indices from object store","messagePattern":"Failed to list table indices from object store","errorType":"error_code","errorClass":"TableIndexError","httpStatus":null,"severity":"error","filePath":"influxdb3_write/src/table_index.rs","lineNumber":34,"sourceCode":"    ParquetFile, PersistedSnapshot, PersistedSnapshotVersion,\n    paths::{SnapshotInfoFilePath, TableIndexPath, TableIndexSnapshotPath},\n};\n\n#[derive(Debug, Error)]\npub enum TableIndexError {\n    #[error(\"Failed to load table index from object store\")]\n    LoadIndex(#[source] object_store::Error),\n\n    #[error(\"Failed to deserialize table index\")]\n    SerializeIndex(#[source] serde_json::Error),\n\n    #[error(\"Failed to deserialize table index\")]\n    DeserializeIndex(#[source] serde_json::Error),\n\n    #[error(\"Failed to list table index snapshots from object store\")]\n    ListSnapshots(#[source] object_store::Error),\n\n    #[error(\"Failed to list table indices from object store\")]\n    ListIndices(#[source] object_store::Error),\n\n    #[error(\"Failed to load table index snapshot from object store\")]\n    LoadSnapshot(#[source] object_store::Error),\n\n    #[error(\"Failed to deserialize table index snapshot\")]\n    DeserializeSnapshot(#[source] serde_json::Error),\n\n    #[error(\"Failed to persist table index to object store\")]\n    PersistIndex(#[source] object_store::Error),\n\n    #[error(\"Failed to delete table index snapshot from object store\")]\n    DeleteSnapshot(#[source] object_store::Error),\n\n    #[error(\"Cannot merge table indices with mismatched identifiers: {expected} != {actual}\")]\n    MergeMismatch {\n        expected: TableIndexId,\n        actual: TableIndexId,","sourceCodeStart":16,"sourceCodeEnd":52,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/influxdb3_write/src/table_index.rs#L16-L52","documentation":"TableIndexError::ListIndices wraps an object_store::Error raised while listing table index objects from the object store (e.g. enumerating per-table index keys). Listing the indices prefix failed for transport, auth, or permission reasons and the error is wrapped with the source preserved. This occurs during bootstrap/scan of all table indices.","triggerScenarios":"Calling the operation that lists all table index objects (list over the table-index prefix, mapping each failed item to ListIndices) while resolving the set of tables and their snapshots.","commonSituations":"Bucket-level permission misconfiguration (LIST denied on the table-index prefix); object-store outage or rate limiting at startup; pointing a node at the wrong bucket containing unexpected content.","solutions":["Inspect #[source] object_store::Error for the failing operation and status code","Grant LIST permission on the table-index prefix to the configured credentials","Retry after verifying object-store health (status page, throttling limits)","Verify the bucket and prefix configuration matches the cluster that wrote the indices"],"exampleFix":"// before\nexport INFLUXDB3_OBJECT_STORE_BUCKET=wrong-bucket\n// after\nexport INFLUXDB3_OBJECT_STORE_BUCKET=influxdb3-data\nexport INFLUXDB3_OBJECT_STORE_ENDPOINT=https://s3.us-east-1.amazonaws.com","handlingStrategy":"retry","validationCode":"// pre-flight: list the table-index prefix with the same client before startup\nlet probe = client.list(Some(&table_index_prefix)).next().await;","typeGuard":"fn is_list_indices(e: &TableIndexError) -> bool {\n    matches!(e, TableIndexError::ListIndices(_))\n}","tryCatchPattern":"match res {\n    Err(e) if is_list_indices(&e) => {\n        if e.source_object_store().map(|oe| oe.is_transient()).unwrap_or(false) {\n            retry_with_backoff(op, 5)\n        } else { return Err(e); }\n    }\n    other => other?,\n}","preventionTips":["Use the same bucket/prefix across all cluster nodes","Provision list permissions on the table-index prefix before deployment","Add startup health checks against the object store","Configure timeouts/retries in the object_store client"],"tags":["object-store","listing","table-index","io"],"backgroundTag":"network-request-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"}