aboutsummaryrefslogtreecommitdiff
path: root/weed/worker/tasks/registry.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/worker/tasks/registry.go')
-rw-r--r--weed/worker/tasks/registry.go64
1 files changed, 51 insertions, 13 deletions
diff --git a/weed/worker/tasks/registry.go b/weed/worker/tasks/registry.go
index 105055128..626a54a14 100644
--- a/weed/worker/tasks/registry.go
+++ b/weed/worker/tasks/registry.go
@@ -8,23 +8,14 @@ import (
)
var (
- globalRegistry *TaskRegistry
globalTypesRegistry *types.TaskRegistry
globalUIRegistry *types.UIRegistry
- registryOnce sync.Once
+ globalTaskRegistry *TaskRegistry
typesRegistryOnce sync.Once
uiRegistryOnce sync.Once
+ taskRegistryOnce sync.Once
)
-// GetGlobalRegistry returns the global task registry (singleton)
-func GetGlobalRegistry() *TaskRegistry {
- registryOnce.Do(func() {
- globalRegistry = NewTaskRegistry()
- glog.V(1).Infof("Created global task registry")
- })
- return globalRegistry
-}
-
// GetGlobalTypesRegistry returns the global types registry (singleton)
func GetGlobalTypesRegistry() *types.TaskRegistry {
typesRegistryOnce.Do(func() {
@@ -43,9 +34,18 @@ func GetGlobalUIRegistry() *types.UIRegistry {
return globalUIRegistry
}
-// AutoRegister registers a task directly with the global registry
+// GetGlobalTaskRegistry returns the global task registry (singleton)
+func GetGlobalTaskRegistry() *TaskRegistry {
+ taskRegistryOnce.Do(func() {
+ globalTaskRegistry = NewTaskRegistry()
+ glog.V(1).Infof("Created global task registry")
+ })
+ return globalTaskRegistry
+}
+
+// AutoRegister registers a task with the global task registry
func AutoRegister(taskType types.TaskType, factory types.TaskFactory) {
- registry := GetGlobalRegistry()
+ registry := GetGlobalTaskRegistry()
registry.Register(taskType, factory)
glog.V(1).Infof("Auto-registered task type: %s", taskType)
}
@@ -108,3 +108,41 @@ func SetMaintenancePolicyFromTasks() {
// For now, we'll just log that this should be called by the integration layer
glog.V(1).Infof("SetMaintenancePolicyFromTasks called - policy should be built by the integration layer")
}
+
+// TaskRegistry manages task factories
+type TaskRegistry struct {
+ factories map[types.TaskType]types.TaskFactory
+ mutex sync.RWMutex
+}
+
+// NewTaskRegistry creates a new task registry
+func NewTaskRegistry() *TaskRegistry {
+ return &TaskRegistry{
+ factories: make(map[types.TaskType]types.TaskFactory),
+ }
+}
+
+// Register adds a factory to the registry
+func (r *TaskRegistry) Register(taskType types.TaskType, factory types.TaskFactory) {
+ r.mutex.Lock()
+ defer r.mutex.Unlock()
+ r.factories[taskType] = factory
+}
+
+// Get returns a factory from the registry
+func (r *TaskRegistry) Get(taskType types.TaskType) types.TaskFactory {
+ r.mutex.RLock()
+ defer r.mutex.RUnlock()
+ return r.factories[taskType]
+}
+
+// GetAll returns all registered factories
+func (r *TaskRegistry) GetAll() map[types.TaskType]types.TaskFactory {
+ r.mutex.RLock()
+ defer r.mutex.RUnlock()
+ result := make(map[types.TaskType]types.TaskFactory)
+ for k, v := range r.factories {
+ result[k] = v
+ }
+ return result
+}