risingwavelabs/risingwave · critical
`meta_leader_lease_secs` must be greater than 2
Error message
`meta_leader_lease_secs` must be greater than 2
What it means
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.
Source
Thrown at src/meta/node/src/lib.rs:620
enable_legacy_table_migration: config.meta.enable_legacy_table_migration,
pause_on_next_bootstrap_offline: config.meta.pause_on_next_bootstrap_offline,
serverless_backfill_controller_addr: opts.serverless_backfill_controller_addr,
},
config.system.into_init_system_params(),
config.session_init,
shutdown,
))
.await
.unwrap();
})
}
fn validate_config(config: &RwConfig) {
if config.meta.meta_leader_lease_secs <= 2 {
let error_msg = "`meta_leader_lease_secs` must be greater than 2";
tracing::error!(error_msg);
panic!("{}", error_msg);
}
if config.meta.parallelism_control_batch_size == 0 {
let error_msg = "`parallelism_control_batch_size` must be greater than 0";
tracing::error!(error_msg);
panic!("{}", error_msg);
}
if config.meta.checkpoint_read_chunk_size == 0 {
let error_msg = "`checkpoint_read_chunk_size` must be greater than 0";
tracing::error!(error_msg);
panic!("{}", error_msg);
}
if config.meta.checkpoint_read_max_in_flight_chunks == 0 {
let error_msg = "`checkpoint_read_max_in_flight_chunks` must be greater than 0";
tracing::error!(error_msg);
panic!("{}", error_msg);View on GitHub (pinned to 6469eb736d)
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.
Example fix
// before (risingwave.toml) [meta] meta_leader_lease_secs = 2 // after [meta] meta_leader_lease_secs = 10
Defensive patterns
Strategy: validation
Validate before calling
assert!(cfg.meta.meta_leader_lease_secs > 2, "meta_leader_lease_secs must be > 2");
Prevention
- 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).
When it happens
Trigger: 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.
Common situations: Hand-edited risingwave.toml tuned for fast failover, copied example configs with a placeholder value, or test setups that shrink the lease too aggressively.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- `parallelism_control_batch_size` must be greater than 0
- `checkpoint_read_chunk_size` must be greater than 0
- `checkpoint_read_max_in_flight_chunks` must be greater than
- `compaction_task_id_refill_capacity` must be greater than 0
- `iceberg_compaction_config_refresh_interval_sec` must be gre
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/d7ba5134daae076d.
Report an issue: GitHub.