github.com/filecoin-project/bacalhau@v0.3.23-0.20230228154132-45c989550ace/pkg/compute/bidstrategy/capacity_available_strategy.go (about)

     1  package bidstrategy
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/filecoin-project/bacalhau/pkg/compute/capacity"
     7  	"github.com/filecoin-project/bacalhau/pkg/model"
     8  )
     9  
    10  type AvailableCapacityStrategyParams struct {
    11  	RunningCapacityTracker  capacity.Tracker
    12  	EnqueuedCapacityTracker capacity.Tracker
    13  }
    14  
    15  type AvailableCapacityStrategy struct {
    16  	runningCapacityTracker  capacity.Tracker
    17  	enqueuedCapacityTracker capacity.Tracker
    18  }
    19  
    20  func NewAvailableCapacityStrategy(ctx context.Context, params AvailableCapacityStrategyParams) *AvailableCapacityStrategy {
    21  	s := &AvailableCapacityStrategy{
    22  		runningCapacityTracker:  params.RunningCapacityTracker,
    23  		enqueuedCapacityTracker: params.EnqueuedCapacityTracker,
    24  	}
    25  	return s
    26  }
    27  
    28  func (s *AvailableCapacityStrategy) ShouldBid(
    29  	ctx context.Context, request BidStrategyRequest) (BidStrategyResponse, error) {
    30  	return newShouldBidResponse(), nil
    31  }
    32  
    33  func (s *AvailableCapacityStrategy) ShouldBidBasedOnUsage(
    34  	ctx context.Context, request BidStrategyRequest, usage model.ResourceUsageData) (BidStrategyResponse, error) {
    35  	// skip bidding if we don't have enough capacity available
    36  	availableCapacity := s.runningCapacityTracker.GetAvailableCapacity(ctx).Add(s.enqueuedCapacityTracker.GetAvailableCapacity(ctx))
    37  	if !usage.LessThanEq(availableCapacity) {
    38  		return BidStrategyResponse{
    39  			ShouldBid: false,
    40  			Reason:    "not enough capacity available",
    41  		}, nil
    42  	}
    43  
    44  	return newShouldBidResponse(), nil
    45  }
    46  
    47  // compile-time interface check
    48  var _ BidStrategy = (*AvailableCapacityStrategy)(nil)