{"record":{"id":"8ea26c280a93edc4","repo":"risingwavelabs/risingwave","slug":"implement-sqlserver-cdc-parallelized-backfill","errorCode":null,"errorMessage":"implement SqlServer CDC parallelized backfill","messagePattern":"implement SqlServer CDC parallelized backfill","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/connector/src/source/cdc/external/sql_server.rs","lineNumber":296,"sourceCode":"        self.snapshot_read_inner(table_name, start_pk, primary_keys, limit)\n    }\n\n    fn get_parallel_cdc_splits(\n        &self,\n        _options: CdcTableSnapshotSplitOption,\n    ) -> BoxStream<'_, ConnectorResult<CdcTableSnapshotSplit>> {\n        // TODO(zw): feat: impl\n        stream::empty::<ConnectorResult<CdcTableSnapshotSplit>>().boxed()\n    }\n\n    fn split_snapshot_read(\n        &self,\n        _table_name: SchemaTableName,\n        _left: OwnedRow,\n        _right: OwnedRow,\n        _split_columns: Vec<Field>,\n    ) -> BoxStream<'_, ConnectorResult<OwnedRow>> {\n        todo!(\"implement SqlServer CDC parallelized backfill\")\n    }\n}\n\nimpl SqlServerExternalTableReader {\n    pub async fn new(\n        config: ExternalTableConfig,\n        rw_schema: Schema,\n        pk_indices: Vec<usize>,\n    ) -> ConnectorResult<Self> {\n        tracing::info!(\n            ?rw_schema,\n            ?pk_indices,\n            \"create sql server external table reader\"\n        );\n        let mut client_config = Config::new();\n\n        client_config.host(&config.host);\n        client_config.database(&config.database);","sourceCodeStart":278,"sourceCodeEnd":314,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/source/cdc/external/sql_server.rs#L278-L314","documentation":"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.","triggerScenarios":"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`.","commonSituations":"Users copying MySQL/Postgres CDC source options that enable parallel backfill onto a SQL Server source; large tables where the operator expects chunked backfill.","solutions":["Use the default (non-parallelized) snapshot backfill for SQL Server CDC sources; do not set backfill parallelism options.","Use one split / serial snapshot for the SQL Server table until parallelized backfill is implemented upstream.","Contribute or backport an implementation of `split_snapshot_read` for SqlServerExternalTableReader."],"exampleFix":"// before\ntodo!(\"implement SqlServer CDC parallelized backfill\")\n// after\nself.snapshot_read_without_split(table_name).await // use serial snapshot path","handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":["Do not enable parallelized backfill options on SQL Server CDC sources.","Keep default single-split snapshot for SQL Server.","Check connector feature docs before copying MySQL/Postgres CDC options across engines."],"tags":["cdc","sql-server","backfill","unimplemented"],"backgroundTag":"method-not-implemented","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}