Make validation process perpetual (#8)

* Make validation process perpetual

* Get sleep interval from config

* Add license

* Gracefully shutdown validator on interrupt

* Change default trail and sleep values
This commit is contained in:
prathamesh0
2022-05-31 11:59:49 +05:30
committed by GitHub
parent bf85e6f299
commit 6eeaa2c8bd
7 changed files with 774 additions and 64 deletions
+16 -7
View File
@@ -3,6 +3,9 @@ package cmd
import (
"context"
"fmt"
"os"
"os/signal"
"sync"
"github.com/ethereum/go-ethereum/statediff"
log "github.com/sirupsen/logrus"
@@ -36,6 +39,7 @@ func stateValidator() {
logWithCommand.Fatalf("block height cannot be less the 1")
}
trail := viper.GetUint64("validate.trail")
sleepInterval := viper.GetUint("validate.sleepInterval")
chainConfigPath := viper.GetString("ethereum.chainConfig")
chainCfg, err := statediff.LoadConfig(chainConfigPath)
@@ -43,26 +47,31 @@ func stateValidator() {
logWithCommand.Fatal(err)
}
srvc := validator.NewService(cfg.DB, height, trail, chainCfg)
service := validator.NewService(cfg.DB, height, trail, sleepInterval, chainCfg)
_, err = srvc.Start(context.Background())
if err != nil {
logWithCommand.Fatal(err)
}
wg := new(sync.WaitGroup)
wg.Add(1)
go service.Start(context.Background(), wg)
logWithCommand.Println("state validation complete")
shutdown := make(chan os.Signal, 1)
signal.Notify(shutdown, os.Interrupt)
<-shutdown
service.Stop()
wg.Wait()
}
func init() {
rootCmd.AddCommand(stateValidatorCmd)
stateValidatorCmd.PersistentFlags().String("block-height", "1", "block height to initiate state validation")
stateValidatorCmd.PersistentFlags().String("trail", "0", "trail of block height to validate")
stateValidatorCmd.PersistentFlags().String("trail", "16", "trail of block height to validate")
stateValidatorCmd.PersistentFlags().String("sleep-interval", "10", "sleep interval in seconds after validator has caught up to (head-trail) height")
stateValidatorCmd.PersistentFlags().String("chain-config", "", "path to chain config")
_ = viper.BindPFlag("validate.block-height", stateValidatorCmd.PersistentFlags().Lookup("block-height"))
_ = viper.BindPFlag("validate.trail", stateValidatorCmd.PersistentFlags().Lookup("trail"))
_ = viper.BindPFlag("validate.sleepInterval", stateValidatorCmd.PersistentFlags().Lookup("sleep-interval"))
_ = viper.BindPFlag("ethereum.chainConfig", stateValidatorCmd.PersistentFlags().Lookup("chain-config"))
}