Skip to content

Commit

Permalink
fix: edge case in-place-testnet states (#531) (#532)
Browse files Browse the repository at this point in the history
* fix prometheus edge case

* fix halt height edge cases

* figured out sigterm case

* revert load commit step

(cherry picked from commit d60a4bf)

Co-authored-by: Adam Tucker <[email protected]>
  • Loading branch information
mergify[bot] and czarcas7ic authored Feb 22, 2024
1 parent 21edd59 commit bc9b3c2
Showing 1 changed file with 15 additions and 6 deletions.
21 changes: 15 additions & 6 deletions server/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
db "github.com/cometbft/cometbft-db"
"github.com/cometbft/cometbft/abci/server"
tcmd "github.com/cometbft/cometbft/cmd/cometbft/commands"
cmtcfg "github.com/cometbft/cometbft/config"
cmtjson "github.com/cometbft/cometbft/libs/json"
"github.com/cometbft/cometbft/node"
"github.com/cometbft/cometbft/p2p"
Expand Down Expand Up @@ -742,7 +743,7 @@ func testnetify(ctx *Context, home string, testnetAppCreator types.AppCreator, d
// Depending on how the node was stopped, the application height can differ from the blockStore height.
// This height difference changes how we go about modifying the state.
clientCreator := proxy.NewLocalClientCreator(testnetApp)
metrics := node.DefaultMetricsProvider(config.Instrumentation)
metrics := node.DefaultMetricsProvider(cmtcfg.DefaultConfig().Instrumentation)
_, _, _, _, proxyMetrics := metrics(genDoc.ChainID) //nolint:dogsled
proxyApp := proxy.NewAppConns(clientCreator, proxyMetrics)
if err := proxyApp.Start(); err != nil {
Expand All @@ -762,13 +763,21 @@ func testnetify(ctx *Context, home string, testnetAppCreator types.AppCreator, d
var block *cmttypes.Block
switch {
case appHeight == blockStore.Height():
// This state occurs when we stop the node with the halt height flag, and need to handle differently
state.LastBlockHeight++
block = blockStore.LoadBlock(blockStore.Height())
block.AppHash = appHash
state.AppHash = appHash
// If the state's last blockstore height does not match the app and blockstore height, we likely stopped with the halt height flag.
if state.LastBlockHeight != appHeight {
state.LastBlockHeight = appHeight
block.AppHash = appHash
state.AppHash = appHash
} else {
// Node was likely stopped via SIGTERM, delete the next block's seen commit
err := blockStoreDB.Delete([]byte(fmt.Sprintf("SC:%v", blockStore.Height()+1)))
if err != nil {
return nil, err
}
}
case blockStore.Height() > state.LastBlockHeight:
// This state occurs when we kill the node
// This state usually occurs when we gracefully stop the node.
err = blockStore.DeleteLatestBlock()
if err != nil {
return nil, err
Expand Down

0 comments on commit bc9b3c2

Please sign in to comment.