risingwavelabs/risingwave · error · anyhow::Error

cannot parse value for parameter

Error message

cannot parse value for parameter '{}': {}

What it means

`SystemController::new` calls `validate_init_system_params`, which parses each merged system parameter's string value into its typed form; a value that cannot be parsed aborts startup with "cannot parse value for parameter '{}': {}". The first `{}` is the parameter name, the second is the underlying parse error.

Solutions

  1. Fix the stored value for the named parameter in the `system_parameter` table to a valid literal of the expected type, then restart the meta node.
  2. Re-set the parameter via ALTER SYSTEM / the bootstrap config using a format accepted by the parameter's parser (the embedded error message tells you what failed).
  3. If the value came from an upgrade, check the release notes for changed parameter formats and migrate the value accordingly.
  4. Before writing values programmatically, run them through the same parsing/validation function used by `validate_init_system_params`.

Example fix

-- before
UPDATE system_parameter SET value = '10MB' WHERE name = 'barrier_interval_ms';
-- after
UPDATE system_parameter SET value = '1000' WHERE name = 'barrier_interval_ms';
Defensive patterns

Strategy: validation

Validate before calling

// Parse every param with the same validator before persisting
for (name, value) in proposed_params {
    validate_param_value(name, &value).map_err(|e| format!("cannot parse {} : {}", name, e))?;
}

Prevention

When it happens

Trigger: A row in the `system_parameter` table (or a bootstrap `init_params` value) contains a string that does not parse for that parameter's type — e.g. non-numeric text for an integer parameter, or a malformed limit string.

Common situations: Manual UPDATEs against the system_parameter table with typos; ALTER SYSTEM executed with an unvalidated value from an older frontend version; config values copied from a different cluster or version with different formats.

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/efe34434f7de5c52. Report an issue: GitHub.

Appendix: source

Thrown at src/meta/src/controller/system_param.rs:149

    };
}

for_all_params!(impl_system_params_from_db);
for_all_params!(impl_merge_params);
for_all_params!(impl_system_params_to_models);

impl SystemParamsController {
    pub async fn new(
        sql_meta_store: SqlMetaStore,
        notification_manager: NotificationManagerRef,
        init_params: PbSystemParams,
    ) -> MetaResult<Self> {
        let db = sql_meta_store.conn;
        let params = SystemParameter::find().all(&db).await?;
        let params = merge_params(system_params_from_db(params)?, init_params);
        tracing::info!(initial_params = ?SystemParamsReader::new(&params), "initialize system parameters");
        check_missing_params(&params).map_err(|e| anyhow!(e))?;
        validate_init_system_params(&params).map_err(|e| anyhow!(e))?;
        let ctl = Self {
            db,
            notification_manager,
            params: RwLock::new(params.clone()),
            common_handler: CommonHandler::new(params.into()),
        };
        // flush to db.
        ctl.flush_params().await?;

        Ok(ctl)
    }

    pub async fn get_pb_params(&self) -> PbSystemParams {
        self.params.read().await.clone()
    }

    pub async fn get_params(&self) -> SystemParamsReader {
        self.params.read().await.clone().into()

View on GitHub (pinned to 6469eb736d)