diff --git a/server/config/config.go b/server/config/config.go index 52f052e50b2..c46208345a3 100644 --- a/server/config/config.go +++ b/server/config/config.go @@ -258,6 +258,8 @@ const ( defaultLogFormat = "text" defaultMaxMovableHotPeerSize = int64(512) + + defaultSendSnapshotSize = int64(1000) ) // Special keys for Labels @@ -762,6 +764,8 @@ type ScheduleConfig struct { // MaxMovableHotPeerSize is the threshold of region size for balance hot region and split bucket scheduler. // Hot region must be split before moved if it's region size is greater than MaxMovableHotPeerSize. MaxMovableHotPeerSize int64 `toml:"max-movable-hot-peer-size" json:"max-movable-hot-peer-size,omitempty"` + + SendSnapshotSize int64 `toml:"send-snapshot-size" json:"send-snapshot-size"` } // Clone returns a cloned scheduling configuration. @@ -863,6 +867,10 @@ func (c *ScheduleConfig) adjust(meta *configMetaData, reloading bool) error { if !meta.IsDefined("enable-cross-table-merge") { c.EnableCrossTableMerge = defaultEnableCrossTableMerge } + + if !meta.IsDefined("send-snapshot-size") { + adjustInt64(&c.SendSnapshotSize, defaultSendSnapshotSize) + } adjustFloat64(&c.LowSpaceRatio, defaultLowSpaceRatio) adjustFloat64(&c.HighSpaceRatio, defaultHighSpaceRatio) diff --git a/server/config/persist_options.go b/server/config/persist_options.go index 643e20a3087..f93f48e90e5 100644 --- a/server/config/persist_options.go +++ b/server/config/persist_options.go @@ -531,6 +531,15 @@ func (o *PersistOptions) IsLocationReplacementEnabled() bool { return o.GetScheduleConfig().EnableLocationReplacement } +// GetSendSnapshotSize returns the send snapshot size. +func (o *PersistOptions) GetSendSnapshotSize() int64 { + size := o.GetScheduleConfig().SendSnapshotSize + if size <= 0 { + size = defaultSendSnapshotSize + } + return size +} + // GetMaxMovableHotPeerSize returns the max movable hot peer size. func (o *PersistOptions) GetMaxMovableHotPeerSize() int64 { size := o.GetScheduleConfig().MaxMovableHotPeerSize diff --git a/server/schedule/operator_controller.go b/server/schedule/operator_controller.go index 665ab5779b1..c197d166796 100644 --- a/server/schedule/operator_controller.go +++ b/server/schedule/operator_controller.go @@ -1002,12 +1002,16 @@ func (oc *OperatorController) getOrCreateStoreLimit(storeID uint64, limitType st func (oc *OperatorController) getOrCreateSnapLimit(storeID uint64, snapType storelimit.SnapType) *storelimit.SlidingWindows { s := oc.cluster.GetStore(storeID) + cap := oc.cluster.GetOpts().GetSendSnapshotSize() if s == nil { log.Error("invalid store ID", zap.Uint64("store-id", storeID)) return nil } if s.GetSnapLimit(snapType) == nil { - oc.cluster.GetBasicCluster().ResetSnapLimit(storeID, snapType) + oc.cluster.GetBasicCluster().ResetSnapLimit(storeID, snapType, cap) + } + if limit := s.GetSnapLimit(snapType); cap != limit.GetCapacity() { + limit.Adjust(cap) } return s.GetSnapLimit(snapType) }