{"record":{"id":"d7ba5134daae076d","repo":"risingwavelabs/risingwave","slug":"meta-leader-lease-secs-must-be-greater-than-2","errorCode":null,"errorMessage":"`meta_leader_lease_secs` must be greater than 2","messagePattern":"`meta_leader_lease_secs` must be greater than 2","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"src/meta/node/src/lib.rs","lineNumber":620,"sourceCode":"\n                enable_legacy_table_migration: config.meta.enable_legacy_table_migration,\n                pause_on_next_bootstrap_offline: config.meta.pause_on_next_bootstrap_offline,\n                serverless_backfill_controller_addr: opts.serverless_backfill_controller_addr,\n            },\n            config.system.into_init_system_params(),\n            config.session_init,\n            shutdown,\n        ))\n        .await\n        .unwrap();\n    })\n}\n\nfn validate_config(config: &RwConfig) {\n    if config.meta.meta_leader_lease_secs <= 2 {\n        let error_msg = \"`meta_leader_lease_secs` must be greater than 2\";\n        tracing::error!(error_msg);\n        panic!(\"{}\", error_msg);\n    }\n\n    if config.meta.parallelism_control_batch_size == 0 {\n        let error_msg = \"`parallelism_control_batch_size` must be greater than 0\";\n        tracing::error!(error_msg);\n        panic!(\"{}\", error_msg);\n    }\n\n    if config.meta.checkpoint_read_chunk_size == 0 {\n        let error_msg = \"`checkpoint_read_chunk_size` must be greater than 0\";\n        tracing::error!(error_msg);\n        panic!(\"{}\", error_msg);\n    }\n\n    if config.meta.checkpoint_read_max_in_flight_chunks == 0 {\n        let error_msg = \"`checkpoint_read_max_in_flight_chunks` must be greater than 0\";\n        tracing::error!(error_msg);\n        panic!(\"{}\", error_msg);","sourceCodeStart":602,"sourceCodeEnd":638,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/meta/node/src/lib.rs#L602-L638","documentation":"validate_config in src/meta/node/src/lib.rs:620 panics at meta-node startup when `config.meta.meta_leader_lease_secs` is less than or equal to 2. The leader lease duration must be strictly greater than 2 seconds so lease renewal/expiration logic in the meta election has safe margins; too small a lease risks spurious leadership flapping.","triggerScenarios":"Starting a RisingWave meta node (via `start`) with a config file or CLI override setting `meta.meta_leader_lease_secs` to 0, 1, or 2.","commonSituations":"Hand-edited risingwave.toml tuned for fast failover, copied example configs with a placeholder value, or test setups that shrink the lease too aggressively.","solutions":["Set `meta.meta_leader_lease_secs` to a value greater than 2 (e.g. 10 or the default) in the config file.","Remove any CLI/env override of meta_leader_lease_secs so the default is used.","If fast failover is needed, keep the lease >2 and tune election frequency within supported bounds instead."],"exampleFix":"// before (risingwave.toml)\n[meta]\nmeta_leader_lease_secs = 2\n\n// after\n[meta]\nmeta_leader_lease_secs = 10","handlingStrategy":"validation","validationCode":"assert!(cfg.meta.meta_leader_lease_secs > 2, \"meta_leader_lease_secs must be > 2\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate the generated config TOML in CI before deploying meta nodes.","Keep lease values near defaults; document any tuning in config reviews.","Lint config templates for known-invalid values (<= 2)."],"tags":["config","meta-node","startup","validation"],"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"}