risingwavelabs/risingwave · error

implement SqlServer CDC parallelized backfill

Error message

implement SqlServer CDC parallelized backfill

What it means

SqlServer CDC does not implement chunked (parallelized) snapshot backfill: `split_snapshot_read` is a `todo!()` stub, so any execution path that tries to read snapshot data in split-sized chunks panics with this message. Only non-parallelized snapshot reading is supported for SQL Server.

Source

Thrown at src/connector/src/source/cdc/external/sql_server.rs:296

        self.snapshot_read_inner(table_name, start_pk, primary_keys, limit)
    }

    fn get_parallel_cdc_splits(
        &self,
        _options: CdcTableSnapshotSplitOption,
    ) -> BoxStream<'_, ConnectorResult<CdcTableSnapshotSplit>> {
        // TODO(zw): feat: impl
        stream::empty::<ConnectorResult<CdcTableSnapshotSplit>>().boxed()
    }

    fn split_snapshot_read(
        &self,
        _table_name: SchemaTableName,
        _left: OwnedRow,
        _right: OwnedRow,
        _split_columns: Vec<Field>,
    ) -> BoxStream<'_, ConnectorResult<OwnedRow>> {
        todo!("implement SqlServer CDC parallelized backfill")
    }
}

impl SqlServerExternalTableReader {
    pub async fn new(
        config: ExternalTableConfig,
        rw_schema: Schema,
        pk_indices: Vec<usize>,
    ) -> ConnectorResult<Self> {
        tracing::info!(
            ?rw_schema,
            ?pk_indices,
            "create sql server external table reader"
        );
        let mut client_config = Config::new();

        client_config.host(&config.host);
        client_config.database(&config.database);

View on GitHub (pinned to 6469eb736d)

Solutions

  1. Use the default (non-parallelized) snapshot backfill for SQL Server CDC sources; do not set backfill parallelism options.
  2. Use one split / serial snapshot for the SQL Server table until parallelized backfill is implemented upstream.
  3. Contribute or backport an implementation of `split_snapshot_read` for SqlServerExternalTableReader.

Example fix

// before
todo!("implement SqlServer CDC parallelized backfill")
// after
self.snapshot_read_without_split(table_name).await // use serial snapshot path
Defensive patterns

Strategy: fallback

Prevention

When it happens

Trigger: Creating a SQL Server CDC table with backfill parallelism / split-based snapshot reading enabled (e.g. setting `cdc.source.backfill.parallelism` > 1 or the connector generating multiple snapshot splits), which calls `split_snapshot_read`.

Common situations: Users copying MySQL/Postgres CDC source options that enable parallel backfill onto a SQL Server source; large tables where the operator expects chunked backfill.

Related errors


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