github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/scheduler/build.go (about) 1 package scheduler 2 3 import ( 4 "context" 5 "fmt" 6 7 "code.cloudfoundry.org/lager" 8 "github.com/pf-qiu/concourse/v6/atc/db" 9 ) 10 11 type manualTriggerBuild struct { 12 db.Build 13 14 job db.Job 15 jobInputs db.InputConfigs 16 17 algorithm Algorithm 18 } 19 20 func (m *manualTriggerBuild) IsReadyToDetermineInputs(logger lager.Logger) (bool, error) { 21 return m.ResourcesChecked() 22 } 23 24 func (m *manualTriggerBuild) BuildInputs(ctx context.Context) ([]db.BuildInput, bool, error) { 25 inputMapping, resolved, hasNextInputs, err := m.algorithm.Compute(ctx, m.job, m.jobInputs) 26 if err != nil { 27 return nil, false, fmt.Errorf("compute inputs: %w", err) 28 } 29 30 if hasNextInputs { 31 err = m.job.RequestSchedule() 32 if err != nil { 33 return nil, false, fmt.Errorf("request schedule: %w", err) 34 } 35 } 36 37 err = m.job.SaveNextInputMapping(inputMapping, resolved) 38 if err != nil { 39 return nil, false, fmt.Errorf("save next input mapping: %w", err) 40 } 41 42 buildInputs, satisfableInputs, err := m.AdoptInputsAndPipes() 43 if err != nil { 44 return nil, false, fmt.Errorf("adopt inputs and pipes: %w", err) 45 } 46 47 if !satisfableInputs { 48 return nil, false, nil 49 } 50 51 return buildInputs, true, nil 52 } 53 54 type schedulerBuild struct { 55 db.Build 56 } 57 58 func (s *schedulerBuild) IsReadyToDetermineInputs(logger lager.Logger) (bool, error) { 59 return true, nil 60 } 61 62 func (s *schedulerBuild) BuildInputs(ctx context.Context) ([]db.BuildInput, bool, error) { 63 buildInputs, satisfableInputs, err := s.AdoptInputsAndPipes() 64 if err != nil { 65 return nil, false, fmt.Errorf("adopt inputs and pipes: %w", err) 66 } 67 68 if !satisfableInputs { 69 return nil, false, nil 70 } 71 72 return buildInputs, true, nil 73 } 74 75 type rerunBuild struct { 76 db.Build 77 } 78 79 func (r *rerunBuild) IsReadyToDetermineInputs(logger lager.Logger) (bool, error) { 80 return true, nil 81 } 82 83 func (r *rerunBuild) BuildInputs(ctx context.Context) ([]db.BuildInput, bool, error) { 84 buildInputs, inputsReady, err := r.AdoptRerunInputsAndPipes() 85 if err != nil { 86 return nil, false, fmt.Errorf("adopt rerun inputs and pipes: %w", err) 87 } 88 89 if !inputsReady { 90 return nil, false, nil 91 } 92 93 return buildInputs, true, nil 94 }