{"record":{"id":"398ccac554545e8b","repo":"risingwavelabs/risingwave","slug":"unrecognized-configs","errorCode":null,"errorMessage":"unrecognized configs: {:?}","messagePattern":"unrecognized configs: (.+?)","errorType":"validation","errorClass":"SessionConfigError","httpStatus":null,"severity":"error","filePath":"src/common/src/session_config/mod.rs","lineNumber":712,"sourceCode":"                .upsert(\"streaming.developer.over_window_cache_policy\", v)\n                .unwrap();\n        }\n        if let Some(v) = self.streaming_cache_refill_policy.as_ref() {\n            table\n                .upsert(\"streaming.developer.cache_refill_policy\", v)\n                .unwrap();\n        }\n\n        let res = toml::to_string(&table)?;\n\n        // Validate all fields are valid by trying to merge it to the default config.\n        if !res.is_empty() {\n            let merged =\n                merge_streaming_config_section(&StreamingConfig::default(), res.as_str())?.unwrap();\n\n            let unrecognized_keys = merged.unrecognized_keys().collect_vec();\n            if !unrecognized_keys.is_empty() {\n                bail!(\"unrecognized configs: {:?}\", unrecognized_keys);\n            }\n        }\n\n        Ok(res)\n    }\n}\n\n#[cfg(test)]\nmod test {\n    use expect_test::expect;\n\n    use super::*;\n\n    #[derive(SessionConfig)]\n    struct TestConfig {\n        #[parameter(default = 1, flags = \"NO_ALTER_SYS\", alias = \"test_param_alias\" | \"alias_param_test\")]\n        test_param: i32,\n        #[parameter(default = false, deprecated = \"deprecated test notice\")]","sourceCodeStart":694,"sourceCodeEnd":730,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/common/src/session_config/mod.rs#L694-L730","documentation":"This error is raised when a user-provided streaming config override (e.g. via SET in a session, applied through merge_streaming_config_section) contains keys that do not exist in StreamingConfig. The merge succeeds but the merged config reports unrecognized_keys, and the session config layer deliberately fails fast rather than silently ignoring typos. It exists to catch config key misspellings and removed/renamed settings before they cause confusing runtime behavior.","triggerScenarios":"Calling SET streaming_config (or the session config set path that ends at this code in src/common/src/session_config/mod.rs:712) with a config string containing a key not present in StreamingConfig's TOML schema, e.g. 'SET streaming_config = 'wrong_key = 1';' or using a key that was renamed in a newer RisingWave version.","commonSituations":"Typo in a config key; copying config from an older RisingWave version where the key was renamed or removed; copying a batch/frontend config key into the streaming section; mixing table names into config.","solutions":["Check the reported unrecognized key names and correct the spelling to match a valid StreamingConfig field.","Consult src/common/src/config/src/streaming_config.rs (or the generated docs) for the exact valid key names.","If the key was renamed in a newer version, migrate to the new key name.","If the setting genuinely doesn't exist, remove it from the SET statement."],"exampleFix":"// before\nSET streaming_config = 'chunk_szie = 512';\n// after\nSET streaming_config = 'chunk_size = 512';","handlingStrategy":"validation","validationCode":"// Before SET streaming_config, verify keys against StreamingConfig fields\nlet valid_keys: Vec<&str> = StreamingConfig::default().recognized_keys().collect();\nfor key in user_keys {\n    assert!(valid_keys.contains(&key.as_str()), \"unknown streaming config key: {}\", key);\n}","typeGuard":null,"tryCatchPattern":"match session.set_config(key, value) {\n    Err(e) if e.to_string().starts_with(\"unrecognized configs\") => {\n        log::warn!(\"typo in streaming config: {e}\");\n        // surface the unrecognized key list to the user\n    }\n    other => other?,\n}","preventionTips":["Copy config key names from the generated docs (src/config/docs.md) rather than from memory.","After a RisingWave upgrade, re-check any SET streaming_config statements for renamed keys.","Keep one canonical config snippet in your migration scripts and review it in code review."],"tags":["config","session","validation","risingwave"],"backgroundTag":"unsupported-config-value","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}