* add ui for maintenance * valid config loading. fix workers page. * refactor * grpc between admin and workers * add a long-running bidirectional grpc call between admin and worker * use the grpc call to heartbeat * use the grpc call to communicate * worker can remove the http client * admin uses http port + 10000 as its default grpc port * one task one package * handles connection failures gracefully with exponential backoff * grpc with insecure tls * grpc with optional tls * fix detecting tls * change time config from nano seconds to seconds * add tasks with 3 interfaces * compiles reducing hard coded * remove a couple of tasks * remove hard coded references * reduce hard coded values * remove hard coded values * remove hard coded from templ * refactor maintenance package * fix import cycle * simplify * simplify * auto register * auto register factory * auto register task types * self register types * refactor * simplify * remove one task * register ui * lazy init executor factories * use registered task types * DefaultWorkerConfig remove hard coded task types * remove more hard coded * implement get maintenance task * dynamic task configuration * "System Settings" should only have system level settings * adjust menu for tasks * ensure menu not collapsed * render job configuration well * use templ for ui of task configuration * fix ordering * fix bugs * saving duration in seconds * use value and unit for duration * Delete WORKER_REFACTORING_PLAN.md * Delete maintenance.json * Delete custom_worker_example.go * remove address from workers * remove old code from ec task * remove creating collection button * reconnect with exponential backoff * worker use security.toml * start admin server with tls info from security.toml * fix "weed admin" cli description
82 lines
2.1 KiB
Go
82 lines
2.1 KiB
Go
package erasure_coding
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/worker/tasks"
|
|
"github.com/seaweedfs/seaweedfs/weed/worker/types"
|
|
)
|
|
|
|
// Factory creates erasure coding task instances
|
|
type Factory struct {
|
|
*tasks.BaseTaskFactory
|
|
}
|
|
|
|
// NewFactory creates a new erasure coding task factory
|
|
func NewFactory() *Factory {
|
|
return &Factory{
|
|
BaseTaskFactory: tasks.NewBaseTaskFactory(
|
|
types.TaskTypeErasureCoding,
|
|
[]string{"erasure_coding", "storage", "durability"},
|
|
"Convert volumes to erasure coded format for improved durability",
|
|
),
|
|
}
|
|
}
|
|
|
|
// Create creates a new erasure coding 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 *EcDetector
|
|
sharedScheduler *Scheduler
|
|
)
|
|
|
|
// getSharedInstances returns the shared detector and scheduler instances
|
|
func getSharedInstances() (*EcDetector, *Scheduler) {
|
|
if sharedDetector == nil {
|
|
sharedDetector = NewEcDetector()
|
|
}
|
|
if sharedScheduler == nil {
|
|
sharedScheduler = NewScheduler()
|
|
}
|
|
return sharedDetector, sharedScheduler
|
|
}
|
|
|
|
// GetSharedInstances returns the shared detector and scheduler instances (public access)
|
|
func GetSharedInstances() (*EcDetector, *Scheduler) {
|
|
return getSharedInstances()
|
|
}
|
|
|
|
// Auto-register this task when the package is imported
|
|
func init() {
|
|
factory := NewFactory()
|
|
tasks.AutoRegister(types.TaskTypeErasureCoding, 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)
|
|
})
|
|
}
|