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  }