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)