diff --git a/blockbook.go b/blockbook.go index 70419f84..ce09e163 100644 --- a/blockbook.go +++ b/blockbook.go @@ -137,11 +137,20 @@ var ( queryAddress = flag.String("address", "", "query contents of this address") resync = flag.Bool("resync", false, "resync until tip") + + repair = flag.Bool("repair", false, "repair the database") ) func main() { flag.Parse() + if *repair { + if err := RepairRocksDB(*dbPath); err != nil { + log.Fatal(err) + } + return + } + timeout := time.Duration(*rpcTimeout) * time.Second rpc := NewBitcoinRPC(*rpcURL, *rpcUser, *rpcPass, timeout) if *rpcCache > 0 { diff --git a/rocksdb.go b/rocksdb.go index dfecd5a9..4dcb7eec 100644 --- a/rocksdb.go +++ b/rocksdb.go @@ -13,6 +13,12 @@ import ( "github.com/tecbot/gorocksdb" ) +func RepairRocksDB(name string) error { + log.Printf("rocksdb: repair") + opts := gorocksdb.NewDefaultOptions() + return gorocksdb.RepairDb(name, opts) +} + type RocksDB struct { db *gorocksdb.DB wo *gorocksdb.WriteOptions