{"record":{"id":"d9be29d006996025","repo":"risingwavelabs/risingwave","slug":"invalid-option-message","errorCode":null,"errorMessage":"Invalid option: {message}","messagePattern":"Invalid option: (.+?)","errorType":"exception","errorClass":"InvalidOptionError","httpStatus":null,"severity":"error","filePath":"src/connector/src/schema/mod.rs","lineNumber":32,"sourceCode":"\nuse crate::error::ConnectorError;\n\npub mod avro;\nmod loader;\npub mod protobuf;\npub mod schema_registry;\n\npub use loader::{ConfluentSchemaLoader, SchemaLoader, SchemaVersion};\n\nconst MESSAGE_NAME_KEY: &str = \"message\";\nconst KEY_MESSAGE_NAME_KEY: &str = \"key.message\";\nconst SCHEMA_LOCATION_KEY: &str = \"schema.location\";\nconst SCHEMA_REGISTRY_KEY: &str = \"schema.registry\";\nconst NAME_STRATEGY_KEY: &str = \"schema.registry.name.strategy\";\npub const AWS_GLUE_SCHEMA_ARN_KEY: &str = \"aws.glue.schema_arn\";\n\n#[derive(Debug, thiserror::Error, thiserror_ext::Macro)]\n#[error(\"Invalid option: {message}\")]\npub struct InvalidOptionError {\n    pub message: String,\n    // #[backtrace]\n    // source: Option<risingwave_common::error::BoxedError>,\n}\n\n#[derive(Debug, thiserror::Error, thiserror_ext::Macro)]\n#[error(\"Malformed response: {message}\")]\npub struct MalformedResponseError {\n    pub message: String,\n}\n\n#[derive(Debug, thiserror::Error)]\npub enum SchemaFetchError {\n    #[error(transparent)]\n    InvalidOption(#[from] InvalidOptionError),\n    #[error(transparent)]\n    License(#[from] risingwave_common::license::FeatureNotAvailable),","sourceCodeStart":14,"sourceCodeEnd":50,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/schema/mod.rs#L14-L50","documentation":"InvalidOptionError is a typed schema-module error raised when a connector/schema option key or value is invalid — typically an unrecognized or malformed option under the schema.* namespace (schema.location, schema.registry, schema.registry.name.strategy, aws.glue.schema_arn).","triggerScenarios":"Passing an unknown schema.* option in WITH clauses, or a value failing validation when schema code parses options into typed config.","commonSituations":"Typos like schema.registery; wrong name-strategy value; leftover options from a different connector version; documenting/validating WITH options for Protobuf/Avro schema registry sources.","solutions":["Correct the option key/value per docs (schema.location, schema.registry, schema.registry.name.strategy, aws.glue.schema_arn).","Remove unsupported options from the WITH clause.","Check the RisingWave version's supported option list, as names change across releases."],"exampleFix":"// before\nWITH (schema.registery = 'http://localhost:8081')\n// after\nWITH (schema.registry = 'http://localhost:8081')","handlingStrategy":"validation","validationCode":"const ALLOWED_SCHEMA_OPTS: &[&str] = &[\n    \"schema.location\", \"schema.registry\", \"schema.registry.name.strategy\", \"aws.glue.schema_arn\"\n];\nfn validate_schema_opts(opts: &[(&str, &str)]) -> Result<(), String> {\n    opts.iter().filter(|(k, _)| k.starts_with(\"schema.\") || k.starts_with(\"aws.glue.\"))\n        .find(|(k, _)| !ALLOWED_SCHEMA_OPTS.contains(k))\n        .map_or(Ok(()), |(k, _)| Err(format!(\"invalid schema option: {k}\")))\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep a checked list of valid schema.* options per RisingWave version.","Copy options only from official docs, not stale blog posts.","Diff options against SHOW syntax in docs when upgrading versions."],"tags":["config","validation","schema","options"],"backgroundTag":"invalid-config-value","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}