Skip to content

Commit eb39602

Browse files
committed
cmd added unsafe shutdown detection
1 parent a5eee8d commit eb39602

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

cmd/geth/main.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package main
1919

2020
import (
2121
"fmt"
22+
"github.com/ethereum/go-ethereum/ethdb/leveldb"
2223
"math"
2324
"os"
2425
"runtime"
@@ -257,6 +258,16 @@ func init() {
257258
return debug.Setup(ctx)
258259
}
259260
app.After = func(ctx *cli.Context) error {
261+
unsafeShutdownDb, err := leveldb.New(utils.DataDirFlag.Value.String()+"/unsafe-shutdown", 0, 0, "")
262+
if err != nil {
263+
log.Warn("failed to access unsafe shutdown database", "time", err)
264+
}
265+
// safe shutdown deletes unsafe shutdown from unsafe-shutdown-db
266+
err = unsafeShutdownDb.Delete([]byte("unsafe-shutdown"))
267+
if err != nil {
268+
log.Error("err", err)
269+
}
270+
unsafeShutdownDb.Close()
260271
debug.Exit()
261272
prompt.Stdin.Close() // Resets terminal mode.
262273
return nil
@@ -361,6 +372,21 @@ func geth(ctx *cli.Context) error {
361372
func startNode(ctx *cli.Context, stack *node.Node) {
362373
debug.Memsize.Add("node", stack)
363374

375+
// Create a db to hold invalid shutdowns
376+
unsafeShutdownDb, err := leveldb.New(utils.DataDirFlag.Value.String()+"/unsafe-shutdown", 0, 0, "")
377+
if err != nil {
378+
log.Warn("failed to access unsafe shutdown database", "time", err)
379+
}
380+
// Check for invalid shutdown
381+
invalidShutdown, _ := unsafeShutdownDb.Get([]byte("unsafe-shutdown"))
382+
if invalidShutdown != nil {
383+
log.Error("unsafe shutdown detected", "time", string(invalidShutdown))
384+
}
385+
// Create an invalid shutdown in database in case the app crashed
386+
if err = unsafeShutdownDb.Put([]byte("unsafe-shutdown"), []byte(time.Now().String())); err != nil {
387+
log.Warn("Failed to record possible future unsafe shutdown", "err", err)
388+
}
389+
unsafeShutdownDb.Close()
364390
// Start up the node itself
365391
utils.StartNode(stack)
366392

0 commit comments

Comments
 (0)