Commit be730fd0 authored by Joshua Gutow's avatar Joshua Gutow Committed by GitHub

op-node: Fix panic when p2p server fails to start (#4493)

I only set `OpNode.server` to the created server if it starts up
successfully. This alleviates an error where if creation succeeds,
but startup does not, we attempt to stop the server which panics.

This also adds logging to indicate that initialization failed. This
logging primarily benefits users who call `node.New` directly rather
than end users because there is already logging in the main function.

I tested this manually with op-e2e & was able to reproduce the error &
confirm that it is fixed.
parent 1084fbec
...@@ -61,6 +61,7 @@ func New(ctx context.Context, cfg *Config, log log.Logger, snapshotLog log.Logge ...@@ -61,6 +61,7 @@ func New(ctx context.Context, cfg *Config, log log.Logger, snapshotLog log.Logge
err := n.init(ctx, cfg, snapshotLog) err := n.init(ctx, cfg, snapshotLog)
if err != nil { if err != nil {
log.Error("Error intializing the rollup node", "err", err)
// ensure we always close the node resources if we fail to initialize the node. // ensure we always close the node resources if we fail to initialize the node.
if closeErr := n.Close(); closeErr != nil { if closeErr := n.Close(); closeErr != nil {
return nil, multierror.Append(err, closeErr) return nil, multierror.Append(err, closeErr)
...@@ -162,21 +163,21 @@ func (n *OpNode) initL2(ctx context.Context, cfg *Config, snapshotLog log.Logger ...@@ -162,21 +163,21 @@ func (n *OpNode) initL2(ctx context.Context, cfg *Config, snapshotLog log.Logger
} }
func (n *OpNode) initRPCServer(ctx context.Context, cfg *Config) error { func (n *OpNode) initRPCServer(ctx context.Context, cfg *Config) error {
var err error server, err := newRPCServer(ctx, &cfg.RPC, &cfg.Rollup, n.l2Source.L2Client, n.l2Driver, n.log, n.appVersion, n.metrics)
n.server, err = newRPCServer(ctx, &cfg.RPC, &cfg.Rollup, n.l2Source.L2Client, n.l2Driver, n.log, n.appVersion, n.metrics)
if err != nil { if err != nil {
return err return err
} }
if n.p2pNode != nil { if n.p2pNode != nil {
n.server.EnableP2P(p2p.NewP2PAPIBackend(n.p2pNode, n.log, n.metrics)) server.EnableP2P(p2p.NewP2PAPIBackend(n.p2pNode, n.log, n.metrics))
} }
if cfg.RPC.EnableAdmin { if cfg.RPC.EnableAdmin {
n.server.EnableAdminAPI(NewAdminAPI(n.l2Driver, n.metrics)) server.EnableAdminAPI(NewAdminAPI(n.l2Driver, n.metrics))
} }
n.log.Info("Starting JSON-RPC server") n.log.Info("Starting JSON-RPC server")
if err := n.server.Start(); err != nil { if err := server.Start(); err != nil {
return fmt.Errorf("unable to start RPC server: %w", err) return fmt.Errorf("unable to start RPC server: %w", err)
} }
n.server = server
return nil return nil
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment