From 4c086810437295e5cf7d5cdbd307e094d78a1a7f Mon Sep 17 00:00:00 2001 From: Felipe Andrade Date: Wed, 17 May 2023 21:56:55 -0700 Subject: [PATCH 1/2] move consensus shutdown nested inside the backend group --- proxyd/proxyd/backend.go | 6 ++++++ proxyd/proxyd/server.go | 4 +--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/proxyd/proxyd/backend.go b/proxyd/proxyd/backend.go index 4e8fd70..fea2138 100644 --- a/proxyd/proxyd/backend.go +++ b/proxyd/proxyd/backend.go @@ -706,6 +706,12 @@ func (b *BackendGroup) loadBalancedConsensusGroup() []*Backend { return backendsHealthy } +func (bg *BackendGroup) Shutdown() { + if bg.Consensus != nil { + bg.Consensus.Shutdown() + } +} + func calcBackoff(i int) time.Duration { jitter := float64(rand.Int63n(250)) ms := math.Min(math.Pow(2, float64(i))*1000+jitter, 3000) diff --git a/proxyd/proxyd/server.go b/proxyd/proxyd/server.go index 794d4f8..d813bed 100644 --- a/proxyd/proxyd/server.go +++ b/proxyd/proxyd/server.go @@ -225,9 +225,7 @@ func (s *Server) Shutdown() { _ = s.wsServer.Shutdown(context.Background()) } for _, bg := range s.BackendGroups { - if bg.Consensus != nil { - bg.Consensus.Shutdown() - } + bg.Shutdown() } } From d4956ee655ec801fc7513b3d4018d9f64af13270 Mon Sep 17 00:00:00 2001 From: Felipe Andrade Date: Wed, 17 May 2023 21:57:42 -0700 Subject: [PATCH 2/2] rename backend group receivers to be bg instead of just b to avoid misreading as a backend --- proxyd/proxyd/backend.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/proxyd/proxyd/backend.go b/proxyd/proxyd/backend.go index fea2138..fdbea53 100644 --- a/proxyd/proxyd/backend.go +++ b/proxyd/proxyd/backend.go @@ -531,23 +531,23 @@ type BackendGroup struct { 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 { return nil, nil } - backends := b.Backends + backends := bg.Backends overriddenResponses := make([]*indexedReqRes, 0) 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 // 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 - rctx := RewriteContext{latest: b.Consensus.GetConsensusBlockNumber()} + rctx := RewriteContext{latest: bg.Consensus.GetConsensusBlockNumber()} for i, req := range rpcReqs { 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 } -func (b *BackendGroup) ProxyWS(ctx context.Context, clientConn *websocket.Conn, methodWhitelist *StringSet) (*WSProxier, error) { - for _, back := range b.Backends { +func (bg *BackendGroup) ProxyWS(ctx context.Context, clientConn *websocket.Conn, methodWhitelist *StringSet) (*WSProxier, error) { + for _, back := range bg.Backends { proxier, err := back.ProxyWS(clientConn, methodWhitelist) if errors.Is(err, ErrBackendOffline) { log.Warn( @@ -672,8 +672,8 @@ func (b *BackendGroup) ProxyWS(ctx context.Context, clientConn *websocket.Conn, return nil, ErrNoBackends } -func (b *BackendGroup) loadBalancedConsensusGroup() []*Backend { - cg := b.Consensus.GetConsensusGroup() +func (bg *BackendGroup) loadBalancedConsensusGroup() []*Backend { + cg := bg.Consensus.GetConsensusGroup() backendsHealthy := make([]*Backend, 0, len(cg)) backendsDegraded := make([]*Backend, 0, len(cg))