risingwavelabs/risingwave · error · ConnectorError
Unsupported split type for adaptive splits
Error message
Unsupported split type for adaptive splits: {:?} What it means
fill_adaptive_split redistributes splits across actors for sources that support adaptive split assignment (currently only Google Pub/Sub style split templates). Any other SplitImpl variant falls into the catch-all arm and returns this error, because adaptive rescaling cannot interpret that split type.
Solutions
- Only call fill_adaptive_split for sources whose SplitImpl supports adaptive splits (e.g. GooglePubsub)
- Route other connectors through their normal static split assignment path
- Add a match arm implementing adaptive splitting if the new connector supports it
Example fix
// before
fill_adaptive_split(&split_template, &fragment_id, &actor_ids)?; // split_template is a Kafka split
// after
if split_template.is_adaptive_supported() { fill_adaptive_split(...) } else { assign_static_splits(...) } Defensive patterns
Strategy: type-guard
Validate before calling
const adaptiveSplitSources = ['GooglePubsub'];
function supportsAdaptiveSplits(splitType) { return adaptiveSplitSources.includes(splitType); } Type guard
const isAdaptiveSplit = (s) => s.type === 'GooglePubsub' || s.type === 'Pubsub';
Try / catch
match fill_adaptive_split(tpl, fid, actors) { Err(e) if String(e).contains("Unsupported split type") => assign_static_splits(tpl, actors), r => r } Prevention
- Call fill_adaptive_split only for Pub/Sub-like split templates
- Keep a registry of which connectors support adaptive splits
- Add explicit match arms when onboarding new connectors
When it happens
Trigger: Calling fill_adaptive_split (directly or via resolve_fragment_to_actor_splits/reassign_splits) with a split template from a connector without adaptive-split support, e.g. Kafka, Kinesis, or NATS splits passed to the adaptive path.
Common situations: Fragment/actor rescaling code wired to a source whose SplitImpl variant is not the adaptive-supported one; adding a new connector and forgetting to either support or exclude it from adaptive splitting; unit tests like test_fill_adaptive_split_unsupported exercising the error path.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- a valid license key is set, but it is currently not…
- a valid license key is set, but it is currently not…
- BatchPosixFsReader should not be used
- bounded compaction is not supported for copy-on-write tasks
- cannot reschedule jobs
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/fdb1de5801842bc8.
Report an issue: GitHub.
Appendix: source
Thrown at src/connector/src/source/util.rs:67
for idx in 0..actor_count {
let split_id: Arc<str> = format!("{}-{}", split.subscription, idx).into();
new_splits.insert(
split_id,
SplitImpl::GooglePubsub(PubsubSplit {
index: idx as u32,
subscription: split.subscription.clone(),
__deprecated_start_offset: None,
__deprecated_stop_offset: None,
}),
);
}
tracing::debug!(
"Filled adaptive splits for GooglePubsub source, {} splits in total",
new_splits.len()
);
Ok(new_splits)
}
_ => Err(ConnectorError::from(anyhow::anyhow!(
"Unsupported split type for adaptive splits: {:?}",
split_template
))),
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::source::SplitMetaData;
use crate::source::nats::split::NatsOffset;
#[test]
fn test_fill_adaptive_split_pubsub() {
let template = SplitImpl::GooglePubsub(PubsubSplit {
index: 0,
subscription: "projects/p/subscriptions/s".to_owned(),
__deprecated_start_offset: None,View on GitHub (pinned to 6469eb736d)