Merge pull request #5734 from ethereum-optimism/felipe/bg-shutdown
refactor(proxyd): move consensus shutdown nested inside the backend group
This commit is contained in:
commit
3ab4152802
@ -531,23 +531,23 @@ type BackendGroup struct {
|
|||||||
Consensus *ConsensusPoller
|
Consensus *ConsensusPoller
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *BackendGroup) Forward(ctx context.Context, rpcReqs []*RPCReq, isBatch bool) ([]*RPCRes, error) {
|
func (bg *BackendGroup) Forward(ctx context.Context, rpcReqs []*RPCReq, isBatch bool) ([]*RPCRes, error) {
|
||||||
if len(rpcReqs) == 0 {
|
if len(rpcReqs) == 0 {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
backends := b.Backends
|
backends := bg.Backends
|
||||||
|
|
||||||
overriddenResponses := make([]*indexedReqRes, 0)
|
overriddenResponses := make([]*indexedReqRes, 0)
|
||||||
rewrittenReqs := make([]*RPCReq, 0, len(rpcReqs))
|
rewrittenReqs := make([]*RPCReq, 0, len(rpcReqs))
|
||||||
|
|
||||||
if b.Consensus != nil {
|
if bg.Consensus != nil {
|
||||||
// When `consensus_aware` is set to `true`, the backend group acts as a load balancer
|
// When `consensus_aware` is set to `true`, the backend group acts as a load balancer
|
||||||
// serving traffic from any backend that agrees in the consensus group
|
// serving traffic from any backend that agrees in the consensus group
|
||||||
backends = b.loadBalancedConsensusGroup()
|
backends = bg.loadBalancedConsensusGroup()
|
||||||
|
|
||||||
// We also rewrite block tags to enforce compliance with consensus
|
// We also rewrite block tags to enforce compliance with consensus
|
||||||
rctx := RewriteContext{latest: b.Consensus.GetConsensusBlockNumber()}
|
rctx := RewriteContext{latest: bg.Consensus.GetConsensusBlockNumber()}
|
||||||
|
|
||||||
for i, req := range rpcReqs {
|
for i, req := range rpcReqs {
|
||||||
res := RPCRes{JSONRPC: JSONRPCVersion, ID: req.ID}
|
res := RPCRes{JSONRPC: JSONRPCVersion, ID: req.ID}
|
||||||
@ -635,8 +635,8 @@ func (b *BackendGroup) Forward(ctx context.Context, rpcReqs []*RPCReq, isBatch b
|
|||||||
return nil, ErrNoBackends
|
return nil, ErrNoBackends
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *BackendGroup) ProxyWS(ctx context.Context, clientConn *websocket.Conn, methodWhitelist *StringSet) (*WSProxier, error) {
|
func (bg *BackendGroup) ProxyWS(ctx context.Context, clientConn *websocket.Conn, methodWhitelist *StringSet) (*WSProxier, error) {
|
||||||
for _, back := range b.Backends {
|
for _, back := range bg.Backends {
|
||||||
proxier, err := back.ProxyWS(clientConn, methodWhitelist)
|
proxier, err := back.ProxyWS(clientConn, methodWhitelist)
|
||||||
if errors.Is(err, ErrBackendOffline) {
|
if errors.Is(err, ErrBackendOffline) {
|
||||||
log.Warn(
|
log.Warn(
|
||||||
@ -672,8 +672,8 @@ func (b *BackendGroup) ProxyWS(ctx context.Context, clientConn *websocket.Conn,
|
|||||||
return nil, ErrNoBackends
|
return nil, ErrNoBackends
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *BackendGroup) loadBalancedConsensusGroup() []*Backend {
|
func (bg *BackendGroup) loadBalancedConsensusGroup() []*Backend {
|
||||||
cg := b.Consensus.GetConsensusGroup()
|
cg := bg.Consensus.GetConsensusGroup()
|
||||||
|
|
||||||
backendsHealthy := make([]*Backend, 0, len(cg))
|
backendsHealthy := make([]*Backend, 0, len(cg))
|
||||||
backendsDegraded := make([]*Backend, 0, len(cg))
|
backendsDegraded := make([]*Backend, 0, len(cg))
|
||||||
@ -706,6 +706,12 @@ func (b *BackendGroup) loadBalancedConsensusGroup() []*Backend {
|
|||||||
return backendsHealthy
|
return backendsHealthy
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (bg *BackendGroup) Shutdown() {
|
||||||
|
if bg.Consensus != nil {
|
||||||
|
bg.Consensus.Shutdown()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func calcBackoff(i int) time.Duration {
|
func calcBackoff(i int) time.Duration {
|
||||||
jitter := float64(rand.Int63n(250))
|
jitter := float64(rand.Int63n(250))
|
||||||
ms := math.Min(math.Pow(2, float64(i))*1000+jitter, 3000)
|
ms := math.Min(math.Pow(2, float64(i))*1000+jitter, 3000)
|
||||||
|
@ -225,9 +225,7 @@ func (s *Server) Shutdown() {
|
|||||||
_ = s.wsServer.Shutdown(context.Background())
|
_ = s.wsServer.Shutdown(context.Background())
|
||||||
}
|
}
|
||||||
for _, bg := range s.BackendGroups {
|
for _, bg := range s.BackendGroups {
|
||||||
if bg.Consensus != nil {
|
bg.Shutdown()
|
||||||
bg.Consensus.Shutdown()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user