diff options
Diffstat (limited to 'weed/worker/tasks/vacuum/vacuum_register.go')
| -rw-r--r-- | weed/worker/tasks/vacuum/vacuum_register.go | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/weed/worker/tasks/vacuum/vacuum_register.go b/weed/worker/tasks/vacuum/vacuum_register.go new file mode 100644 index 000000000..7d930a88e --- /dev/null +++ b/weed/worker/tasks/vacuum/vacuum_register.go @@ -0,0 +1,81 @@ +package vacuum + +import ( + "fmt" + + "github.com/seaweedfs/seaweedfs/weed/worker/tasks" + "github.com/seaweedfs/seaweedfs/weed/worker/types" +) + +// Factory creates vacuum task instances +type Factory struct { + *tasks.BaseTaskFactory +} + +// NewFactory creates a new vacuum task factory +func NewFactory() *Factory { + return &Factory{ + BaseTaskFactory: tasks.NewBaseTaskFactory( + types.TaskTypeVacuum, + []string{"vacuum", "storage"}, + "Vacuum operation to reclaim disk space by removing deleted files", + ), + } +} + +// Create creates a new vacuum task instance +func (f *Factory) Create(params types.TaskParams) (types.TaskInterface, error) { + // Validate parameters + if params.VolumeID == 0 { + return nil, fmt.Errorf("volume_id is required") + } + if params.Server == "" { + return nil, fmt.Errorf("server is required") + } + + task := NewTask(params.Server, params.VolumeID) + task.SetEstimatedDuration(task.EstimateTime(params)) + + return task, nil +} + +// Shared detector and scheduler instances +var ( + sharedDetector *VacuumDetector + sharedScheduler *VacuumScheduler +) + +// getSharedInstances returns the shared detector and scheduler instances +func getSharedInstances() (*VacuumDetector, *VacuumScheduler) { + if sharedDetector == nil { + sharedDetector = NewVacuumDetector() + } + if sharedScheduler == nil { + sharedScheduler = NewVacuumScheduler() + } + return sharedDetector, sharedScheduler +} + +// GetSharedInstances returns the shared detector and scheduler instances (public access) +func GetSharedInstances() (*VacuumDetector, *VacuumScheduler) { + return getSharedInstances() +} + +// Auto-register this task when the package is imported +func init() { + factory := NewFactory() + tasks.AutoRegister(types.TaskTypeVacuum, factory) + + // Get shared instances for all registrations + detector, scheduler := getSharedInstances() + + // Register with types registry + tasks.AutoRegisterTypes(func(registry *types.TaskRegistry) { + registry.RegisterTask(detector, scheduler) + }) + + // Register with UI registry using the same instances + tasks.AutoRegisterUI(func(uiRegistry *types.UIRegistry) { + RegisterUI(uiRegistry, detector, scheduler) + }) +} |
