scheduling.go 953 B

12345678910111213141516171819202122232425262728293031323334353637
  1. package vacuum
  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 vacuum tasks
  7. func Scheduling(task *types.TaskInput, runningTasks []*types.TaskInput, availableWorkers []*types.WorkerData, config base.TaskConfig) bool {
  8. vacuumConfig := config.(*Config)
  9. // Count running vacuum tasks
  10. runningVacuumCount := 0
  11. for _, runningTask := range runningTasks {
  12. if runningTask.Type == types.TaskTypeVacuum {
  13. runningVacuumCount++
  14. }
  15. }
  16. // Check concurrency limit
  17. if runningVacuumCount >= vacuumConfig.MaxConcurrent {
  18. return false
  19. }
  20. // Check for available workers with vacuum capability
  21. for _, worker := range availableWorkers {
  22. if worker.CurrentLoad < worker.MaxConcurrent {
  23. for _, capability := range worker.Capabilities {
  24. if capability == types.TaskTypeVacuum {
  25. return true
  26. }
  27. }
  28. }
  29. }
  30. return false
  31. }