{"record":{"id":"0b7eacaf59bffb6b","repo":"influxdata/influxdb","slug":"failed-to-list-object-store-metadata","errorCode":null,"errorMessage":"Failed to list object store metadata","messagePattern":"Failed to list object store metadata","errorType":"exception","errorClass":"TableIndexCacheError","httpStatus":null,"severity":"error","filePath":"influxdb3_write/src/table_index_cache.rs","lineNumber":78,"sourceCode":"    #[error(\"Table snapshot persistence task failed\")]\n    TableSnapshotPersistenceTaskFailed(#[source] tokio::task::JoinError),\n\n    #[error(\"Failed to list table indices from object store\")]\n    ListIndices(#[source] object_store::Error),\n\n    #[error(\"Failed to parse table index path from object store path\")]\n    TableIndexPath(#[source] crate::paths::PathError),\n\n    #[error(\"Failed to list table index snapshots from object store\")]\n    ListSnapshots(#[source] object_store::Error),\n\n    #[error(\"Failed to parse table index snapshot path from object store path\")]\n    TableIndexSnapshotPath(#[source] crate::paths::PathError),\n\n    #[error(\"Failed to update table index: join task failed\")]\n    UpdateTaskFailed(#[source] tokio::task::JoinError),\n\n    #[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\")]","sourceCodeStart":60,"sourceCodeEnd":96,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/influxdb3_write/src/table_index_cache.rs#L60-L96","documentation":"TableIndexCacheError::ListMetasError, thrown when an object_store List call for object metadata fails inside the cache (e.g. while scanning for the conversion marker or snapshot info files). It wraps the provider's object_store::Error directly.","triggerScenarios":"Any code path in table_index_cache.rs that lists ObjectMeta from the ObjectStore — such as discovering the table index conversion marker file or parquet/snapshot metadata — when the store's list operation returns an error.","commonSituations":"Expired or rotated cloud credentials (403 AccessDenied); throttling (S3 SlowDown, HTTP 429/503); bucket/container misconfiguration; transient network failures; proxy/firewall interference.","solutions":["Retry with backoff — most list failures are transient provider errors","Validate credentials and permissions for the configured bucket/container; re-authenticate if tokens expired","Confirm bucket name, region/endpoint settings match the actual store","Read the wrapped object_store::Error source for the provider-specific status code to target the exact misconfiguration"],"exampleFix":"// before: single list, hard failure\nlet metas: Vec<_> = store.list(Some(&prefix)).try_collect().await?;\n// after: retry transient failures\nlet metas: Vec<_> = retry_backoff(3, || async {\n    store.list(Some(&prefix)).try_collect::<Vec<_>>().await\n}).await?;","handlingStrategy":"retry","validationCode":"// preflight list check at startup\nlet probe = store.list(Some(&root)).next().await;\nif let Some(Err(e)) = probe { return Err(format!(\"store list failed: {e}\")); }","typeGuard":null,"tryCatchPattern":"match err {\n    TableIndexCacheError::ListMetasError(e)\n        if matches!(e.status(), Some(429 | 500..=599)) =>\n            retry_with_backoff(5, op).await?,\n    TableIndexCacheError::ListMetasError(e) => return Err(e.into()),\n    _ => unreachable!(),\n}","preventionTips":["Rotate credentials before expiry; use instance profiles/IAM roles where possible","Configure SDK-level retries and request timeouts","Health-check the object store before marking the node ready","Keep list prefixes narrow to reduce throttling exposure"],"tags":["object-store","network","influxdb3"],"backgroundTag":"api-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"}