{"record":{"id":"ef9d8752bd6096de","repo":"risingwavelabs/risingwave","slug":"value-out-of-range-expect","errorCode":null,"errorMessage":"value {:?} out of range, expect {:?}","messagePattern":"value (.+?) out of range, expect (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/meta/src/controller/catalog/alter_op.rs","lineNumber":836,"sourceCode":"    }\n\n    pub async fn alter_database_param(\n        &self,\n        database_id: DatabaseId,\n        param: AlterDatabaseParam,\n    ) -> MetaResult<(NotificationVersion, risingwave_meta_model::database::Model)> {\n        let inner = self.inner.write().await;\n        let txn = inner.db.begin().await?;\n\n        let mut database = database::ActiveModel {\n            database_id: Set(database_id),\n            ..Default::default()\n        };\n        match param {\n            AlterDatabaseParam::BarrierIntervalMs(interval) => {\n                if let Some(ref interval) = interval {\n                    OverrideValidate::barrier_interval_ms(interval)\n                        .map_err(|e| anyhow::anyhow!(e))?;\n                }\n                database.barrier_interval_ms = Set(interval.map(|i| i as i32));\n            }\n            AlterDatabaseParam::CheckpointFrequency(frequency) => {\n                if let Some(ref frequency) = frequency {\n                    OverrideValidate::checkpoint_frequency(frequency)\n                        .map_err(|e| anyhow::anyhow!(e))?;\n                }\n                database.checkpoint_frequency = Set(frequency.map(|f| f as i64));\n            }\n        }\n        let database = database.update(&txn).await?;\n\n        let obj = Object::find_by_id(database_id)\n            .one(&txn)\n            .await?\n            .ok_or_else(|| MetaError::catalog_id_not_found(\"database\", database_id))?;\n","sourceCodeStart":818,"sourceCodeEnd":854,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/meta/src/controller/catalog/alter_op.rs#L818-L854","documentation":"When altering a database's barrier_interval_ms parameter, RisingWave validates the proposed value against the allowed range via OverrideValidate::barrier_interval_ms (backed by expect_range in src/common/src/system_param/mod.rs:281). If the provided u64 value falls outside the supported range, the validation returns this formatted string which alter_database_param wraps into an anyhow error. It prevents parameters that would overflow the i32 storage column or produce nonsensical barrier intervals.","triggerScenarios":"Calling ALTER DATABASE ... barrier_interval_ms (or the alter_database_param catalog API) with a u64 value outside the accepted range for barrier_interval_ms, e.g. an enormous millisecond value that would not fit in i32 or violates the configured min/max bounds.","commonSituations":"Copy-pasting a config value in seconds instead of milliseconds; scripting DDL with an unbounded computed value; using a value from an older cluster version whose accepted range differs.","solutions":["Check the current accepted range and pass a barrier_interval_ms within it.","Confirm the unit is milliseconds (not seconds) and the value fits in i32.","Omit the parameter (pass None) to keep the existing/default value."],"exampleFix":"// before\nALTER DATABASE mydb SET barrier_interval_ms = 999999999999;\n// after\nALTER DATABASE mydb SET barrier_interval_ms = 250;","handlingStrategy":"validation","validationCode":"// Rust\nfn valid_barrier_interval_ms(v: u64) -> bool {\n    // must fit i32 and satisfy system param range\n    v <= i32::MAX as u64 && v > 0\n}\nassert!(valid_barrier_interval_ms(250));","typeGuard":"fn fits_i32(v: u64) -> Option<i32> { i32::try_from(v).ok() }","tryCatchPattern":"match controller.alter_database_param(db_id, AlterDatabaseParam::BarrierIntervalMs(Some(v))).await {\n    Err(e) if e.to_string().contains(\"out of range\") => eprintln!(\"pick a value within the allowed barrier_interval_ms range\"),\n    other => other?,\n}","preventionTips":["Clamp scripted parameter values against the documented range before issuing DDL.","Always treat barrier_interval_ms as milliseconds.","Prefer omitting the parameter to inherit validated defaults."],"tags":["meta","system-parameter","validation","database"],"backgroundTag":"value-out-of-range","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"}