You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							40 lines
						
					
					
						
							975 B
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							40 lines
						
					
					
						
							975 B
						
					
					
				
								package erasure_coding
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/worker/tasks/base"
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/worker/types"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								// Scheduling implements the scheduling logic for erasure coding tasks
							 | 
						|
								func Scheduling(task *types.TaskInput, runningTasks []*types.TaskInput, availableWorkers []*types.WorkerData, config base.TaskConfig) bool {
							 | 
						|
									ecConfig := config.(*Config)
							 | 
						|
								
							 | 
						|
									// Check if we have available workers
							 | 
						|
									if len(availableWorkers) == 0 {
							 | 
						|
										return false
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									// Count running EC tasks
							 | 
						|
									runningCount := 0
							 | 
						|
									for _, runningTask := range runningTasks {
							 | 
						|
										if runningTask.Type == types.TaskTypeErasureCoding {
							 | 
						|
											runningCount++
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									// Check concurrency limit
							 | 
						|
									if runningCount >= ecConfig.MaxConcurrent {
							 | 
						|
										return false
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									// Check if any worker can handle EC tasks
							 | 
						|
									for _, worker := range availableWorkers {
							 | 
						|
										for _, capability := range worker.Capabilities {
							 | 
						|
											if capability == types.TaskTypeErasureCoding {
							 | 
						|
												return true
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									return false
							 | 
						|
								}
							 |