Issue #532 -f init should clean up state

Prompt on init and skip the prompt in init -f (and not have a -y flag)
This would be in line with other state subcommands which ask by default
and -f skips the prompt.

License: MIT
Signed-off-by: Kishan Mohanbhai Sagathiya <kishansagathiya@gmail.com>
This commit is contained in:
Kishan Sagathiya 2018-10-04 20:38:27 +05:30
parent d599ef891b
commit dbc5f97d5e
3 changed files with 32 additions and 16 deletions

View File

@ -1,7 +1,6 @@
package main
import (
"fmt"
"os"
"path/filepath"
@ -67,12 +66,7 @@ func makeConfigs() (*config.Manager, *cfgs) {
}
}
func saveConfig(cfg *config.Manager, force bool) {
if _, err := os.Stat(configPath); err == nil && !force {
err := fmt.Errorf("%s exists. Try running: %s -f init", configPath, programName)
checkErr("", err)
}
func saveConfig(cfg *config.Manager) {
err := os.MkdirAll(filepath.Dir(configPath), 0700)
err = cfg.SaveJSON(configPath)
checkErr("saving new configuration", err)

View File

@ -206,6 +206,10 @@ configuration.
Name: "custom-secret, s",
Usage: "prompt for the cluster secret",
},
cli.BoolFlag{
Name: "force, f",
Usage: "forcefully proceed (without prompting) with overwriting configuration and cleaning up state",
},
},
Action: func(c *cli.Context) error {
userSecret, userSecretDefined := userProvidedSecret(c.Bool("custom-secret"))
@ -213,6 +217,31 @@ configuration.
cfgMgr, cfgs := makeConfigs()
defer cfgMgr.Shutdown() // wait for saves
var alreadyInitialized bool
if _, err := os.Stat(configPath); !os.IsNotExist(err) {
alreadyInitialized = true
}
if alreadyInitialized {
// acquire lock for config folder
err := locker.lock()
checkErr("acquiring execution lock", err)
defer locker.tryUnlock()
if !c.Bool("force") {
if !yesNoPrompt("The peer's state will be removed from the load path. Existing pins may be lost. Continue? [y/n]:") {
return nil
}
}
err = cfgMgr.LoadJSONFromFile(configPath)
checkErr("reading configuration", err)
err = cleanupState(cfgs.consensusCfg)
checkErr("Cleaning up consensus data", err)
logger.Warningf("the %s folder has been rotated. Starting with an empty state", cfgs.consensusCfg.GetDataFolder())
}
// Generate defaults for all registered components
err := cfgMgr.Default()
checkErr("generating default configuration", err)
@ -223,14 +252,7 @@ configuration.
}
// Save
saveConfig(cfgMgr, c.GlobalBool("force"))
// Clean up state
if c.GlobalBool("force") && yesNoPrompt("The peer's state will be removed from the load path. Existing pins may be lost. Continue? [y/n]:") {
err = cleanupState(cfgs.consensusCfg)
checkErr("Cleaning up consensus data", err)
logger.Warningf("the %s folder has been rotated. Starting with an empty state", cfgs.consensusCfg.GetDataFolder())
}
saveConfig(cfgMgr)
return nil
},
},

View File

@ -71,7 +71,7 @@ test_cluster_init() {
echo "cluster init FAIL: ipfs-cluster-ctl not found"
exit 1
fi
printf "y" | ipfs-cluster-service -f --config "test-config" init >"$IPFS_OUTPUT" 2>&1
ipfs-cluster-service -f --config "test-config" init >"$IPFS_OUTPUT" 2>&1
if [ $? -ne 0 ]; then
echo "cluster init FAIL: error on ipfs cluster init"
exit 1