mirror of
https://github.com/luxfi/node.git
synced 2026-10-30 15:24:05 +00:00
Two packages were named for the same word and meant different things. network/ dialed peers, exchanged keys, throttled and tracked them; nets/ tracked which chains share a validator set and when they have all bootstrapped. One letter apart, and neither name said which was which. The peer layer is mesh — the word this estate already uses for it, in lux-rs/node's own mesh.rs. That frees network for the thing that is actually a network: a set of chains sharing a validator set. A network holds chains; a chain belongs to one network. github.com/luxfi/p2p stays what it is, the gossip library the VMs use. Three concerns, three names, none of them borrowed from another. Co-authored-by: Hanzo Dev <[email protected]>
46 lines
945 B
Go
46 lines
945 B
Go
// Copyright (C) 2019-2025, Lux Industries Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
package throttling
|
|
|
|
import (
|
|
"context"
|
|
|
|
"golang.org/x/time/rate"
|
|
)
|
|
|
|
var (
|
|
_ DialThrottler = (*dialThrottler)(nil)
|
|
_ DialThrottler = (*noDialThrottler)(nil)
|
|
)
|
|
|
|
type DialThrottler interface {
|
|
// Block until the event associated with this Acquire can happen.
|
|
// If [ctx] is canceled, gives up and returns an error.
|
|
Acquire(ctx context.Context) error
|
|
}
|
|
|
|
type dialThrottler struct {
|
|
limiter *rate.Limiter
|
|
}
|
|
|
|
type noDialThrottler struct{}
|
|
|
|
func (t dialThrottler) Acquire(ctx context.Context) error {
|
|
return t.limiter.Wait(ctx)
|
|
}
|
|
|
|
func NewDialThrottler(throttleLimit int) DialThrottler {
|
|
return dialThrottler{
|
|
limiter: rate.NewLimiter(rate.Limit(throttleLimit), throttleLimit),
|
|
}
|
|
}
|
|
|
|
func NewNoDialThrottler() DialThrottler {
|
|
return noDialThrottler{}
|
|
}
|
|
|
|
func (noDialThrottler) Acquire(context.Context) error {
|
|
return nil
|
|
}
|