fix(plugin/worker): make VacuumHandler report MaxExecutionConcurrency from worker startup flag (#8435)
* fix(plugin/worker): make VacuumHandler report MaxExecutionConcurrency from worker startup flag Previously, MaxExecutionConcurrency was hardcoded to 2 in VacuumHandler.Capability(). The scheduler's schedulerWorkerExecutionLimit() takes the minimum of the UI-configured PerWorkerExecutionConcurrency and the worker-reported capability limit, so the hardcoded value silently capped each worker to 2 concurrent vacuum executions regardless of the --max-execute flag passed at worker startup. Pass maxExecutionConcurrency into NewVacuumHandler() and wire it through buildPluginWorkerHandler/buildPluginWorkerHandlers so the capability reflects the actual worker configuration. The default falls back to 2 when the value is unset or zero. * Update weed/command/worker_runtime.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Anton Ustyugov <anton@devops> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -22,25 +22,37 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
defaultVacuumTaskBatchSize = int32(1000)
|
||||
defaultVacuumTaskBatchSize = int32(1000)
|
||||
DefaultMaxExecutionConcurrency = int32(2)
|
||||
)
|
||||
|
||||
// VacuumHandler is the plugin job handler for vacuum job type.
|
||||
type VacuumHandler struct {
|
||||
grpcDialOption grpc.DialOption
|
||||
grpcDialOption grpc.DialOption
|
||||
maxExecutionConcurrency int32
|
||||
}
|
||||
|
||||
func NewVacuumHandler(grpcDialOption grpc.DialOption) *VacuumHandler {
|
||||
return &VacuumHandler{grpcDialOption: grpcDialOption}
|
||||
// NewVacuumHandler creates a VacuumHandler with the given gRPC dial option and
|
||||
// maximum execution concurrency. When maxExecutionConcurrency is zero or
|
||||
// negative, DefaultMaxExecutionConcurrency is used as the fallback.
|
||||
func NewVacuumHandler(grpcDialOption grpc.DialOption, maxExecutionConcurrency int32) *VacuumHandler {
|
||||
return &VacuumHandler{grpcDialOption: grpcDialOption, maxExecutionConcurrency: maxExecutionConcurrency}
|
||||
}
|
||||
|
||||
// Capability returns the job type capability for the vacuum handler.
|
||||
// MaxExecutionConcurrency reflects the value passed at construction time,
|
||||
// falling back to DefaultMaxExecutionConcurrency when unset.
|
||||
func (h *VacuumHandler) Capability() *plugin_pb.JobTypeCapability {
|
||||
maxExec := h.maxExecutionConcurrency
|
||||
if maxExec <= 0 {
|
||||
maxExec = DefaultMaxExecutionConcurrency
|
||||
}
|
||||
return &plugin_pb.JobTypeCapability{
|
||||
JobType: "vacuum",
|
||||
CanDetect: true,
|
||||
CanExecute: true,
|
||||
MaxDetectionConcurrency: 1,
|
||||
MaxExecutionConcurrency: 2,
|
||||
MaxExecutionConcurrency: maxExec,
|
||||
DisplayName: "Volume Vacuum",
|
||||
Description: "Reclaims disk space by removing deleted files from volumes",
|
||||
}
|
||||
|
||||
@@ -141,7 +141,7 @@ func TestShouldSkipDetectionByInterval(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestVacuumHandlerRejectsUnsupportedJobType(t *testing.T) {
|
||||
handler := NewVacuumHandler(nil)
|
||||
handler := NewVacuumHandler(nil, 0)
|
||||
err := handler.Detect(context.Background(), &plugin_pb.RunDetectionRequest{
|
||||
JobType: "balance",
|
||||
}, noopDetectionSender{})
|
||||
@@ -158,7 +158,7 @@ func TestVacuumHandlerRejectsUnsupportedJobType(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestVacuumHandlerDetectSkipsByMinInterval(t *testing.T) {
|
||||
handler := NewVacuumHandler(nil)
|
||||
handler := NewVacuumHandler(nil, 0)
|
||||
sender := &recordingDetectionSender{}
|
||||
err := handler.Detect(context.Background(), &plugin_pb.RunDetectionRequest{
|
||||
JobType: "vacuum",
|
||||
|
||||
Reference in New Issue
Block a user