{"record":{"id":"0437c334701393e5","repo":"influxdata/influxdb","slug":"missing-object-store-for-restore-operation","errorCode":null,"errorMessage":"missing object store for restore operation","messagePattern":"missing object store for restore operation","errorType":"error_code","errorClass":"CatalogError","httpStatus":null,"severity":"error","filePath":"influxdb3_catalog/src/error.rs","lineNumber":368,"sourceCode":"    )]\n    RecordExceedsCommittedFeatureLevel {\n        record_id: u16,\n        committed: FeatureLevel,\n    },\n\n    #[error(\n        \"this node's feature level (core={}, enterprise={}) is below the cluster's committed level (core={}, enterprise={}); upgrade required\",\n        local.core,\n        local.enterprise,\n        committed.core,\n        committed.enterprise,\n    )]\n    NodeBelowCommittedFeatureLevel {\n        committed: FeatureLevel,\n        local: FeatureLevel,\n    },\n\n    #[error(\"missing object store for restore operation\")]\n    MissingObjectStoreForRestore,\n\n    #[error(\n        \"cannot remove node '{node_id}' because it is a member of query group '{query_group_name}' (id {query_group_id})\"\n    )]\n    NodeInQueryGroup {\n        node_id: Arc<str>,\n        query_group_name: Arc<str>,\n        query_group_id: QueryGroupId,\n    },\n\n    #[error(\n        \"cannot place node '{node_id}' in this query group because it already belongs to query group '{query_group_name}' (id {query_group_id})\"\n    )]\n    NodeAlreadyInQueryGroup {\n        node_id: Arc<str>,\n        query_group_name: Arc<str>,\n        query_group_id: QueryGroupId,","sourceCodeStart":350,"sourceCodeEnd":386,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/influxdb3_catalog/src/error.rs#L350-L386","documentation":"Thrown when a restore operation is invoked without an object store configured. Restores read snapshot/backup data from object storage, so a missing ObjectStore reference makes the operation impossible; the API requires it explicitly.","triggerScenarios":"Calling the catalog/instance restore API on a builder or client that was never given an ObjectStore (e.g. built for local-only mode); restore invoked in an environment where object-store config was omitted.","commonSituations":"Disaster-recovery drill where the restore tool is instantiated without cloud credentials; config file lacking the object-store section; running restore on a node intended only for local operation.","solutions":["Provide the object store configuration (bucket, endpoint, credentials) to the restore builder before invoking restore.","Set the required environment variables / config fields for the object store backend.","Use the same object store the backup was taken from.","If the restore API offers a local-path alternative, switch to the file-based restore flow."],"exampleFix":"// before\nlet catalog = Catalog::restore(backup_id).await?;\n// after\nlet store = get_object_store_from_config(&cfg)?; // panics earlier if unconfigured\nlet catalog = Catalog::builder()\n    .object_store(store)\n    .restore(backup_id).await?;","handlingStrategy":"validation","validationCode":"let store = object_store_config\n    .as_ref()\n    .ok_or(\"object store must be configured for restore\")?;","typeGuard":null,"tryCatchPattern":"match result {\n    Err(CatalogError::MissingObjectStoreForRestore) => {\n        log::error!(\"restore called without object store; configure bucket/credentials\");\n    }\n    other => other?,\n}","preventionTips":["Verify object-store config in the restore tool's preflight","Keep backup and restore environments' storage config in sync","Fail fast at startup when object-store env vars are absent"],"tags":["restore","object-store","config"],"backgroundTag":"missing-required-config","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"}