mirror of
https://github.com/fluencelabs/tendermint
synced 2025-06-23 01:41:31 +00:00
Fix config bug where chain_id is default magic. Always read from genesis
This commit is contained in:
@ -50,7 +50,9 @@ func main() {
|
|||||||
fmt.Printf("New Barak Process (PID: %d)\n", os.Getpid())
|
fmt.Printf("New Barak Process (PID: %d)\n", os.Getpid())
|
||||||
|
|
||||||
// Apply bare tendermint/* configuration.
|
// Apply bare tendermint/* configuration.
|
||||||
cfg.ApplyConfig(cfg.MapConfig(map[string]interface{}{"log_level": "info"}))
|
config := cfg.NewMapConfig(nil)
|
||||||
|
config.Set("log_level", "info")
|
||||||
|
cfg.ApplyConfig(config)
|
||||||
|
|
||||||
// Read options
|
// Read options
|
||||||
optionsFile := parseFlags()
|
optionsFile := parseFlags()
|
||||||
|
@ -35,7 +35,9 @@ func main() {
|
|||||||
fmt.Printf("New Debora Process (PID: %d)\n", os.Getpid())
|
fmt.Printf("New Debora Process (PID: %d)\n", os.Getpid())
|
||||||
|
|
||||||
// Apply bare tendermint/* configuration.
|
// Apply bare tendermint/* configuration.
|
||||||
cfg.ApplyConfig(cfg.MapConfig(map[string]interface{}{"log_level": "notice"}))
|
config := cfg.NewMapConfig(nil)
|
||||||
|
config.Set("log_level", "notice")
|
||||||
|
cfg.ApplyConfig(config)
|
||||||
|
|
||||||
rootDir := os.Getenv("DEBROOT")
|
rootDir := os.Getenv("DEBROOT")
|
||||||
if rootDir == "" {
|
if rootDir == "" {
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
package config
|
package config
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/tendermint/tendermint/Godeps/_workspace/src/github.com/naoina/toml"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
. "github.com/tendermint/tendermint/common"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Config interface {
|
type Config interface {
|
||||||
@ -19,28 +22,66 @@ type Config interface {
|
|||||||
Set(key string, value interface{})
|
Set(key string, value interface{})
|
||||||
}
|
}
|
||||||
|
|
||||||
type MapConfig map[string]interface{}
|
type MapConfig struct {
|
||||||
|
required map[string]struct{} // blows up if trying to use before setting.
|
||||||
|
data map[string]interface{}
|
||||||
|
}
|
||||||
|
|
||||||
func (cfg MapConfig) Get(key string) interface{} { return cfg[key] }
|
func ReadMapConfigFromFile(filePath string) (MapConfig, error) {
|
||||||
func (cfg MapConfig) GetBool(key string) bool { return cfg[key].(bool) }
|
var configData = make(map[string]interface{})
|
||||||
func (cfg MapConfig) GetFloat64(key string) float64 { return cfg[key].(float64) }
|
fileBytes := MustReadFile(filePath)
|
||||||
func (cfg MapConfig) GetInt(key string) int { return cfg[key].(int) }
|
err := toml.Unmarshal(fileBytes, configData)
|
||||||
func (cfg MapConfig) GetString(key string) string { return cfg[key].(string) }
|
if err != nil {
|
||||||
|
return MapConfig{}, err
|
||||||
|
}
|
||||||
|
return NewMapConfig(configData), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewMapConfig(data map[string]interface{}) MapConfig {
|
||||||
|
if data == nil {
|
||||||
|
data = make(map[string]interface{})
|
||||||
|
}
|
||||||
|
return MapConfig{
|
||||||
|
required: make(map[string]struct{}),
|
||||||
|
data: data,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cfg MapConfig) Get(key string) interface{} {
|
||||||
|
if _, ok := cfg.required[key]; ok {
|
||||||
|
PanicSanity(Fmt("config key %v is required but was not set.", key))
|
||||||
|
}
|
||||||
|
return cfg.data[key]
|
||||||
|
}
|
||||||
|
func (cfg MapConfig) GetBool(key string) bool { return cfg.Get(key).(bool) }
|
||||||
|
func (cfg MapConfig) GetFloat64(key string) float64 { return cfg.Get(key).(float64) }
|
||||||
|
func (cfg MapConfig) GetInt(key string) int { return cfg.Get(key).(int) }
|
||||||
|
func (cfg MapConfig) GetString(key string) string { return cfg.Get(key).(string) }
|
||||||
func (cfg MapConfig) GetStringMap(key string) map[string]interface{} {
|
func (cfg MapConfig) GetStringMap(key string) map[string]interface{} {
|
||||||
return cfg[key].(map[string]interface{})
|
return cfg.Get(key).(map[string]interface{})
|
||||||
}
|
}
|
||||||
func (cfg MapConfig) GetStringMapString(key string) map[string]string {
|
func (cfg MapConfig) GetStringMapString(key string) map[string]string {
|
||||||
return cfg[key].(map[string]string)
|
return cfg.Get(key).(map[string]string)
|
||||||
|
}
|
||||||
|
func (cfg MapConfig) GetStringSlice(key string) []string { return cfg.Get(key).([]string) }
|
||||||
|
func (cfg MapConfig) GetTime(key string) time.Time { return cfg.Get(key).(time.Time) }
|
||||||
|
func (cfg MapConfig) IsSet(key string) bool { _, ok := cfg.data[key]; return ok }
|
||||||
|
func (cfg MapConfig) Set(key string, value interface{}) {
|
||||||
|
delete(cfg.required, key)
|
||||||
|
cfg.data[key] = value
|
||||||
}
|
}
|
||||||
func (cfg MapConfig) GetStringSlice(key string) []string { return cfg[key].([]string) }
|
|
||||||
func (cfg MapConfig) GetTime(key string) time.Time { return cfg[key].(time.Time) }
|
|
||||||
func (cfg MapConfig) IsSet(key string) bool { _, ok := cfg[key]; return ok }
|
|
||||||
func (cfg MapConfig) Set(key string, value interface{}) { cfg[key] = value }
|
|
||||||
func (cfg MapConfig) SetDefault(key string, value interface{}) {
|
func (cfg MapConfig) SetDefault(key string, value interface{}) {
|
||||||
|
delete(cfg.required, key)
|
||||||
if cfg.IsSet(key) {
|
if cfg.IsSet(key) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
cfg[key] = value
|
cfg.data[key] = value
|
||||||
|
}
|
||||||
|
func (cfg MapConfig) SetRequired(key string) {
|
||||||
|
if cfg.IsSet(key) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
cfg.required[key] = struct{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package tendermint
|
package tendermint
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/tendermint/tendermint/Godeps/_workspace/src/github.com/naoina/toml"
|
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
"strings"
|
||||||
@ -38,10 +37,8 @@ func GetConfig(rootDir string) cfg.Config {
|
|||||||
rootDir = getTMRoot(rootDir)
|
rootDir = getTMRoot(rootDir)
|
||||||
initTMRoot(rootDir)
|
initTMRoot(rootDir)
|
||||||
|
|
||||||
var mapConfig = cfg.MapConfig(make(map[string]interface{}))
|
|
||||||
configFilePath := path.Join(rootDir, "config.toml")
|
configFilePath := path.Join(rootDir, "config.toml")
|
||||||
configFileBytes := MustReadFile(configFilePath)
|
mapConfig, err := cfg.ReadMapConfigFromFile(configFilePath)
|
||||||
err := toml.Unmarshal(configFileBytes, mapConfig)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Exit(Fmt("Could not read config: %v", err))
|
Exit(Fmt("Could not read config: %v", err))
|
||||||
}
|
}
|
||||||
@ -53,7 +50,7 @@ func GetConfig(rootDir string) cfg.Config {
|
|||||||
if mapConfig.IsSet("revision_file") {
|
if mapConfig.IsSet("revision_file") {
|
||||||
Exit("Cannot set 'revision_file' via config.toml. It must match what's in the Makefile")
|
Exit("Cannot set 'revision_file' via config.toml. It must match what's in the Makefile")
|
||||||
}
|
}
|
||||||
mapConfig.SetDefault("chain_id", "tendermint_testnet_11.c") // TODO ALSO UPDATE GENESIS BELOW!!!
|
mapConfig.SetRequired("chain_id") // blows up if you try to use it before setting.
|
||||||
mapConfig.SetDefault("genesis_file", rootDir+"/genesis.json")
|
mapConfig.SetDefault("genesis_file", rootDir+"/genesis.json")
|
||||||
mapConfig.SetDefault("moniker", "anonymous")
|
mapConfig.SetDefault("moniker", "anonymous")
|
||||||
mapConfig.SetDefault("node_laddr", "0.0.0.0:46656")
|
mapConfig.SetDefault("node_laddr", "0.0.0.0:46656")
|
||||||
@ -73,12 +70,6 @@ func GetConfig(rootDir string) cfg.Config {
|
|||||||
return mapConfig
|
return mapConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
func ensureDefault(mapConfig cfg.MapConfig, key string, value interface{}) {
|
|
||||||
if !mapConfig.IsSet(key) {
|
|
||||||
mapConfig[key] = value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var defaultConfigTmpl = `# This is a TOML config file.
|
var defaultConfigTmpl = `# This is a TOML config file.
|
||||||
# For more information, see https://github.com/toml-lang/toml
|
# For more information, see https://github.com/toml-lang/toml
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
package tendermint_test
|
package tendermint_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/tendermint/tendermint/Godeps/_workspace/src/github.com/naoina/toml"
|
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
"strings"
|
||||||
@ -47,10 +46,8 @@ func GetConfig(rootDir string) cfg.Config {
|
|||||||
rootDir = getTMRoot(rootDir)
|
rootDir = getTMRoot(rootDir)
|
||||||
initTMRoot(rootDir)
|
initTMRoot(rootDir)
|
||||||
|
|
||||||
var mapConfig = cfg.MapConfig(make(map[string]interface{}))
|
|
||||||
configFilePath := path.Join(rootDir, "config.toml")
|
configFilePath := path.Join(rootDir, "config.toml")
|
||||||
configFileBytes := MustReadFile(configFilePath)
|
mapConfig, err := cfg.ReadMapConfigFromFile(configFilePath)
|
||||||
err := toml.Unmarshal(configFileBytes, mapConfig)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Exit(Fmt("Could not read config: %v", err))
|
Exit(Fmt("Could not read config: %v", err))
|
||||||
}
|
}
|
||||||
@ -78,12 +75,6 @@ func GetConfig(rootDir string) cfg.Config {
|
|||||||
return mapConfig
|
return mapConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
func ensureDefault(mapConfig cfg.MapConfig, key string, value interface{}) {
|
|
||||||
if !mapConfig.IsSet(key) {
|
|
||||||
mapConfig[key] = value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var defaultConfigTmpl = `# This is a TOML config file.
|
var defaultConfigTmpl = `# This is a TOML config file.
|
||||||
# For more information, see https://github.com/toml-lang/toml
|
# For more information, see https://github.com/toml-lang/toml
|
||||||
|
|
||||||
|
11
node/node.go
11
node/node.go
@ -2,6 +2,7 @@ package node
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"io/ioutil"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -297,6 +298,16 @@ func RunNode() {
|
|||||||
if FileExists(genDocFile) {
|
if FileExists(genDocFile) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
jsonBlob, err := ioutil.ReadFile(genDocFile)
|
||||||
|
if err != nil {
|
||||||
|
Exit(Fmt("Couldn't read GenesisDoc file: %v", err))
|
||||||
|
}
|
||||||
|
genDoc := stypes.GenesisDocFromJSON(jsonBlob)
|
||||||
|
if genDoc.ChainID == "" {
|
||||||
|
PanicSanity(Fmt("Genesis doc %v must include non-empty chain_id", genDocFile))
|
||||||
|
}
|
||||||
|
config.Set("chain_id", genDoc.ChainID)
|
||||||
|
config.Set("genesis_doc", genDoc)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user