#1255 make keybase opened with readonly option to support better parallelization between gaiacli

This commit is contained in:
Cong Zhao
2018-10-20 20:26:15 +08:00
parent 57277d1143
commit 6c623b203e
8 changed files with 32 additions and 19 deletions
+3 -3
View File
@@ -63,7 +63,7 @@ func runAddCmd(cmd *cobra.Command, args []string) error {
return errMissingName()
}
name = args[0]
kb, err = GetKeyBase()
kb, err = GetKeyBaseWithWritePerm()
if err != nil {
return err
}
@@ -174,7 +174,7 @@ func AddNewKeyRequestHandler(indent bool) http.HandlerFunc {
var kb keys.Keybase
var m NewKeyBody
kb, err := GetKeyBase()
kb, err := GetKeyBaseWithWritePerm()
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte(err.Error()))
@@ -311,7 +311,7 @@ func RecoverRequestHandler(indent bool) http.HandlerFunc {
return
}
kb, err := GetKeyBase()
kb, err := GetKeyBaseWithWritePerm()
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte(err.Error()))
+2 -2
View File
@@ -25,7 +25,7 @@ func deleteKeyCommand() *cobra.Command {
func runDeleteCmd(cmd *cobra.Command, args []string) error {
name := args[0]
kb, err := GetKeyBase()
kb, err := GetKeyBaseWithWritePerm()
if err != nil {
return err
}
@@ -73,7 +73,7 @@ func DeleteKeyRequestHandler(w http.ResponseWriter, r *http.Request) {
return
}
kb, err = GetKeyBase()
kb, err = GetKeyBaseWithWritePerm()
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte(err.Error()))
+2 -2
View File
@@ -26,7 +26,7 @@ func runUpdateCmd(cmd *cobra.Command, args []string) error {
name := args[0]
buf := client.BufferStdin()
kb, err := GetKeyBase()
kb, err := GetKeyBaseWithWritePerm()
if err != nil {
return err
}
@@ -74,7 +74,7 @@ func UpdateKeyRequestHandler(w http.ResponseWriter, r *http.Request) {
return
}
kb, err = GetKeyBase()
kb, err = GetKeyBaseWithWritePerm()
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte(err.Error()))
+21 -10
View File
@@ -2,6 +2,7 @@ package keys
import (
"fmt"
"github.com/syndtr/goleveldb/leveldb/opt"
"path/filepath"
"github.com/spf13/viper"
@@ -25,14 +26,6 @@ var keybase keys.Keybase
type bechKeyOutFn func(keyInfo keys.Info) (KeyOutput, error)
// TODO make keybase take a database not load from the directory
// initialize a keybase based on the configuration
func GetKeyBase() (keys.Keybase, error) {
rootDir := viper.GetString(cli.HomeFlag)
return GetKeyBaseFromDir(rootDir)
}
// GetKeyInfo returns key info for a given name. An error is returned if the
// keybase cannot be retrieved or getting the info fails.
func GetKeyInfo(name string) (keys.Info, error) {
@@ -82,10 +75,28 @@ func ReadPassphraseFromStdin(name string) (string, error) {
return passphrase, nil
}
// TODO make keybase take a database not load from the directory
// initialize a keybase based on the configuration
func GetKeyBaseFromDir(rootDir string) (keys.Keybase, error) {
func GetKeyBase() (keys.Keybase, error) {
rootDir := viper.GetString(cli.HomeFlag)
return getKeyBaseFromDirWithOpts(rootDir, &opt.Options{ReadOnly: true})
}
// initialize a keybase based on the configuration with write permission
func GetKeyBaseWithWritePerm() (keys.Keybase, error) {
rootDir := viper.GetString(cli.HomeFlag)
return GetKeyBaseFromDirWithWritePerm(rootDir)
}
// initialize a keybase at particular dir with write permission
func GetKeyBaseFromDirWithWritePerm(rootDir string) (keys.Keybase, error) {
return getKeyBaseFromDirWithOpts(rootDir, &opt.Options{ReadOnly: false})
}
func getKeyBaseFromDirWithOpts(rootDir string, o *opt.Options) (keys.Keybase, error) {
if keybase == nil {
db, err := dbm.NewGoLevelDB(KeyDBName, filepath.Join(rootDir, "keys"))
db, err := dbm.NewGoLevelDBWithOpts(KeyDBName, filepath.Join(rootDir, "keys"), o)
if err != nil {
return nil, err
}
+1 -1
View File
@@ -94,7 +94,7 @@ func GetKeyBase(t *testing.T) crkeys.Keybase {
viper.Set(cli.HomeFlag, dir)
keybase, err := keys.GetKeyBase()
keybase, err := keys.GetKeyBaseWithWritePerm()
require.NoError(t, err)
return keybase