github.com/filecoin-project/bacalhau@v0.3.23-0.20230228154132-45c989550ace/pkg/compute/bidstrategy/engines_installed_strategy.go (about) 1 package bidstrategy 2 3 import ( 4 "context" 5 "fmt" 6 7 "github.com/filecoin-project/bacalhau/pkg/executor" 8 "github.com/filecoin-project/bacalhau/pkg/model" 9 "github.com/filecoin-project/bacalhau/pkg/publisher" 10 "github.com/filecoin-project/bacalhau/pkg/storage" 11 "github.com/filecoin-project/bacalhau/pkg/verifier" 12 ) 13 14 type EnginesInstalledStrategyParams struct { 15 Storages storage.StorageProvider 16 Executors executor.ExecutorProvider 17 Verifiers verifier.VerifierProvider 18 Publishers publisher.PublisherProvider 19 } 20 21 type EnginesInstalledStrategy struct { 22 storages storage.StorageProvider 23 executors executor.ExecutorProvider 24 verifiers verifier.VerifierProvider 25 publishers publisher.PublisherProvider 26 } 27 28 func NewEnginesInstalledStrategy(params EnginesInstalledStrategyParams) *EnginesInstalledStrategy { 29 return &EnginesInstalledStrategy{ 30 storages: params.Storages, 31 executors: params.Executors, 32 verifiers: params.Verifiers, 33 publishers: params.Publishers, 34 } 35 } 36 37 func (s *EnginesInstalledStrategy) ShouldBid(ctx context.Context, request BidStrategyRequest) (BidStrategyResponse, error) { 38 // skip bidding if we don't have the executor and verifier for the job spec 39 for _, input := range request.Job.Spec.Inputs { 40 if !s.storages.Has(ctx, input.StorageSource) { 41 return BidStrategyResponse{ 42 ShouldBid: false, 43 Reason: fmt.Sprintf("storage %s not installed", input.StorageSource), 44 }, nil 45 } 46 } 47 48 if !s.executors.Has(ctx, request.Job.Spec.Engine) { 49 return BidStrategyResponse{ 50 ShouldBid: false, 51 Reason: fmt.Sprintf("executor %s not installed", request.Job.Spec.Engine), 52 }, nil 53 } 54 55 if !s.verifiers.Has(ctx, request.Job.Spec.Verifier) { 56 return BidStrategyResponse{ 57 ShouldBid: false, 58 Reason: fmt.Sprintf("verifier %s not installed", request.Job.Spec.Verifier), 59 }, nil 60 } 61 62 if !s.publishers.Has(ctx, request.Job.Spec.Publisher) { 63 return BidStrategyResponse{ 64 ShouldBid: false, 65 Reason: fmt.Sprintf("publisher %s not installed", request.Job.Spec.Publisher), 66 }, nil 67 } 68 69 return newShouldBidResponse(), nil 70 } 71 72 func (s *EnginesInstalledStrategy) ShouldBidBasedOnUsage( 73 _ context.Context, _ BidStrategyRequest, _ model.ResourceUsageData) (BidStrategyResponse, error) { 74 return newShouldBidResponse(), nil 75 } 76 77 // Compile-time check of interface implementation 78 var _ BidStrategy = (*EnginesInstalledStrategy)(nil)