From c469460f55c827f728717444ba9e3f1deaa8b0ba Mon Sep 17 00:00:00 2001 From: Hleb Albau Date: Wed, 13 Feb 2019 16:34:01 +0700 Subject: [PATCH] #250 Add fail at height debug flag --- app/app.go | 19 ++++++++++++------- app/options.go | 12 ++++++++++++ daemon/main.go | 13 +++++++++++-- 3 files changed, 35 insertions(+), 9 deletions(-) create mode 100644 app/options.go diff --git a/app/app.go b/app/app.go index 52a6fa5a..203aece3 100644 --- a/app/app.go +++ b/app/app.go @@ -82,6 +82,9 @@ type CyberdApp struct { rankState *rank.RankState latestBlockHeight int64 + + // debug values + failBeforeHeight int64 } // NewBasecoinApp returns a reference to a new CyberdApp given a @@ -91,16 +94,13 @@ type CyberdApp struct { // registered, and finally the stores being mounted along with any necessary // chain initialization. func NewCyberdApp( - logger log.Logger, db dbm.DB, computeUnit rank.ComputeUnit, allowSearch bool, baseAppOptions ...func(*baseapp.BaseApp), + logger log.Logger, db dbm.DB, opts Options, baseAppOptions ...func(*baseapp.BaseApp), ) *CyberdApp { // create and register app-level codec for TXs and accounts cdc := MakeCodec() - dbKeys := NewCyberdAppDbKeys() - ms := store.NewMainKeeper(dbKeys.main) - var txDecoder = auth.DefaultTxDecoder(cdc) // create your application type @@ -153,8 +153,8 @@ func NewCyberdApp( app.cidNumKeeper = keeper.NewBaseCidNumberKeeper(ms, dbKeys.cidNum, dbKeys.cidNumReverse) app.stakingIndex = cbdbank.NewIndexedKeeper(app.bankKeeper, app.accountKeeper) app.rankState = rank.NewRankState( - allowSearch, app.mainKeeper, app.stakingIndex, - app.linkIndexedKeeper, app.cidNumKeeper, computeUnit, + opts.AllowSearch, app.mainKeeper, app.stakingIndex, + app.linkIndexedKeeper, app.cidNumKeeper, opts.ComputeUnit, ) // register the staking hooks @@ -217,7 +217,7 @@ func NewCyberdApp( // RANK PARAMS app.rankState.Load(ctx, app.latestBlockHeight, app.Logger) - + app.failBeforeHeight = opts.FailBeforeHeight app.Seal() return app } @@ -428,6 +428,11 @@ func getSignersTags(tx sdk.Tx) sdk.Tags { func (app *CyberdApp) BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock) abci.ResponseBeginBlock { + if app.failBeforeHeight != 0 && req.Header.Height == app.failBeforeHeight { + app.Logger.Info("Forced panic at begin blocker", "height", app.failBeforeHeight) + os.Exit(1) + } + // mint new tokens for the previous block mint.BeginBlocker(ctx, app.minter) // distribute rewards for the previous block diff --git a/app/options.go b/app/options.go new file mode 100644 index 00000000..1f325f75 --- /dev/null +++ b/app/options.go @@ -0,0 +1,12 @@ +package app + +import "github.com/cybercongress/cyberd/x/rank" + +type Options struct { + // main options + ComputeUnit rank.ComputeUnit + AllowSearch bool + + // debug options + FailBeforeHeight int64 +} diff --git a/daemon/main.go b/daemon/main.go index 9cb4e80e..0f960ca4 100644 --- a/daemon/main.go +++ b/daemon/main.go @@ -25,6 +25,7 @@ import ( const ( flagGpuEnabled = "compute-rank-on-gpu" + flagFailBeforeHeight = "fail-before-height" flagSearchRpcQueryEnabled = "allow-search-rpc-query" flagNotToSealAccPrefix = "not-to-seal-acc-prefix" ) @@ -54,6 +55,7 @@ func main() { for _, c := range rootCmd.Commands() { if c.Use == "start" { c.Flags().Bool(flagGpuEnabled, true, "Run cyberd with cuda calculations") + c.Flags().Int64(flagFailBeforeHeight, 0, "Forced node shutdown before specified height") c.Flags().Bool(flagSearchRpcQueryEnabled, true, "Build index of links with ranks and allow to query search through RPC") } } @@ -68,11 +70,18 @@ func main() { func newApp(logger log.Logger, db dbm.DB, storeTracer io.Writer) abci.Application { // todo use constant here pruning := baseapp.SetPruning(sdk.NewPruningOptions(60*60*24, 0)) + computeUnit := rank.CPU if viper.GetBool(flagGpuEnabled) { computeUnit = rank.GPU } - cyberdApp := app.NewCyberdApp(logger, db, computeUnit, viper.GetBool(flagSearchRpcQueryEnabled), pruning) + + opts := app.Options{ + ComputeUnit: computeUnit, + AllowSearch: viper.GetBool(flagSearchRpcQueryEnabled), + FailBeforeHeight: viper.GetInt64(flagFailBeforeHeight), + } + cyberdApp := app.NewCyberdApp(logger, db, opts, pruning) rpc.SetCyberdApp(cyberdApp) return cyberdApp } @@ -81,7 +90,7 @@ func exportAppStateAndTMValidators( logger log.Logger, db dbm.DB, traceStore io.Writer, height int64, forZeroHeight bool, ) (json.RawMessage, []tmtypes.GenesisValidator, error) { - capp := app.NewCyberdApp(logger, db, rank.CPU, false) + capp := app.NewCyberdApp(logger, db, app.Options{}) return capp.ExportAppStateAndValidators() }