Skip to content

Commit 5f368fd

Browse files
fix: make bids receiver buffer size configurable (#4117)
* Update auctioneer.go * Update auctioneer.go * Update auctioneer.go * Update auctioneer.go * Update auctioneer.go * Update auctioneer.go --------- Co-authored-by: Raul Jordan <raul@prysmaticlabs.com>
1 parent 01b370c commit 5f368fd

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

timeboost/auctioneer.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package timeboost
66
import (
77
"context"
88
"fmt"
9+
"math"
910
"math/big"
1011
"strconv"
1112
"strings"
@@ -44,6 +45,9 @@ const (
4445

4546
// Auctioneer coordination key for failover
4647
AUCTIONEER_CHOSEN_KEY = "auctioneer.chosen"
48+
49+
// Default buffer size for bids receiver channel
50+
DefaultBidsReceiverBufferSize = 100_000
4751
)
4852

4953
var (
@@ -75,6 +79,7 @@ type AuctioneerServerConfig struct {
7579
AuctionContractAddress string `koanf:"auction-contract-address"`
7680
DbDirectory string `koanf:"db-directory"`
7781
AuctionResolutionWaitTime time.Duration `koanf:"auction-resolution-wait-time"`
82+
BidsReceiverBufferSize uint64 `koanf:"bids-receiver-buffer-size"`
7883
S3Storage S3StorageServiceConfig `koanf:"s3-storage"`
7984
}
8085

@@ -92,6 +97,7 @@ var DefaultAuctioneerServerConfig = AuctioneerServerConfig{
9297
ConsumerConfig: DefaultAuctioneerConsumerConfig,
9398
StreamTimeout: 10 * time.Minute,
9499
AuctionResolutionWaitTime: 2 * time.Second,
100+
BidsReceiverBufferSize: DefaultBidsReceiverBufferSize,
95101
S3Storage: DefaultS3StorageServiceConfig,
96102
}
97103

@@ -101,6 +107,7 @@ var TestAuctioneerServerConfig = AuctioneerServerConfig{
101107
ConsumerConfig: DefaultAuctioneerConsumerConfig,
102108
StreamTimeout: time.Minute,
103109
AuctionResolutionWaitTime: 2 * time.Second,
110+
BidsReceiverBufferSize: 1_000,
104111
}
105112

106113
func AuctioneerServerConfigAddOptions(prefix string, f *pflag.FlagSet) {
@@ -116,6 +123,7 @@ func AuctioneerServerConfigAddOptions(prefix string, f *pflag.FlagSet) {
116123
f.String(prefix+".auction-contract-address", DefaultAuctioneerServerConfig.AuctionContractAddress, "express lane auction contract address")
117124
f.String(prefix+".db-directory", DefaultAuctioneerServerConfig.DbDirectory, "path to database directory for persisting validated bids in a sqlite file")
118125
f.Duration(prefix+".auction-resolution-wait-time", DefaultAuctioneerServerConfig.AuctionResolutionWaitTime, "wait time after auction closing before resolving the auction")
126+
f.Uint64(prefix+".bids-receiver-buffer-size", DefaultAuctioneerServerConfig.BidsReceiverBufferSize, fmt.Sprintf("buffer size for the bids receiver channel (0 = use default of %d)", DefaultBidsReceiverBufferSize))
119127
S3StorageServiceConfigAddOptions(prefix+".s3-storage", f)
120128
}
121129

@@ -229,6 +237,14 @@ func NewAuctioneerServer(ctx context.Context, configFetcher AuctioneerServerConf
229237
return nil, err
230238
}
231239

240+
bufferSize := cfg.BidsReceiverBufferSize
241+
if bufferSize == 0 {
242+
bufferSize = DefaultBidsReceiverBufferSize
243+
}
244+
if bufferSize > uint64(math.MaxInt) {
245+
return nil, fmt.Errorf("bids receiver buffer size %d exceeds maximum int value", bufferSize)
246+
}
247+
232248
// Generate unique ID for this auctioneer instance
233249
myId := fmt.Sprintf("auctioneer-%s-%d",
234250
uuid.New().String()[:8], // Short UUID
@@ -246,7 +262,7 @@ func NewAuctioneerServer(ctx context.Context, configFetcher AuctioneerServerConf
246262
auctionContract: auctionContract,
247263
auctionContractAddr: auctionContractAddr,
248264
auctionContractDomainSeparator: domainSeparator,
249-
bidsReceiver: make(chan *JsonValidatedBid, 100_000), // TODO(Terence): Is 100k enough? Make this configurable?
265+
bidsReceiver: make(chan *JsonValidatedBid, int(bufferSize)),
250266
bidCache: newBidCache(domainSeparator),
251267
roundTimingInfo: *roundTimingInfo,
252268
auctionResolutionWaitTime: cfg.AuctionResolutionWaitTime,

0 commit comments

Comments
 (0)