Skip to content

Commit

Permalink
#92 Fixes missing trap signal skipping graceful shutdown.
Browse files Browse the repository at this point in the history
  • Loading branch information
EnchanterIO authored and ggarri committed Mar 6, 2019
1 parent 2e5c0d6 commit bb2e47f
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 26 deletions.
26 changes: 10 additions & 16 deletions cmd/lightchain/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,12 +105,20 @@ func runCmd() *cobra.Command {
tracerCfg := tracer.NewConfig(shouldTrace, traceLogFilePath)
nodeCfg := node.NewConfig(dataDir, consensusCfg, dbCfg, prometheusCfg, tracerCfg)

n, err := startNode(nodeCfg)
n, err := node.NewNode(&nodeCfg)
if err != nil {
logger.Error(err.Error())
logger.Error(fmt.Errorf("lightchain node could not be instantiated: %v", err).Error())
os.Exit(1)
}

go func() {
logger.Debug("Starting lightchain node...")
if err := n.Start(); err != nil {
logger.Error(fmt.Errorf("lightchain node could not be started: %v", err).Error())
os.Exit(1)
}
}()

common.TrapSignal(func() {
if err := n.Stop(); err != nil {
logger.Error(fmt.Errorf("error stopping lightchain node. %v", err).Error())
Expand All @@ -127,20 +135,6 @@ func runCmd() *cobra.Command {
return runCmd
}

func startNode(nodeCfg node.Config) (*node.Node, error) {
n, err := node.NewNode(&nodeCfg)
if err != nil {
return nil, fmt.Errorf("lightchain node could not be instantiated: %v", err)
}

logger.Debug("Starting lightchain node...")
if err := n.Start(); err != nil {
return nil, fmt.Errorf("lightchain node could not be started: %v", err)
}

return n, nil
}

func addRunCmdFlags(cmd *cobra.Command) {
addDefaultFlags(cmd)
addConsensusFlags(cmd)
Expand Down
7 changes: 6 additions & 1 deletion cmd/lightchain/simulate.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,17 @@ func simulateCmd() *cobra.Command {
os.Exit(1)
}

n, err := startNode(nodeCfg)
n, err := node.NewNode(&nodeCfg)
if err != nil {
logger.Error(err.Error())
os.Exit(1)
}

if err := n.Start(); err != nil {
logger.Error(err.Error())
os.Exit(1)
}

tx := simulateTransferTx(nodeCfg)

n.Stop()
Expand Down
5 changes: 1 addition & 4 deletions node/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@ func (n *Node) Start() error {
return err
}

n.logger.Info("Starting prometheus service...")
if err := n.prometheusNode.Start(); err != nil {
return err
}
Expand All @@ -80,11 +79,9 @@ func (n *Node) Stop() error {
}
n.logger.Info("Database node stopped")

n.logger.Info("Stopping prometheus service...")
if err := n.prometheusNode.Stop(); err != nil {
return err
}
n.logger.Info("Prometheus service stopped")

return nil
}
}
12 changes: 7 additions & 5 deletions prometheus/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,11 @@ func (n *Node) Registry() *prometheus.Registry {
}

func (n *Node) Start() error {
if ! n.cfg.enabled {
n.logger.Info("Ignored initialization of prometheus service")
if !n.cfg.enabled {
return nil
}

n.logger.Info("Starting prometheus node...")

n.httpSrv = &http.Server{
Addr: n.cfg.http.Addr,
Expand All @@ -62,14 +63,15 @@ func (n *Node) Start() error {
}

func (n *Node) Stop() error {
if ! n.cfg.enabled {
n.logger.Info("Ignored stopping of prometheus service")
if !n.cfg.enabled {
return nil
}

n.logger.Info("Stopping prometheus node...")
if err := n.httpSrv.Shutdown(context.Background()); err != nil {
return err
}
n.logger.Info("Prometheus node stopped")

return nil
}
}

0 comments on commit bb2e47f

Please sign in to comment.