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

  1. Set `meta.meta_leader_lease_secs` to a value greater than 2 (e.g. 10 or the default) in the config file.
  2. Remove any CLI/env override of meta_leader_lease_secs so the default is used.
  3. 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

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


AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11). Data as JSON: /api/errors/d7ba5134daae076d. Report an issue: GitHub.