{"record":{"id":"8f3bd78d7871f2e6","repo":"influxdata/influxdb","slug":"invalid-node-spec-0","errorCode":null,"errorMessage":"invalid node spec: {0}","messagePattern":"invalid node spec: (.+?)","errorType":"validation","errorClass":"CatalogError","httpStatus":400,"severity":"error","filePath":"influxdb3_catalog/src/error.rs","lineNumber":127,"sourceCode":"    #[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\n    #[error(\n        \"Schema update for table '{table_name}' would exceed the tag column limit: \\\n        proposed schema would have {attempted} tag columns, but the limit is {limit}\"\n    )]\n    TooManyTagColumns {\n        table_name: TruncatedTableName,","sourceCodeStart":109,"sourceCodeEnd":145,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/influxdb3_catalog/src/error.rs#L109-L145","documentation":"CatalogError::InvalidNodeSpec wraps an anyhow::Error produced when parsing or validating a node spec (the node's configuration/definition) fails. Because the underlying source is preserved via #[source], the wrapped message explains exactly which part of the spec was rejected.","triggerScenarios":"Loading or parsing a node spec (e.g. from config or catalog) whose content fails validation — malformed spec format, missing required fields, or semantically invalid values.","commonSituations":"Hand-edited node configuration files with typos; version upgrades where the spec format changed and old specs are re-ingested; environment-driven configuration producing partially-populated specs.","solutions":["Read the chained #[source] error message to find the exact spec field that failed and fix that value.","Validate the node spec against the current version's expected format before applying it (upgrade tooling if the format changed).","Regenerate the spec from a known-good template or via the CLI instead of hand-editing."],"exampleFix":"// before\nlet spec: NodeSpec = toml::from_str(&raw)?; // InvalidNodeSpec: missing field `mode`\n// after\nlet spec: NodeSpec = toml::from_str(&raw)?; // ensure raw contains: mode = \"all\"\nassert!(raw.contains(\"mode\"), \"node spec must include mode\");","handlingStrategy":"validation","validationCode":"function validateNodeSpec(spec) {\n  const required = [\"node_id\", \"instance_id\", \"mode\"];\n  const missing = required.filter(k => spec[k] == null);\n  if (missing.length) throw new Error(`node spec missing: ${missing.join(\",\")}`);\n}","typeGuard":"const isNodeSpec = (v) => v != null && typeof v === \"object\"\n  && typeof v.node_id === \"string\" && typeof v.mode === \"string\";","tryCatchPattern":"try {\n  catalog.apply_node_spec(&raw_spec)?;\n} catch (e) {\n  if (e.message.startsWith(\"invalid node spec\")) {\n    log.error(\"node spec rejected:\", e.cause ?? e.message); // inspect #[source]\n  } else { throw e; }\n}","preventionTips":["Validate node specs against the current schema version before applying.","Regenerate specs from templates rather than hand-editing.","Always inspect the chained source error for the failing field."],"tags":["influxdb3","node","config","parsing"],"backgroundTag":"invalid-config-value","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"}