Skip to content

Commit

Permalink
kvserver: introduce and disable eager replicate queue on span cfg
Browse files Browse the repository at this point in the history
Replicas were enqueued into the replicate queue, upon the store
receiving a span config update which could affect the replica. The
replicate queue `shouldQueue` is relatively more expensive than other
queues.

Introduce the cluster setting
`kv.eager_replicate_enqueue_on_span_config_update.enabled`, which when
set to true, enables queuing up replicas on span config updates; when
set to false, disables queuing replicas on span config updates.

By default, this settings is set to false.

Resolves: cockroachdb#108724
Release note: None
  • Loading branch information
kvoli committed Aug 14, 2023
1 parent b1db60c commit df7097a
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 3 deletions.
11 changes: 11 additions & 0 deletions pkg/kv/kvserver/replicate_queue.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,17 @@ var MinLeaseTransferInterval = settings.RegisterDurationSetting(
settings.NonNegativeDuration,
)

// EagerReplicateEnqueueOnSpanConfigUpdateEnabled controls whether replicas are
// enqueued into the replicate queue, following a span config update which
// affects the replica.
var EagerReplicateEnqueueOnSpanConfigUpdateEnabled = settings.RegisterBoolSetting(
settings.SystemOnly,
"kv.eager_replicate_enqueue_on_span_config_update.enabled",
"controls whether replicas are enqueued into the replicate queue for "+
"processing, when a span config update occurs, which affects the replica",
false,
)

var (
metaReplicateQueueAddReplicaCount = metric.Metadata{
Name: "queue.replicate.addreplica",
Expand Down
12 changes: 9 additions & 3 deletions pkg/kv/kvserver/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -2444,9 +2444,15 @@ func (s *Store) onSpanConfigUpdate(ctx context.Context, updated roachpb.Span) {
s.mergeQueue.Async(replCtx, "span config update", true /* wait */, func(ctx context.Context, h queueHelper) {
h.MaybeAdd(ctx, repl, now)
})
s.replicateQueue.Async(replCtx, "span config update", true /* wait */, func(ctx context.Context, h queueHelper) {
h.MaybeAdd(ctx, repl, now)
})

// The replicate queue has a relatively more expensive queue check
// (shouldQueue), because it scales with the number of stores, and
// performs more checks.
if EagerReplicateEnqueueOnSpanConfigUpdateEnabled.Get(&s.GetStoreConfig().Settings.SV) {
s.replicateQueue.Async(replCtx, "span config update", true /* wait */, func(ctx context.Context, h queueHelper) {
h.MaybeAdd(ctx, repl, now)
})
}
return nil // more
},
); err != nil {
Expand Down

0 comments on commit df7097a

Please sign in to comment.