scheduling.go 975 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package erasure_coding
  2. import (
  3. "github.com/seaweedfs/seaweedfs/weed/worker/tasks/base"
  4. "github.com/seaweedfs/seaweedfs/weed/worker/types"
  5. )
  6. // Scheduling implements the scheduling logic for erasure coding tasks
  7. func Scheduling(task *types.TaskInput, runningTasks []*types.TaskInput, availableWorkers []*types.WorkerData, config base.TaskConfig) bool {
  8. ecConfig := config.(*Config)
  9. // Check if we have available workers
  10. if len(availableWorkers) == 0 {
  11. return false
  12. }
  13. // Count running EC tasks
  14. runningCount := 0
  15. for _, runningTask := range runningTasks {
  16. if runningTask.Type == types.TaskTypeErasureCoding {
  17. runningCount++
  18. }
  19. }
  20. // Check concurrency limit
  21. if runningCount >= ecConfig.MaxConcurrent {
  22. return false
  23. }
  24. // Check if any worker can handle EC tasks
  25. for _, worker := range availableWorkers {
  26. for _, capability := range worker.Capabilities {
  27. if capability == types.TaskTypeErasureCoding {
  28. return true
  29. }
  30. }
  31. }
  32. return false
  33. }