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)