diff --git a/docs/generated/settings/settings-for-tenants.txt b/docs/generated/settings/settings-for-tenants.txt index b319585a02da..9b01b969168c 100644 --- a/docs/generated/settings/settings-for-tenants.txt +++ b/docs/generated/settings/settings-for-tenants.txt @@ -17,7 +17,7 @@ changefeed.default_range_distribution_strategy enumeration default configures ho changefeed.event_consumer_worker_queue_size integer 16 if changefeed.event_consumer_workers is enabled, this setting sets the maxmimum number of events which a worker can buffer application changefeed.event_consumer_workers integer 0 the number of workers to use when processing events: <0 disables, 0 assigns a reasonable default, >0 assigns the setting value. for experimental/core changefeeds and changefeeds using parquet format, this is disabled application changefeed.fast_gzip.enabled boolean true use fast gzip implementation application -changefeed.frontier_highwater_lag_checkpoint_threshold duration 10m0s controls the maximum the high-water mark is allowed to lag behind the leading spans of the frontier before per-span checkpointing is enabled; if 0, checkpointing due to high-water lag is disabled application +changefeed.span_checkpoint.lag_threshold (alias: changefeed.frontier_highwater_lag_checkpoint_threshold) duration 10m0s the amount of time a changefeed's resolved timestamp (high water) must lag its leading (fastest) spans before a span-level checkpoint to save leading span progress is written; if 0, span-level checkpoints due to leading spans is disabled application changefeed.memory.per_changefeed_limit byte size 512 MiB controls amount of data that can be buffered per changefeed application changefeed.resolved_timestamp.min_update_interval (alias: changefeed.min_highwater_advance) duration 0s minimum amount of time that must have elapsed since the last time a changefeed's resolved timestamp was updated before it is eligible to be updated again; default of 0 means no minimum interval is enforced but updating will still be limited by the average time it takes to checkpoint progress application changefeed.node_throttle_config string specifies node level throttling configuration for all changefeeeds application diff --git a/docs/generated/settings/settings.html b/docs/generated/settings/settings.html index 4c11feeb0ea4..69a872e7ee9c 100644 --- a/docs/generated/settings/settings.html +++ b/docs/generated/settings/settings.html @@ -22,7 +22,7 @@
changefeed.event_consumer_worker_queue_size
integer16if changefeed.event_consumer_workers is enabled, this setting sets the maxmimum number of events which a worker can bufferServerless/Dedicated/Self-Hosted
changefeed.event_consumer_workers
integer0the number of workers to use when processing events: <0 disables, 0 assigns a reasonable default, >0 assigns the setting value. for experimental/core changefeeds and changefeeds using parquet format, this is disabledServerless/Dedicated/Self-Hosted
changefeed.fast_gzip.enabled
booleantrueuse fast gzip implementationServerless/Dedicated/Self-Hosted -
changefeed.frontier_highwater_lag_checkpoint_threshold
duration10m0scontrols the maximum the high-water mark is allowed to lag behind the leading spans of the frontier before per-span checkpointing is enabled; if 0, checkpointing due to high-water lag is disabledServerless/Dedicated/Self-Hosted +
changefeed.span_checkpoint.lag_threshold
(alias: changefeed.frontier_highwater_lag_checkpoint_threshold)
duration10m0sthe amount of time a changefeed's resolved timestamp (high water) must lag its leading (fastest) spans before a span-level checkpoint to save leading span progress is written; if 0, span-level checkpoints due to leading spans is disabledServerless/Dedicated/Self-Hosted
changefeed.memory.per_changefeed_limit
byte size512 MiBcontrols amount of data that can be buffered per changefeedServerless/Dedicated/Self-Hosted
changefeed.resolved_timestamp.min_update_interval
(alias: changefeed.min_highwater_advance)
duration0sminimum amount of time that must have elapsed since the last time a changefeed's resolved timestamp was updated before it is eligible to be updated again; default of 0 means no minimum interval is enforced but updating will still be limited by the average time it takes to checkpoint progressServerless/Dedicated/Self-Hosted
changefeed.node_throttle_config
stringspecifies node level throttling configuration for all changefeeedsServerless/Dedicated/Self-Hosted diff --git a/pkg/ccl/changefeedccl/changefeed_processors.go b/pkg/ccl/changefeedccl/changefeed_processors.go index 94630f8fb3ce..7556bc96938e 100644 --- a/pkg/ccl/changefeedccl/changefeed_processors.go +++ b/pkg/ccl/changefeedccl/changefeed_processors.go @@ -885,7 +885,7 @@ func (ca *changeAggregator) noteResolvedSpan(resolved jobspb.ResolvedSpan) (retu // At a lower frequency, we checkpoint specific spans in the job progress // either in backfills or if the highwater mark is excessively lagging behind. checkpointSpans := ca.spec.JobID != 0 && /* enterprise changefeed */ - (ca.frontier.InBackfill(resolved) || ca.frontier.HasLaggingSpans(sv)) && + (ca.frontier.InBackfill(resolved) || ca.frontier.HasLeadingSpans(sv)) && canCheckpointSpans(sv, ca.lastSpanFlush) if checkpointSpans { @@ -1670,7 +1670,7 @@ func (cf *changeFrontier) maybeCheckpointJob( // highwater mark remains fixed while other spans may significantly outpace // it, therefore to avoid losing that progress on changefeed resumption we // also store as many of those leading spans as we can in the job progress - updateCheckpoint := (inBackfill || cf.frontier.HasLaggingSpans(&cf.js.settings.SV)) && cf.js.canCheckpointSpans() + updateCheckpoint := (inBackfill || cf.frontier.HasLeadingSpans(&cf.js.settings.SV)) && cf.js.canCheckpointSpans() // If the highwater has moved an empty checkpoint will be saved var checkpoint jobspb.ChangefeedProgress_Checkpoint diff --git a/pkg/ccl/changefeedccl/changefeed_test.go b/pkg/ccl/changefeedccl/changefeed_test.go index 94222df075aa..3e7fbf2c1bc8 100644 --- a/pkg/ccl/changefeedccl/changefeed_test.go +++ b/pkg/ccl/changefeedccl/changefeed_test.go @@ -2340,7 +2340,7 @@ func TestChangefeedLaggingSpanCheckpointing(t *testing.T) { context.Background(), &s.ClusterSettings().SV, 10*time.Millisecond) changefeedbase.SpanCheckpointMaxBytes.Override( context.Background(), &s.ClusterSettings().SV, 100<<20) - changefeedbase.FrontierHighwaterLagCheckpointThreshold.Override( + changefeedbase.SpanCheckpointLagThreshold.Override( context.Background(), &s.ClusterSettings().SV, 10*time.Millisecond) // We'll start changefeed with the cursor. diff --git a/pkg/ccl/changefeedccl/changefeedbase/settings.go b/pkg/ccl/changefeedccl/changefeedbase/settings.go index f28590b92ed0..29357235a6ca 100644 --- a/pkg/ccl/changefeedccl/changefeedbase/settings.go +++ b/pkg/ccl/changefeedccl/changefeedbase/settings.go @@ -79,16 +79,21 @@ var SpanCheckpointInterval = settings.RegisterDurationSetting( settings.WithName("changefeed.span_checkpoint.interval"), ) -// FrontierHighwaterLagCheckpointThreshold controls the amount the high-water -// mark is allowed to lag behind the leading edge of the frontier before we -// begin to attempt checkpointing spans above the high-water mark -var FrontierHighwaterLagCheckpointThreshold = settings.RegisterDurationSetting( +// SpanCheckpointLagThreshold controls the amount of time a changefeed's +// leading spans must be ahead of its slowest spans before a span-level +// checkpoint is written. +var SpanCheckpointLagThreshold = settings.RegisterDurationSetting( settings.ApplicationLevel, "changefeed.frontier_highwater_lag_checkpoint_threshold", - "controls the maximum the high-water mark is allowed to lag behind the leading spans of the frontier before per-span checkpointing is enabled; if 0, checkpointing due to high-water lag is disabled", + "the amount of time a changefeed's resolved timestamp (high water) "+ + "must lag its leading (fastest) spans before a span-level checkpoint "+ + "to save leading span progress is written; if 0, span-level checkpoints "+ + "due to leading spans is disabled", 10*time.Minute, settings.NonNegativeDuration, - settings.WithPublic) + settings.WithPublic, + settings.WithName("changefeed.span_checkpoint.lag_threshold"), +) // SpanCheckpointMaxBytes controls the maximum number of key bytes that will be added // to a span-level checkpoint record. diff --git a/pkg/ccl/changefeedccl/resolvedspan/frontier.go b/pkg/ccl/changefeedccl/resolvedspan/frontier.go index 93e348e04258..94fb4d5765e9 100644 --- a/pkg/ccl/changefeedccl/resolvedspan/frontier.go +++ b/pkg/ccl/changefeedccl/resolvedspan/frontier.go @@ -293,11 +293,11 @@ func (f *resolvedSpanFrontier) assertBoundaryNotEarlier( return nil } -// HasLaggingSpans returns whether the frontier has lagging spans as defined +// HasLeadingSpans returns whether the frontier has lagging spans as defined // by whether the frontier trails the latest timestamp by at least -// changefeedbase.FrontierHighwaterLagCheckpointThreshold. -func (f *resolvedSpanFrontier) HasLaggingSpans(sv *settings.Values) bool { - lagThresholdNanos := int64(changefeedbase.FrontierHighwaterLagCheckpointThreshold.Get(sv)) +// changefeedbase.SpanCheckpointLagThreshold. +func (f *resolvedSpanFrontier) HasLeadingSpans(sv *settings.Values) bool { + lagThresholdNanos := int64(changefeedbase.SpanCheckpointLagThreshold.Get(sv)) if lagThresholdNanos == 0 { return false }