Skip to content

Commit a21eee5

Browse files
committed
Removed stateless rate limitter and turned it to a function. Updated usages. Renamed config structures
1 parent aa26b8c commit a21eee5

File tree

8 files changed

+51
-75
lines changed

8 files changed

+51
-75
lines changed

cmd/collection/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ func main() {
111111
txRatelimits float64
112112
txBurstlimits int
113113
txRatelimitPayers string
114-
bySealingLagRateLimiterConfigGetter module.BySealingLagRateLimiterConfigGetter
114+
bySealingLagRateLimiterConfigGetter module.ReadonlySealingLagRateLimiterConfig
115115
)
116116
var deprecatedFlagBlockRateDelay time.Duration
117117

engine/collection/epochmgr/factories/builder.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ type BuilderFactory struct {
2424
opts []builder.Opt
2525
metrics module.CollectionMetrics
2626
pusher collection.GuaranteedCollectionPublisher // engine for pushing finalized collection to consensus committee
27-
configGetter module.BySealingLagRateLimiterConfigGetter
27+
configGetter module.ReadonlySealingLagRateLimiterConfig
2828
log zerolog.Logger
2929
}
3030

@@ -36,7 +36,7 @@ func NewBuilderFactory(
3636
metrics module.CollectionMetrics,
3737
pusher collection.GuaranteedCollectionPublisher,
3838
log zerolog.Logger,
39-
configGetter module.BySealingLagRateLimiterConfigGetter,
39+
configGetter module.ReadonlySealingLagRateLimiterConfig,
4040
opts ...builder.Opt,
4141
) (*BuilderFactory, error) {
4242

module/builder/collection/builder.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ type Builder struct {
4141
transactions mempool.Transactions
4242
tracer module.Tracer
4343
config Config
44-
bySealingRateLimiterConfig module.BySealingLagRateLimiterConfigGetter
44+
bySealingRateLimiterConfig module.ReadonlySealingLagRateLimiterConfig
4545
log zerolog.Logger
4646
clusterEpoch uint64 // the operating epoch for this cluster
4747
// cache of values about the operating epoch which never change
@@ -61,7 +61,7 @@ func NewBuilder(
6161
transactions mempool.Transactions,
6262
log zerolog.Logger,
6363
epochCounter uint64,
64-
bySealingRateLimiterConfig module.BySealingLagRateLimiterConfigGetter,
64+
bySealingRateLimiterConfig module.ReadonlySealingLagRateLimiterConfig,
6565
opts ...Opt,
6666
) (*Builder, error) {
6767
b := Builder{
@@ -236,7 +236,8 @@ func (b *Builder) getBlockBuildContext(parentID flow.Identifier) (*blockBuildCon
236236
ctx.config = b.config
237237
ctx.parentID = parentID
238238
ctx.lookup = newTransactionLookup()
239-
bySealingLagRateLimiter, err := NewBySealingLagRateLimiter(
239+
var err error
240+
ctx.config.MaxCollectionSize, err = GetMaxCollectionSizeForSealingLag(
240241
b.protoState,
241242
b.bySealingRateLimiterConfig.MinSealingLag(),
242243
b.bySealingRateLimiterConfig.MaxSealingLag(),
@@ -247,7 +248,6 @@ func (b *Builder) getBlockBuildContext(parentID flow.Identifier) (*blockBuildCon
247248
if err != nil {
248249
return nil, fmt.Errorf("could not create by sealing lag rate limiter: %w", err)
249250
}
250-
ctx.config.MaxCollectionSize = bySealingLagRateLimiter.MaxCollectionSize()
251251
b.metrics.CollectionMaxSize(ctx.config.MaxCollectionSize)
252252

253253
ctx.parent, err = b.clusterHeaders.ByBlockID(parentID)

module/builder/collection/rate_limiter.go

Lines changed: 12 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -126,54 +126,30 @@ type BySealingLagRateLimiter struct {
126126
currentCollectionSize uint
127127
}
128128

129-
// NewBySealingLagRateLimiter creates a new BySealingLagRateLimiter instance.
130-
// No errors are expected during normal operations.
131-
func NewBySealingLagRateLimiter(
129+
func GetMaxCollectionSizeForSealingLag(
132130
state protocol.State,
133131
minSealingLag uint,
134132
maxSealingLag uint,
135133
halvingInterval uint,
136134
minCollectionSize uint,
137-
maxCollectionSize uint,
138-
) (*BySealingLagRateLimiter, error) {
139-
limiter := &BySealingLagRateLimiter{
140-
state: state,
141-
minSealingLag: minSealingLag,
142-
maxSealingLag: maxSealingLag,
143-
halvingInterval: halvingInterval,
144-
minCollectionSize: minCollectionSize,
145-
maxCollectionSize: maxCollectionSize,
146-
}
147-
err := limiter.update()
148-
if err != nil {
149-
return nil, err
150-
}
151-
return limiter, nil
152-
}
135+
maxCollectionSize uint) (uint, error) {
153136

154-
// update updates the current collection size based on the sealing lag.
155-
func (limiter *BySealingLagRateLimiter) update() error {
156-
lastFinalized, err := limiter.state.Final().Head()
137+
lastFinalized, err := state.Final().Head()
157138
if err != nil {
158-
return err
139+
return 0, err
159140
}
160-
lastSealed, err := limiter.state.Sealed().Head()
141+
lastSealed, err := state.Sealed().Head()
161142
if err != nil {
162-
return err
143+
return 0, err
163144
}
164145
sealingLag := uint(lastFinalized.Height - lastSealed.Height)
165-
limiter.currentCollectionSize = StepHalving(
166-
[2]uint{limiter.minSealingLag, limiter.maxSealingLag}, // [minSealingLag, maxSealingLag] is the range of input values where the halving is applied
167-
[2]uint{limiter.minCollectionSize, limiter.maxCollectionSize}, // [minCollectionSize, maxCollectionSize] is the range of collection sizes that halving function outputs
168-
sealingLag, // the current sealing lag
169-
limiter.halvingInterval, // interval in blocks in which the halving is applied
146+
collectionSize := StepHalving(
147+
[2]uint{minSealingLag, maxSealingLag}, // [minSealingLag, maxSealingLag] is the range of input values where the halving is applied
148+
[2]uint{minCollectionSize, maxCollectionSize}, // [minCollectionSize, maxCollectionSize] is the range of collection sizes that halving function outputs
149+
sealingLag, // the current sealing lag
150+
halvingInterval, // interval in blocks in which the halving is applied
170151
)
171-
return nil
172-
}
173-
174-
// MaxCollectionSize returns the maximum size of a collection that this rate limiter allows.
175-
func (limiter *BySealingLagRateLimiter) MaxCollectionSize() uint {
176-
return limiter.currentCollectionSize
152+
return collectionSize, nil
177153
}
178154

179155
// StepHalving applies a step halving algorithm to determine the maximum collection size based on the sealing lag.

module/mock/by_sealing_lag_rate_limiter_config_getter.go renamed to module/mock/readonly_sealing_lag_rate_limiter_config.go

Lines changed: 10 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

module/mock/by_sealing_lag_rate_limiter_config_setter.go renamed to module/mock/sealing_lag_rate_limiter_config.go

Lines changed: 14 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

module/updatable_configs.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@ type SealingConfigsSetter interface {
2929
SetRequiredApprovalsForSealingConstruction(newVal uint) error
3030
}
3131

32-
// BySealingLagRateLimiterConfigGetter is an interface for the actual updatable configs module.
32+
// ReadonlySealingLagRateLimiterConfig is an interface for the actual updatable configs module.
3333
// but only exposes its getter methods to return the config values without exposing
3434
// its setter methods.
35-
// BySealingLagRateLimiterConfigGetter contains several configs:
35+
// ReadonlySealingLagRateLimiterConfig contains several configs:
3636
// - MinSealingLag (updatable)
3737
// - MaxSealingLag (updatable)
3838
// - HalvingInterval (updatable)
3939
// - MinCollectionSize (updatable)
40-
type BySealingLagRateLimiterConfigGetter interface {
40+
type ReadonlySealingLagRateLimiterConfig interface {
4141
// MinSealingLag is the minimum sealing lag that the rate limiter will allow.
4242
MinSealingLag() uint
4343
// MaxSealingLag is the maximum sealing lag that the rate limiter will allow.
@@ -48,9 +48,9 @@ type BySealingLagRateLimiterConfigGetter interface {
4848
MinCollectionSize() uint
4949
}
5050

51-
// BySealingLagRateLimiterConfigSetter is an interface that allows the caller to update updatable configs
52-
type BySealingLagRateLimiterConfigSetter interface {
53-
BySealingLagRateLimiterConfigGetter
51+
// SealingLagRateLimiterConfig is an interface that allows the caller to update updatable configs
52+
type SealingLagRateLimiterConfig interface {
53+
ReadonlySealingLagRateLimiterConfig
5454
// SetMinSealingLag takes a new config value and updates the config
5555
// if the new value is valid.
5656
// Returns ValidationError if the new value results in an invalid config.

module/updatable_configs/collection_configs.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ type bySealingLagRateLimiterConfigs struct {
1414
minCollectionSize *atomic.Uint32
1515
}
1616

17-
var _ module.BySealingLagRateLimiterConfigSetter = (*bySealingLagRateLimiterConfigs)(nil)
17+
var _ module.SealingLagRateLimiterConfig = (*bySealingLagRateLimiterConfigs)(nil)
1818

1919
// DefaultBySealingLagRateLimiterConfigs returns a default config for collection throttling.
2020
// It performs binary throttling once the sealing lag reaches max sealing lag.
21-
func DefaultBySealingLagRateLimiterConfigs() module.BySealingLagRateLimiterConfigSetter {
21+
func DefaultBySealingLagRateLimiterConfigs() module.SealingLagRateLimiterConfig {
2222
// default config results in binary throttling once the sealing lag reaches max sealing lag, before that no throttling
2323
// is being applied. The 600 blocks is chosen as it is roughly 5 minutes.
2424
// 2 blocks / second * 60 seconds * 5 minutes = 600 blocks

0 commit comments

Comments
 (0)