aboutsummaryrefslogtreecommitdiffstats
path: root/cmd
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2017-05-03 19:32:24 +0800
committerGitHub <noreply@github.com>2017-05-03 19:32:24 +0800
commitcad071009d935e1e31dadd684bec25a0d1b15338 (patch)
treee1fdf71214dc035cfbd451178402786419228067 /cmd
parent02fa3e3179011bcbdf9142f9efba8d3a52df8987 (diff)
parent181a3309dfac92ca2715c0f32f270b536008768e (diff)
downloaddexon-cad071009d935e1e31dadd684bec25a0d1b15338.tar.gz
dexon-cad071009d935e1e31dadd684bec25a0d1b15338.tar.zst
dexon-cad071009d935e1e31dadd684bec25a0d1b15338.zip
Merge pull request #14412 from karalabe/init-both-chains
cmd/geth, cmd/utils: init/removedb on light/full dbs simultaneously
Diffstat (limited to 'cmd')
-rw-r--r--cmd/geth/chaincmd.go73
-rw-r--r--cmd/utils/flags.go14
2 files changed, 45 insertions, 42 deletions
diff --git a/cmd/geth/chaincmd.go b/cmd/geth/chaincmd.go
index 66516b409..d4a263d60 100644
--- a/cmd/geth/chaincmd.go
+++ b/cmd/geth/chaincmd.go
@@ -58,10 +58,10 @@ participating.
ArgsUsage: "<filename> (<filename 2> ... <filename N>) ",
Category: "BLOCKCHAIN COMMANDS",
Description: `
-The import command imports blocks from an RLP-encoded form. The form can be one file
-with several RLP-encoded blocks, or several files can be used.
-If only one file is used, import error will result in failure. If several files are used,
-processing will proceed even if an individual RLP-file import failure occurs.
+The import command imports blocks from an RLP-encoded form. The form can be one file
+with several RLP-encoded blocks, or several files can be used.
+If only one file is used, import error will result in failure. If several files are used,
+processing will proceed even if an individual RLP-file import failure occurs.
`,
}
exportCommand = cli.Command{
@@ -103,17 +103,14 @@ Use "ethereum dump 0" to dump the genesis block.
// initGenesis will initialise the given JSON format genesis file and writes it as
// the zero'd block (i.e. genesis) or will fail hard if it can't succeed.
func initGenesis(ctx *cli.Context) error {
+ // Make sure we have a valid genesis JSON
genesisPath := ctx.Args().First()
if len(genesisPath) == 0 {
- utils.Fatalf("must supply path to genesis JSON file")
+ utils.Fatalf("Must supply path to genesis JSON file")
}
-
- stack := makeFullNode(ctx)
- chaindb := utils.MakeChainDatabase(ctx, stack)
-
file, err := os.Open(genesisPath)
if err != nil {
- utils.Fatalf("failed to read genesis file: %v", err)
+ utils.Fatalf("Failed to read genesis file: %v", err)
}
defer file.Close()
@@ -121,12 +118,19 @@ func initGenesis(ctx *cli.Context) error {
if err := json.NewDecoder(file).Decode(genesis); err != nil {
utils.Fatalf("invalid genesis file: %v", err)
}
-
- _, hash, err := core.SetupGenesisBlock(chaindb, genesis)
- if err != nil {
- utils.Fatalf("failed to write genesis block: %v", err)
+ // Open an initialise both full and light databases
+ stack := makeFullNode(ctx)
+ for _, name := range []string{"chaindata", "lightchaindata"} {
+ chaindb, err := stack.OpenDatabase(name, 0, 0)
+ if err != nil {
+ utils.Fatalf("Failed to open database: %v", err)
+ }
+ _, hash, err := core.SetupGenesisBlock(chaindb, genesis)
+ if err != nil {
+ utils.Fatalf("Failed to write genesis block: %v", err)
+ }
+ log.Info("Successfully wrote genesis state", "database", name, "hash", hash)
}
- log.Info("Successfully wrote genesis state", "hash", hash)
return nil
}
@@ -245,24 +249,29 @@ func exportChain(ctx *cli.Context) error {
func removeDB(ctx *cli.Context) error {
stack, _ := makeConfigNode(ctx)
- dbdir := stack.ResolvePath(utils.ChainDbName(ctx))
- if !common.FileExist(dbdir) {
- fmt.Println(dbdir, "does not exist")
- return nil
- }
- fmt.Println(dbdir)
- confirm, err := console.Stdin.PromptConfirm("Remove this database?")
- switch {
- case err != nil:
- utils.Fatalf("%v", err)
- case !confirm:
- fmt.Println("Operation aborted")
- default:
- fmt.Println("Removing...")
- start := time.Now()
- os.RemoveAll(dbdir)
- fmt.Printf("Removed in %v\n", time.Since(start))
+ for _, name := range []string{"chaindata", "lightchaindata"} {
+ // Ensure the database exists in the first place
+ logger := log.New("database", name)
+
+ dbdir := stack.ResolvePath(name)
+ if !common.FileExist(dbdir) {
+ logger.Info("Database doesn't exist, skipping", "path", dbdir)
+ continue
+ }
+ // Confirm removal and execute
+ fmt.Println(dbdir)
+ confirm, err := console.Stdin.PromptConfirm("Remove this database?")
+ switch {
+ case err != nil:
+ utils.Fatalf("%v", err)
+ case !confirm:
+ logger.Warn("Database deletion aborted")
+ default:
+ start := time.Now()
+ os.RemoveAll(dbdir)
+ logger.Info("Database successfully deleted", "elapsed", common.PrettyDuration(time.Since(start)))
+ }
}
return nil
}
diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go
index 9e80bba60..c47301dfb 100644
--- a/cmd/utils/flags.go
+++ b/cmd/utils/flags.go
@@ -908,22 +908,16 @@ func SetupNetwork(ctx *cli.Context) {
params.TargetGasLimit = new(big.Int).SetUint64(ctx.GlobalUint64(TargetGasLimitFlag.Name))
}
-func ChainDbName(ctx *cli.Context) string {
- if ctx.GlobalBool(LightModeFlag.Name) {
- return "lightchaindata"
- } else {
- return "chaindata"
- }
-}
-
// MakeChainDatabase open an LevelDB using the flags passed to the client and will hard crash if it fails.
func MakeChainDatabase(ctx *cli.Context, stack *node.Node) ethdb.Database {
var (
cache = ctx.GlobalInt(CacheFlag.Name)
handles = makeDatabaseHandles()
- name = ChainDbName(ctx)
)
-
+ name := "chaindata"
+ if ctx.GlobalBool(LightModeFlag.Name) {
+ name = "lightchaindata"
+ }
chainDb, err := stack.OpenDatabase(name, cache, handles)
if err != nil {
Fatalf("Could not open database: %v", err)