Skip to content

Commit 10a5244

Browse files
committed
changefeedccl: change db-level feed default to no initial scan
This change the default initial scan behavior for db-level feeds to not do an initial scan if no option is specified. When an initial scan is specified, that is respected. We do not allow db-level changefeeds with initial_scan='only'. This includes a rewrite of existing db-level feeds tests which rely on default initial scans in their testing. Epic: CRDB-1421 Informs: #156484 Release note: None
1 parent 7e8456c commit 10a5244

File tree

3 files changed

+352
-188
lines changed

3 files changed

+352
-188
lines changed

pkg/ccl/changefeedccl/changefeed_stmt.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,9 +230,18 @@ func changefeedPlanHook(
230230
return nil, nil, false, err
231231
}
232232

233-
// Treat all tables inside a database as if "split_column_families" is set.
234233
if changefeedStmt.Level == tree.ChangefeedLevelDatabase {
234+
// Treat all tables inside a database as if "split_column_families" is set.
235235
rawOpts[changefeedbase.OptSplitColumnFamilies] = `yes`
236+
237+
// The default behavior for a database-level changefeed is
238+
// NOT to perform an initial scan, unlike table-level changefeeds.
239+
_, initialScanSet := rawOpts[changefeedbase.OptInitialScan]
240+
_, initialScanOnlySet := rawOpts[changefeedbase.OptInitialScanOnly]
241+
_, noInitialScanSet := rawOpts[changefeedbase.OptNoInitialScan]
242+
if !initialScanOnlySet && !noInitialScanSet && !initialScanSet {
243+
rawOpts[changefeedbase.OptInitialScan] = `no`
244+
}
236245
}
237246
opts := changefeedbase.MakeStatementOptions(rawOpts)
238247

@@ -1462,6 +1471,17 @@ func validateDetailsAndOptions(
14621471
if err := opts.ValidateForCreateChangefeed(details.Select != ""); err != nil {
14631472
return err
14641473
}
1474+
targetSpecs := details.TargetSpecifications
1475+
if len(targetSpecs) != 0 && targetSpecs[0].Type == jobspb.ChangefeedTargetSpecification_DATABASE {
1476+
scanType, err := opts.GetInitialScanType()
1477+
if err != nil {
1478+
return err
1479+
}
1480+
if scanType == changefeedbase.OnlyInitialScan {
1481+
return errors.Errorf(
1482+
`cannot specify %s on a database level changefeed`, changefeedbase.OptInitialScanOnly)
1483+
}
1484+
}
14651485
if opts.HasEndTime() {
14661486
scanType, err := opts.GetInitialScanType()
14671487
if err != nil {

0 commit comments

Comments
 (0)