@@ -164,15 +164,8 @@ func setupFailoverState(
164164 }, nil
165165}
166166
167- func (f * failoverState ) Run (ctx context.Context ) (multiErr error ) {
168- var wg errgroup.Group
169- wg .Go (func () error {
170- f .logger .Info ().Str ("addr" , f .rpcServer .Addr ).Msg ("Started RPC server" )
171- if err := f .rpcServer .ListenAndServe (); err != nil && ! errors .Is (err , http .ErrServerClosed ) {
172- return err
173- }
174- return nil
175- })
167+ func (f * failoverState ) Run (pCtx context.Context ) (multiErr error ) {
168+ wg , ctx := errgroup .WithContext (pCtx )
176169
177170 if err := f .p2pClient .Start (ctx ); err != nil {
178171 return fmt .Errorf ("start p2p: %w" , err )
@@ -204,23 +197,31 @@ func (f *failoverState) Run(ctx context.Context) (multiErr error) {
204197 }
205198 }()
206199
200+ wg .Go (func () (rerr error ) {
201+ defer func () {
202+ if err := f .bc .Stop (); err != nil && ! errors .Is (err , context .Canceled ) {
203+ rerr = errors .Join (rerr , fmt .Errorf ("stopping block components: %w" , err ))
204+ }
205+ }()
206+
207+ f .logger .Info ().Str ("addr" , f .rpcServer .Addr ).Msg ("Started RPC server" )
208+ if err := f .rpcServer .ListenAndServe (); err != nil && ! errors .Is (err , http .ErrServerClosed ) {
209+ return err
210+ }
211+ return nil
212+ })
213+
207214 wg .Go (func () error {
215+ defer func () {
216+ shutdownCtx , done := context .WithTimeout (context .Background (), 3 * time .Second )
217+ defer done ()
218+ _ = f .rpcServer .Shutdown (shutdownCtx )
219+ }()
208220 if err := f .bc .Start (ctx ); err != nil && ! errors .Is (err , context .Canceled ) {
209221 return fmt .Errorf ("components started with error: %w" , err )
210222 }
211223 return nil
212224 })
213- defer func () {
214- if err := f .bc .Stop (); err != nil && ! errors .Is (err , context .Canceled ) {
215- multiErr = errors .Join (multiErr , fmt .Errorf ("stopping block components: %w" , err ))
216- }
217- }()
218-
219- defer func () { // shutdown first
220- shutdownCtx , done := context .WithTimeout (context .Background (), 3 * time .Second )
221- defer done ()
222- _ = f .rpcServer .Shutdown (shutdownCtx )
223- }()
224225
225226 return wg .Wait ()
226227}
0 commit comments