{"record":{"id":"955c2c5571c71195","repo":"influxdata/influxdb","slug":"invalid-node-registration","errorCode":null,"errorMessage":"invalid node registration","messagePattern":"invalid node registration","errorType":"validation","errorClass":"CatalogError","httpStatus":400,"severity":"error","filePath":"influxdb3_catalog/src/error.rs","lineNumber":121,"sourceCode":"    )]\n    UndeclaredTable {\n        db_name: Arc<str>,\n        table_name: Arc<str>,\n    },\n\n    #[error(\n        \"column '{column_name}' ({column_type}) is not defined in table '{table_name}' of \\\n         database '{db_name}', which uses explicit schemas; add the column with the \\\n         /api/v3/configure/table API before writing to it\"\n    )]\n    UndeclaredColumn {\n        db_name: Arc<str>,\n        table_name: Arc<str>,\n        column_name: Arc<str>,\n        column_type: InfluxColumnType,\n    },\n\n    #[error(\"invalid node registration\")]\n    InvalidNodeRegistration,\n\n    #[error(\"invalid node name ({0})\")]\n    InvalidNodeName(String),\n\n    #[error(\"invalid node spec: {0}\")]\n    InvalidNodeSpec(#[source] anyhow::Error),\n\n    #[error(\n        \"Schema update for table '{table_name}' would exceed the column limit: \\\n        proposed schema update would have {attempted} columns, but the limit is {limit}\"\n    )]\n    TooManyColumns {\n        table_name: TruncatedTableName,\n        attempted: usize,\n        limit: usize,\n    },\n","sourceCodeStart":103,"sourceCodeEnd":139,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/influxdb3_catalog/src/error.rs#L103-L139","documentation":"CatalogError::InvalidNodeRegistration is thrown when a node registration request fails the catalog's validation invariants — for example, registering a node whose identity conflicts with an existing registration (such as the same instance ID under a different name or a running node being re-registered with different attributes). Raised from node registration ops (e.g. influxdb3_catalog/src/catalog/versions/v3/ops/node.rs:57).","triggerScenarios":"Calling the node registration API/catalog register_node with a node whose instance ID matches an existing node registered with different attributes (e.g. a different running mode), so the catalog cannot reconcile the registration.","commonSituations":"Cloning a VM/container image so the new node reuses the old instance ID; re-pointing a node at an existing catalog after a hostname change; running a second influxdb3 instance against a shared catalog with a copied configuration.","solutions":["Ensure each node has a unique instance ID (regenerate it if the machine/image was cloned).","Match the registration attributes (node ID, mode) to the existing registration instead of changing them.","Remove/deregister the stale node entry in the catalog before re-registering with new attributes."],"exampleFix":"// before\n// cloned node reuses instance_id from image\nregister_node(instance_id: \"abc123\", node_id: \"node-b\")  // InvalidNodeRegistration\n// after\nlet instance_id = Uuid::new_v4().to_string(); // fresh id per node\nregister_node(instance_id, node_id: \"node-b\")","handlingStrategy":"validation","validationCode":"function assertFreshInstance(instanceId) {\n  const marker = localStorage.getItem(\"instance_id\");\n  if (marker && marker !== instanceId) throw new Error(\"instance id changed; was the node cloned?\");\n  localStorage.setItem(\"instance_id\", instanceId);\n}","typeGuard":null,"tryCatchPattern":"try {\n  await registerNode(node);\n} catch (e) {\n  if (e.message === \"invalid node registration\") {\n    await deregisterStaleNode(node.node_id);\n    await registerNode(node);\n  } else { throw e; }\n}","preventionTips":["Never bake instance IDs into VM/container images — generate at first boot.","Keep registration attributes stable across restarts of the same node.","Deregister nodes cleanly before re-provisioning them with new attributes."],"tags":["influxdb3","node","registration","catalog"],"backgroundTag":"invalid-state-transition","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"}