From 3eb03409fde8da61b14b287dcebdef8f4fae21f4 Mon Sep 17 00:00:00 2001 From: Nodar Date: Thu, 13 Jul 2023 14:39:31 +0200 Subject: [PATCH 1/4] Run pprof on a separate port than metrics --- cmd/genericconf/server.go | 5 ++++- cmd/nitro/nitro.go | 41 ++++++++++++++++++++++++--------------- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/cmd/genericconf/server.go b/cmd/genericconf/server.go index 17c4a7a872..88d0750e1c 100644 --- a/cmd/genericconf/server.go +++ b/cmd/genericconf/server.go @@ -190,13 +190,15 @@ type MetricsServerConfig struct { Addr string `koanf:"addr"` Port int `koanf:"port"` Pprof bool `koanf:"pprof"` + PprofPort int `koanf:"pprof-port"` UpdateInterval time.Duration `koanf:"update-interval"` } var MetricsServerConfigDefault = MetricsServerConfig{ Addr: "127.0.0.1", Port: 6070, - Pprof: false, + Pprof: true, + PprofPort: 6071, UpdateInterval: 3 * time.Second, } @@ -204,5 +206,6 @@ func MetricsServerAddOptions(prefix string, f *flag.FlagSet) { f.String(prefix+".addr", MetricsServerConfigDefault.Addr, "metrics server address") f.Int(prefix+".port", MetricsServerConfigDefault.Port, "metrics server port") f.Bool(prefix+".pprof", MetricsServerConfigDefault.Pprof, "enable profiling for Go") + f.Int(prefix+".pprof-port", MetricsServerConfigDefault.PprofPort, "pprof server port") f.Duration(prefix+".update-interval", MetricsServerConfigDefault.UpdateInterval, "metrics server update interval") } diff --git a/cmd/nitro/nitro.go b/cmd/nitro/nitro.go index 97fa67512e..863c563a06 100644 --- a/cmd/nitro/nitro.go +++ b/cmd/nitro/nitro.go @@ -122,6 +122,30 @@ func main() { os.Exit(mainImpl()) } +// Runs metrics server at address:port specified by config if metrics flag is +// enabled. Additionally if pprof at specified pprof port when it's enabled. +func mustRunMetrics(cfg *NodeConfig) { + if !cfg.Metrics { + if cfg.MetricsServer.Pprof { + log.Warn("Metrics must be enabled in order to use pprof with the metrics server") + } + log.Debug("Metrics are disabled") + return + } + if cfg.MetricsServer.Addr == "" { + log.Crit("Metrics are enabled but server address is not specified") + } + go metrics.CollectProcessMetrics(cfg.MetricsServer.UpdateInterval) + + if cfg.MetricsServer.Pprof { + if cfg.MetricsServer.Port == cfg.MetricsServer.PprofPort { + log.Crit("Cannot use same port for metrics and pprof servers", "port", cfg.MetricsServer.Port) + } + genericconf.StartPprof(fmt.Sprintf("%v:%v", cfg.MetricsServer.Addr, cfg.MetricsServer.PprofPort)) + } + exp.Setup(fmt.Sprintf("%v:%v", cfg.MetricsServer.Addr, cfg.MetricsServer.Port)) +} + // Returns the exit code func mainImpl() int { ctx, cancelFunc := context.WithCancel(context.Background()) @@ -379,22 +403,7 @@ func mainImpl() int { return 1 } - if nodeConfig.Metrics { - go metrics.CollectProcessMetrics(nodeConfig.MetricsServer.UpdateInterval) - - if nodeConfig.MetricsServer.Addr != "" { - address := fmt.Sprintf("%v:%v", nodeConfig.MetricsServer.Addr, nodeConfig.MetricsServer.Port) - if nodeConfig.MetricsServer.Pprof { - genericconf.StartPprof(address) - } else { - exp.Setup(address) - } - } - } else if nodeConfig.MetricsServer.Pprof { - flag.Usage() - log.Error("--metrics must be enabled in order to use pprof with the metrics server") - return 1 - } + mustRunMetrics(nodeConfig) fatalErrChan := make(chan error, 10) From c0019495c74b33d2c2610673b07850d9a312a049 Mon Sep 17 00:00:00 2001 From: Nodar Date: Thu, 13 Jul 2023 20:11:35 +0200 Subject: [PATCH 2/4] Separate PProf flag from metrics flag, disable by default --- cmd/daserver/daserver.go | 25 ++++++++++++++++++++++++ cmd/genericconf/server.go | 21 ++++++++++++++------ cmd/nitro/nitro.go | 41 ++++++++++++++++++++------------------- cmd/relay/relay.go | 28 +++++++++++++++++++------- relay/relay.go | 6 ++++++ 5 files changed, 88 insertions(+), 33 deletions(-) diff --git a/cmd/daserver/daserver.go b/cmd/daserver/daserver.go index 7b6b504e40..059c19d7ca 100644 --- a/cmd/daserver/daserver.go +++ b/cmd/daserver/daserver.go @@ -45,6 +45,8 @@ type DAServerConfig struct { Metrics bool `koanf:"metrics"` MetricsServer genericconf.MetricsServerConfig `koanf:"metrics-server"` + PProf bool `koanf:"pprof"` + PprofCfg genericconf.PProf `koanf:"pprof-cfg"` } var DefaultDAServerConfig = DAServerConfig{ @@ -60,6 +62,8 @@ var DefaultDAServerConfig = DAServerConfig{ ConfConfig: genericconf.ConfConfigDefault, Metrics: false, MetricsServer: genericconf.MetricsServerConfigDefault, + PProf: false, + PprofCfg: genericconf.PProfDefault, LogLevel: 3, } @@ -89,6 +93,9 @@ func parseDAServer(args []string) (*DAServerConfig, error) { f.Bool("metrics", DefaultDAServerConfig.Metrics, "enable metrics") genericconf.MetricsServerAddOptions("metrics-server", f) + f.Bool("pprof", DefaultDAServerConfig.PProf, "enable pprof") + genericconf.PProfAddOptions("pprof-cfg", f) + f.Int("log-level", int(log.LvlInfo), "log level; 1: ERROR, 2: WARN, 3: INFO, 4: DEBUG, 5: TRACE") das.DataAvailabilityConfigAddDaserverOptions("data-availability", f) genericconf.ConfConfigAddOptions("conf", f) @@ -135,6 +142,24 @@ func (c *L1ReaderCloser) String() string { return "l1 reader closer" } +// Checks metrics and PProf flag, runs them if enabled. +// Note: they are separate so one can enable/disable them as they wish, the only +// requirement is that they can't run on the same address and port. +func mustRunMetrics(cfg *DAServerConfig) { + mAddr := fmt.Sprintf("%v:%v", cfg.MetricsServer.Addr, cfg.MetricsServer.Port) + pAddr := fmt.Sprintf("%v:%v", cfg.PprofCfg.Addr, cfg.PprofCfg.Port) + if cfg.Metrics && cfg.PProf && mAddr == pAddr { + log.Crit("Metrics and pprof cannot be enabled on the same address:port", "addr", mAddr) + } + if cfg.Metrics { + go metrics.CollectProcessMetrics(cfg.MetricsServer.UpdateInterval) + exp.Setup(fmt.Sprintf("%v:%v", cfg.MetricsServer.Addr, cfg.MetricsServer.Port)) + } + if cfg.PProf { + genericconf.StartPprof(pAddr) + } +} + func startup() error { // Some different defaults to DAS config in a node. das.DefaultDataAvailabilityConfig.Enable = true diff --git a/cmd/genericconf/server.go b/cmd/genericconf/server.go index 88d0750e1c..b99429191e 100644 --- a/cmd/genericconf/server.go +++ b/cmd/genericconf/server.go @@ -189,23 +189,32 @@ func AuthRPCConfigAddOptions(prefix string, f *flag.FlagSet) { type MetricsServerConfig struct { Addr string `koanf:"addr"` Port int `koanf:"port"` - Pprof bool `koanf:"pprof"` - PprofPort int `koanf:"pprof-port"` UpdateInterval time.Duration `koanf:"update-interval"` } var MetricsServerConfigDefault = MetricsServerConfig{ Addr: "127.0.0.1", Port: 6070, - Pprof: true, - PprofPort: 6071, UpdateInterval: 3 * time.Second, } +type PProf struct { + Addr string `koanf:"addr"` + Port int `koanf:"port"` +} + +var PProfDefault = PProf{ + Addr: "127.0.0.1", + Port: 6071, +} + func MetricsServerAddOptions(prefix string, f *flag.FlagSet) { f.String(prefix+".addr", MetricsServerConfigDefault.Addr, "metrics server address") f.Int(prefix+".port", MetricsServerConfigDefault.Port, "metrics server port") - f.Bool(prefix+".pprof", MetricsServerConfigDefault.Pprof, "enable profiling for Go") - f.Int(prefix+".pprof-port", MetricsServerConfigDefault.PprofPort, "pprof server port") f.Duration(prefix+".update-interval", MetricsServerConfigDefault.UpdateInterval, "metrics server update interval") } + +func PProfAddOptions(prefix string, f *flag.FlagSet) { + f.String(prefix+".addr", PProfDefault.Addr, "pprof server address") + f.Int(prefix+".port", PProfDefault.Port, "pprof server port") +} diff --git a/cmd/nitro/nitro.go b/cmd/nitro/nitro.go index 863c563a06..0f3a65db44 100644 --- a/cmd/nitro/nitro.go +++ b/cmd/nitro/nitro.go @@ -122,28 +122,22 @@ func main() { os.Exit(mainImpl()) } -// Runs metrics server at address:port specified by config if metrics flag is -// enabled. Additionally if pprof at specified pprof port when it's enabled. +// Checks metrics and PProf flag, runs them if enabled. +// Note: they are separate so one can enable/disable them as they wish, the only +// requirement is that they can't run on the same address and port. func mustRunMetrics(cfg *NodeConfig) { - if !cfg.Metrics { - if cfg.MetricsServer.Pprof { - log.Warn("Metrics must be enabled in order to use pprof with the metrics server") - } - log.Debug("Metrics are disabled") - return + mAddr := fmt.Sprintf("%v:%v", cfg.MetricsServer.Addr, cfg.MetricsServer.Port) + pAddr := fmt.Sprintf("%v:%v", cfg.PprofCfg.Addr, cfg.PprofCfg.Port) + if cfg.Metrics && cfg.PProf && mAddr == pAddr { + log.Crit("Metrics and pprof cannot be enabled on the same address:port", "addr", mAddr) } - if cfg.MetricsServer.Addr == "" { - log.Crit("Metrics are enabled but server address is not specified") + if cfg.Metrics { + go metrics.CollectProcessMetrics(cfg.MetricsServer.UpdateInterval) + exp.Setup(fmt.Sprintf("%v:%v", cfg.MetricsServer.Addr, cfg.MetricsServer.Port)) } - go metrics.CollectProcessMetrics(cfg.MetricsServer.UpdateInterval) - - if cfg.MetricsServer.Pprof { - if cfg.MetricsServer.Port == cfg.MetricsServer.PprofPort { - log.Crit("Cannot use same port for metrics and pprof servers", "port", cfg.MetricsServer.Port) - } - genericconf.StartPprof(fmt.Sprintf("%v:%v", cfg.MetricsServer.Addr, cfg.MetricsServer.PprofPort)) + if cfg.PProf { + genericconf.StartPprof(pAddr) } - exp.Setup(fmt.Sprintf("%v:%v", cfg.MetricsServer.Addr, cfg.MetricsServer.Port)) } // Returns the exit code @@ -374,6 +368,8 @@ func mainImpl() int { } } + mustRunMetrics(nodeConfig) + chainDb, l2BlockChain, err := openInitializeChainDb(ctx, stack, nodeConfig, new(big.Int).SetUint64(nodeConfig.L2.ChainID), execution.DefaultCacheConfigFor(stack, &nodeConfig.Node.Caching), l1Client, rollupAddrs) defer closeDb(chainDb, "chainDb") if l2BlockChain != nil { @@ -403,8 +399,6 @@ func mainImpl() int { return 1 } - mustRunMetrics(nodeConfig) - fatalErrChan := make(chan error, 10) var valNode *valnode.ValidationNode @@ -534,6 +528,8 @@ type NodeConfig struct { GraphQL genericconf.GraphQLConfig `koanf:"graphql"` Metrics bool `koanf:"metrics"` MetricsServer genericconf.MetricsServerConfig `koanf:"metrics-server"` + PProf bool `koanf:"pprof"` + PprofCfg genericconf.PProf `koanf:"pprof-cfg"` Init InitConfig `koanf:"init"` Rpc genericconf.RpcConfig `koanf:"rpc"` } @@ -551,6 +547,8 @@ var NodeConfigDefault = NodeConfig{ IPC: genericconf.IPCConfigDefault, Metrics: false, MetricsServer: genericconf.MetricsServerConfigDefault, + PProf: false, + PprofCfg: genericconf.PProfDefault, } func NodeConfigAddOptions(f *flag.FlagSet) { @@ -570,6 +568,9 @@ func NodeConfigAddOptions(f *flag.FlagSet) { genericconf.GraphQLConfigAddOptions("graphql", f) f.Bool("metrics", NodeConfigDefault.Metrics, "enable metrics") genericconf.MetricsServerAddOptions("metrics-server", f) + f.Bool("pprof", NodeConfigDefault.PProf, "enable pprof") + genericconf.PProfAddOptions("pprof-cfg", f) + InitConfigAddOptions("init", f) genericconf.RpcConfigAddOptions("rpc", f) } diff --git a/cmd/relay/relay.go b/cmd/relay/relay.go index 9f5669454f..2d466d835a 100644 --- a/cmd/relay/relay.go +++ b/cmd/relay/relay.go @@ -37,6 +37,24 @@ func printSampleUsage(progname string) { fmt.Printf("Sample usage: %s --node.feed.input.url= --chain.id= \n", progname) } +// Checks metrics and PProf flag, runs them if enabled. +// Note: they are separate so one can enable/disable them as they wish, the only +// requirement is that they can't run on the same address and port. +func mustRunMetrics(cfg *relay.Config) { + mAddr := fmt.Sprintf("%v:%v", cfg.MetricsServer.Addr, cfg.MetricsServer.Port) + pAddr := fmt.Sprintf("%v:%v", cfg.PprofCfg.Addr, cfg.PprofCfg.Port) + if cfg.Metrics && cfg.PProf && mAddr == pAddr { + log.Crit("Metrics and pprof cannot be enabled on the same address:port", "addr", mAddr) + } + if cfg.Metrics { + go metrics.CollectProcessMetrics(cfg.MetricsServer.UpdateInterval) + exp.Setup(fmt.Sprintf("%v:%v", cfg.MetricsServer.Addr, cfg.MetricsServer.Port)) + } + if cfg.PProf { + genericconf.StartPprof(pAddr) + } +} + func startup() error { ctx := context.Background() @@ -68,18 +86,14 @@ func startup() error { if err != nil { return err } + + mustRunMetrics(relayConfig) + err = newRelay.Start(ctx) if err != nil { return err } - if relayConfig.Metrics && relayConfig.MetricsServer.Addr != "" { - go metrics.CollectProcessMetrics(relayConfig.MetricsServer.UpdateInterval) - - address := fmt.Sprintf("%v:%v", relayConfig.MetricsServer.Addr, relayConfig.MetricsServer.Port) - exp.Setup(address) - } - select { case <-sigint: log.Info("shutting down because of sigint") diff --git a/relay/relay.go b/relay/relay.go index b9d70c513b..f4fc33d9e3 100644 --- a/relay/relay.go +++ b/relay/relay.go @@ -146,6 +146,8 @@ type Config struct { LogType string `koanf:"log-type"` Metrics bool `koanf:"metrics"` MetricsServer genericconf.MetricsServerConfig `koanf:"metrics-server"` + PProf bool `koanf:"pprof"` + PprofCfg genericconf.PProf `koanf:"pprof-cfg"` Node NodeConfig `koanf:"node"` Queue int `koanf:"queue"` } @@ -157,6 +159,8 @@ var ConfigDefault = Config{ LogType: "plaintext", Metrics: false, MetricsServer: genericconf.MetricsServerConfigDefault, + PProf: false, + PprofCfg: genericconf.PProfDefault, Node: NodeConfigDefault, Queue: 1024, } @@ -168,6 +172,8 @@ func ConfigAddOptions(f *flag.FlagSet) { f.String("log-type", ConfigDefault.LogType, "log type") f.Bool("metrics", ConfigDefault.Metrics, "enable metrics") genericconf.MetricsServerAddOptions("metrics-server", f) + f.Bool("pprof", ConfigDefault.PProf, "enable pprof") + genericconf.PProfAddOptions("pprof-cfg", f) NodeConfigAddOptions("node", f) f.Int("queue", ConfigDefault.Queue, "size of relay queue") } From 741a9c843a7aed0c131eecea1a9ae06c9bff64e3 Mon Sep 17 00:00:00 2001 From: Nodar Date: Fri, 14 Jul 2023 12:30:53 +0200 Subject: [PATCH 3/4] Rename mustRunMetrics to startMetrics and return error instead --- cmd/daserver/daserver.go | 17 +++++------------ cmd/nitro-val/config.go | 6 ++++++ cmd/nitro-val/nitro_val.go | 35 +++++++++++++++++++++-------------- cmd/nitro/nitro.go | 10 +++++++--- cmd/relay/relay.go | 12 +++++++----- 5 files changed, 46 insertions(+), 34 deletions(-) diff --git a/cmd/daserver/daserver.go b/cmd/daserver/daserver.go index 059c19d7ca..1a587d6847 100644 --- a/cmd/daserver/daserver.go +++ b/cmd/daserver/daserver.go @@ -145,11 +145,11 @@ func (c *L1ReaderCloser) String() string { // Checks metrics and PProf flag, runs them if enabled. // Note: they are separate so one can enable/disable them as they wish, the only // requirement is that they can't run on the same address and port. -func mustRunMetrics(cfg *DAServerConfig) { +func startMetrics(cfg *DAServerConfig) error { mAddr := fmt.Sprintf("%v:%v", cfg.MetricsServer.Addr, cfg.MetricsServer.Port) pAddr := fmt.Sprintf("%v:%v", cfg.PprofCfg.Addr, cfg.PprofCfg.Port) if cfg.Metrics && cfg.PProf && mAddr == pAddr { - log.Crit("Metrics and pprof cannot be enabled on the same address:port", "addr", mAddr) + return fmt.Errorf("metrics and pprof cannot be enabled on the same address:port: %s", mAddr) } if cfg.Metrics { go metrics.CollectProcessMetrics(cfg.MetricsServer.UpdateInterval) @@ -158,6 +158,7 @@ func mustRunMetrics(cfg *DAServerConfig) { if cfg.PProf { genericconf.StartPprof(pAddr) } + return nil } func startup() error { @@ -176,16 +177,8 @@ func startup() error { glogger.Verbosity(log.Lvl(serverConfig.LogLevel)) log.Root().SetHandler(glogger) - if serverConfig.Metrics { - if len(serverConfig.MetricsServer.Addr) == 0 { - fmt.Printf("Metrics is enabled, but missing --metrics-server.addr") - return nil - } - - go metrics.CollectProcessMetrics(serverConfig.MetricsServer.UpdateInterval) - - address := fmt.Sprintf("%v:%v", serverConfig.MetricsServer.Addr, serverConfig.MetricsServer.Port) - exp.Setup(address) + if err := startMetrics(serverConfig); err != nil { + return err } sigint := make(chan os.Signal, 1) diff --git a/cmd/nitro-val/config.go b/cmd/nitro-val/config.go index 5ab1521f96..12a359cfa4 100644 --- a/cmd/nitro-val/config.go +++ b/cmd/nitro-val/config.go @@ -30,6 +30,8 @@ type ValidationNodeConfig struct { AuthRPC genericconf.AuthRPCConfig `koanf:"auth"` Metrics bool `koanf:"metrics"` MetricsServer genericconf.MetricsServerConfig `koanf:"metrics-server"` + PProf bool `koanf:"pprof"` + PprofCfg genericconf.PProf `koanf:"pprof-cfg"` Workdir string `koanf:"workdir" reload:"hot"` } @@ -67,6 +69,8 @@ var ValidationNodeConfigDefault = ValidationNodeConfig{ AuthRPC: genericconf.AuthRPCConfigDefault, Metrics: false, MetricsServer: genericconf.MetricsServerConfigDefault, + PProf: false, + PprofCfg: genericconf.PProfDefault, Workdir: "", } @@ -83,6 +87,8 @@ func ValidationNodeConfigAddOptions(f *flag.FlagSet) { genericconf.AuthRPCConfigAddOptions("auth", f) f.Bool("metrics", ValidationNodeConfigDefault.Metrics, "enable metrics") genericconf.MetricsServerAddOptions("metrics-server", f) + f.Bool("pprof", ValidationNodeConfigDefault.PProf, "enable pprof") + genericconf.PProfAddOptions("pprof-cfg", f) f.String("workdir", ValidationNodeConfigDefault.Workdir, "path used for purpose of resolving relative paths (ia. jwt secret file, log files), if empty then current working directory will be used.") } diff --git a/cmd/nitro-val/nitro_val.go b/cmd/nitro-val/nitro_val.go index 40d9fce5b6..e6b7bd882f 100644 --- a/cmd/nitro-val/nitro_val.go +++ b/cmd/nitro-val/nitro_val.go @@ -32,6 +32,25 @@ func main() { os.Exit(mainImpl()) } +// Checks metrics and PProf flag, runs them if enabled. +// Note: they are separate so one can enable/disable them as they wish, the only +// requirement is that they can't run on the same address and port. +func startMetrics(cfg *ValidationNodeConfig) error { + mAddr := fmt.Sprintf("%v:%v", cfg.MetricsServer.Addr, cfg.MetricsServer.Port) + pAddr := fmt.Sprintf("%v:%v", cfg.PprofCfg.Addr, cfg.PprofCfg.Port) + if cfg.Metrics && cfg.PProf && mAddr == pAddr { + return fmt.Errorf("metrics and pprof cannot be enabled on the same address:port: %s", mAddr) + } + if cfg.Metrics { + go metrics.CollectProcessMetrics(cfg.MetricsServer.UpdateInterval) + exp.Setup(fmt.Sprintf("%v:%v", cfg.MetricsServer.Addr, cfg.MetricsServer.Port)) + } + if cfg.PProf { + genericconf.StartPprof(pAddr) + } + return nil +} + // Returns the exit code func mainImpl() int { ctx, cancelFunc := context.WithCancel(context.Background()) @@ -96,20 +115,8 @@ func mainImpl() int { log.Crit("failed to initialize geth stack", "err", err) } - if nodeConfig.Metrics { - go metrics.CollectProcessMetrics(nodeConfig.MetricsServer.UpdateInterval) - - if nodeConfig.MetricsServer.Addr != "" { - address := fmt.Sprintf("%v:%v", nodeConfig.MetricsServer.Addr, nodeConfig.MetricsServer.Port) - if nodeConfig.MetricsServer.Pprof { - genericconf.StartPprof(address) - } else { - exp.Setup(address) - } - } - } else if nodeConfig.MetricsServer.Pprof { - flag.Usage() - log.Error("--metrics must be enabled in order to use pprof with the metrics server") + if err := startMetrics(nodeConfig); err != nil { + log.Error("Starting metrics: %v", err) return 1 } diff --git a/cmd/nitro/nitro.go b/cmd/nitro/nitro.go index 0f3a65db44..f1af1388cf 100644 --- a/cmd/nitro/nitro.go +++ b/cmd/nitro/nitro.go @@ -125,11 +125,11 @@ func main() { // Checks metrics and PProf flag, runs them if enabled. // Note: they are separate so one can enable/disable them as they wish, the only // requirement is that they can't run on the same address and port. -func mustRunMetrics(cfg *NodeConfig) { +func startMetrics(cfg *NodeConfig) error { mAddr := fmt.Sprintf("%v:%v", cfg.MetricsServer.Addr, cfg.MetricsServer.Port) pAddr := fmt.Sprintf("%v:%v", cfg.PprofCfg.Addr, cfg.PprofCfg.Port) if cfg.Metrics && cfg.PProf && mAddr == pAddr { - log.Crit("Metrics and pprof cannot be enabled on the same address:port", "addr", mAddr) + return fmt.Errorf("metrics and pprof cannot be enabled on the same address:port: %s", mAddr) } if cfg.Metrics { go metrics.CollectProcessMetrics(cfg.MetricsServer.UpdateInterval) @@ -138,6 +138,7 @@ func mustRunMetrics(cfg *NodeConfig) { if cfg.PProf { genericconf.StartPprof(pAddr) } + return nil } // Returns the exit code @@ -368,7 +369,10 @@ func mainImpl() int { } } - mustRunMetrics(nodeConfig) + if err := startMetrics(nodeConfig); err != nil { + log.Error("Starting metrics: %v", err) + return 1 + } chainDb, l2BlockChain, err := openInitializeChainDb(ctx, stack, nodeConfig, new(big.Int).SetUint64(nodeConfig.L2.ChainID), execution.DefaultCacheConfigFor(stack, &nodeConfig.Node.Caching), l1Client, rollupAddrs) defer closeDb(chainDb, "chainDb") diff --git a/cmd/relay/relay.go b/cmd/relay/relay.go index 2d466d835a..57831c3f59 100644 --- a/cmd/relay/relay.go +++ b/cmd/relay/relay.go @@ -40,11 +40,11 @@ func printSampleUsage(progname string) { // Checks metrics and PProf flag, runs them if enabled. // Note: they are separate so one can enable/disable them as they wish, the only // requirement is that they can't run on the same address and port. -func mustRunMetrics(cfg *relay.Config) { +func startMetrics(cfg *relay.Config) error { mAddr := fmt.Sprintf("%v:%v", cfg.MetricsServer.Addr, cfg.MetricsServer.Port) pAddr := fmt.Sprintf("%v:%v", cfg.PprofCfg.Addr, cfg.PprofCfg.Port) if cfg.Metrics && cfg.PProf && mAddr == pAddr { - log.Crit("Metrics and pprof cannot be enabled on the same address:port", "addr", mAddr) + return fmt.Errorf("metrics and pprof cannot be enabled on the same address:port: %s", mAddr) } if cfg.Metrics { go metrics.CollectProcessMetrics(cfg.MetricsServer.UpdateInterval) @@ -53,6 +53,7 @@ func mustRunMetrics(cfg *relay.Config) { if cfg.PProf { genericconf.StartPprof(pAddr) } + return nil } func startup() error { @@ -87,10 +88,11 @@ func startup() error { return err } - mustRunMetrics(relayConfig) + if err := startMetrics(relayConfig); err != nil { + return err + } - err = newRelay.Start(ctx) - if err != nil { + if err := newRelay.Start(ctx); err != nil { return err } From 38f9b3213ac1a56c067c0f2ee6f2c0b00482efa5 Mon Sep 17 00:00:00 2001 From: Nodar Date: Mon, 17 Jul 2023 14:09:35 +0200 Subject: [PATCH 4/4] Add comment explaining where pprof handlers are registered --- cmd/genericconf/pprof.go | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/genericconf/pprof.go b/cmd/genericconf/pprof.go index 8f756bbf45..e55bfddd32 100644 --- a/cmd/genericconf/pprof.go +++ b/cmd/genericconf/pprof.go @@ -4,6 +4,7 @@ import ( "fmt" "net/http" + // Blank import pprof registers its HTTP handlers. _ "net/http/pprof" // #nosec G108 "github.com/ethereum/go-ethereum/log"