github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/scheduler/algorithm/pinned_resolver.go (about) 1 package algorithm 2 3 import ( 4 "context" 5 6 "github.com/pf-qiu/concourse/v6/atc/db" 7 "github.com/pf-qiu/concourse/v6/tracing" 8 "go.opentelemetry.io/otel/codes" 9 "go.opentelemetry.io/otel/label" 10 ) 11 12 type pinnedResolver struct { 13 vdb db.VersionsDB 14 inputConfig db.InputConfig 15 } 16 17 func NewPinnedResolver(vdb db.VersionsDB, inputConfig db.InputConfig) Resolver { 18 return &pinnedResolver{ 19 vdb: vdb, 20 inputConfig: inputConfig, 21 } 22 } 23 24 func (r *pinnedResolver) InputConfigs() db.InputConfigs { 25 return db.InputConfigs{r.inputConfig} 26 } 27 28 func (r *pinnedResolver) Resolve(ctx context.Context) (map[string]*versionCandidate, db.ResolutionFailure, error) { 29 ctx, span := tracing.StartSpan(ctx, "pinnedResolver.Resolve", tracing.Attrs{ 30 "input": r.inputConfig.Name, 31 }) 32 defer span.End() 33 34 version, found, err := r.vdb.FindVersionOfResource(ctx, r.inputConfig.ResourceID, r.inputConfig.PinnedVersion) 35 if err != nil { 36 tracing.End(span, err) 37 return nil, "", err 38 } 39 40 if !found { 41 span.AddEvent(ctx, "pinned version not found") 42 span.SetStatus(codes.NotFound, "pinned version not found") 43 return nil, db.PinnedVersionNotFound{PinnedVersion: r.inputConfig.PinnedVersion}.String(), nil 44 } 45 46 span.AddEvent(ctx, "found via pin", label.String("version", string(version))) 47 48 versionCandidate := map[string]*versionCandidate{ 49 r.inputConfig.Name: newCandidateVersion(version), 50 } 51 52 span.SetStatus(codes.OK, "found via pin") 53 return versionCandidate, "", nil 54 }