@@ -19,6 +19,7 @@ package main
1919
2020import (
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 {
361372func 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