risingwavelabs/risingwave · error · ConnectorError
`debug_splits` is not allowed in release mode
Error message
`debug_splits` is not allowed in release mode
What it means
extract_prop_from_new_source strips the `debug_splits` property from source with_properties; in release builds (cfg(not(debug_assertions))) supplying it is a hard error. `debug_splits` is a developer-only knob to force specific splits in debug testing.
Solutions
- Remove the `debug_splits` property from the source's WITH options
- Use a debug build (debug_assertions enabled) if you genuinely need forced splits
- ALTER the source to drop the property, then retry the operation
Example fix
-- before CREATE SOURCE s (...) WITH (connector = 'kafka', debug_splits = '...'); -- after CREATE SOURCE s (...) WITH (connector = 'kafka');
Defensive patterns
Strategy: validation
Validate before calling
-- check the WITH clause before creating a source in release mode SELECT * FROM rw_catalog.rw_sources WHERE name = 's'; -- inspect properties for debug_splits
Try / catch
match create_source(...) {
Err(e) if e.to_string().contains("debug_splits") => {
// strip the property and retry
}
r => r?,
} Prevention
- Never copy debug_splits from dev test fixtures into prod DDL
- Lint DDL scripts for debug-only WITH options
- Use dev builds only in dev environments
When it happens
Trigger: CREATE SOURCE ... WITH (debug_splits = '...') (or ALTER SOURCE adding it) against a release-mode RisingWave binary.
Common situations: Copying a WITH clause from a dev/nightly test setup into a production release deployment; reproducing a split assignment bug on prod by accident.
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
- cannot find StreamActor of actor
- concurrent backup job is not supported: existent job
- downstream relation missing for
- empty commit metadata
- empty vnode bitmap
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/ea2ce01a14254893.
Report an issue: GitHub.
Appendix: source
Thrown at src/meta/src/stream/source_manager/worker.rs:101
}
fn extract_prop_from_existing_source(source: &Source) -> ConnectorResult<ConnectorProperties> {
let options_with_secret =
WithOptionsSecResolved::new(source.with_properties.clone(), source.secret_refs.clone());
let mut properties = ConnectorProperties::extract(options_with_secret, false)?;
properties.init_from_pb_source(source);
Ok(properties)
}
fn extract_prop_from_new_source(source: &Source) -> ConnectorResult<ConnectorProperties> {
let options_with_secret = WithOptionsSecResolved::new(
{
let mut with_properties = source.with_properties.clone();
let _removed = with_properties.remove(DEBUG_SPLITS_KEY);
#[cfg(not(debug_assertions))]
{
if _removed.is_some() {
return Err(ConnectorError::from(anyhow::anyhow!(
"`debug_splits` is not allowed in release mode"
)));
}
}
with_properties
},
source.secret_refs.clone(),
);
let mut properties = ConnectorProperties::extract(options_with_secret, true)?;
properties.init_from_pb_source(source);
Ok(properties)
}
/// Used to create a new [`ConnectorSourceWorkerHandle`] for a new source.
///
/// It will call [`ConnectorSourceWorker::tick()`] to fetch split metadata once before returning.
pub async fn create_source_worker(View on GitHub (pinned to 6469eb736d)