Browse Source

[config] RPCConfig

pull/516/head
Ethan Buchman 8 years ago
parent
commit
fc6611b2d9
4 changed files with 67 additions and 23 deletions
  1. +3
    -4
      cmd/tendermint/commands/run_node.go
  2. +53
    -12
      config/config.go
  3. +7
    -3
      config/toml.go
  4. +4
    -4
      node/node.go

+ 3
- 4
cmd/tendermint/commands/run_node.go View File

@ -30,15 +30,14 @@ func init() {
runNodeCmd.Flags().String("abci", config.ABCI, "Specify abci transport (socket | grpc)") runNodeCmd.Flags().String("abci", config.ABCI, "Specify abci transport (socket | grpc)")
// rpc flags // rpc flags
runNodeCmd.Flags().String("rpc_laddr", config.RPCListenAddress, "RPC listen address. Port required")
runNodeCmd.Flags().String("grpc_laddr", config.GRPCListenAddress, "GRPC listen address (BroadcastTx only). Port required")
runNodeCmd.Flags().String("rpc.laddr", config.RPC.ListenAddress, "RPC listen address. Port required")
runNodeCmd.Flags().String("rpc.grpc_laddr", config.RPC.GRPCListenAddress, "GRPC listen address (BroadcastTx only). Port required")
runNodeCmd.Flags().Bool("rpc.unsafe", config.RPC.Unsafe, "Enabled unsafe rpc methods")
// p2p flags // p2p flags
runNodeCmd.Flags().String("p2p.laddr", config.P2P.ListenAddress, "Node listen address. (0.0.0.0:0 means any interface, any port)") runNodeCmd.Flags().String("p2p.laddr", config.P2P.ListenAddress, "Node listen address. (0.0.0.0:0 means any interface, any port)")
runNodeCmd.Flags().String("p2p.seeds", config.P2P.Seeds, "Comma delimited host:port seed nodes") runNodeCmd.Flags().String("p2p.seeds", config.P2P.Seeds, "Comma delimited host:port seed nodes")
runNodeCmd.Flags().Bool("p2p.skip_upnp", config.P2P.SkipUPNP, "Skip UPNP configuration") runNodeCmd.Flags().Bool("p2p.skip_upnp", config.P2P.SkipUPNP, "Skip UPNP configuration")
// feature flags
runNodeCmd.Flags().Bool("p2p.pex", config.P2P.PexReactor, "Enable Peer-Exchange (dev feature)") runNodeCmd.Flags().Bool("p2p.pex", config.P2P.PexReactor, "Enable Peer-Exchange (dev feature)")
RootCmd.AddCommand(runNodeCmd) RootCmd.AddCommand(runNodeCmd)


+ 53
- 12
config/config.go View File

@ -12,6 +12,7 @@ type Config struct {
BaseConfig `mapstructure:",squash"` BaseConfig `mapstructure:",squash"`
// Options for services // Options for services
RPC *RPCConfig `mapstructure:"rpc"`
P2P *P2PConfig `mapstructure:"p2p"` P2P *P2PConfig `mapstructure:"p2p"`
Mempool *MempoolConfig `mapstructure:"mempool"` Mempool *MempoolConfig `mapstructure:"mempool"`
Consensus *ConsensusConfig `mapstructure:"consensus"` Consensus *ConsensusConfig `mapstructure:"consensus"`
@ -20,6 +21,7 @@ type Config struct {
func DefaultConfig() *Config { func DefaultConfig() *Config {
return &Config{ return &Config{
BaseConfig: DefaultBaseConfig(), BaseConfig: DefaultBaseConfig(),
RPC: DefaultRPCConfig(),
P2P: DefaultP2PConfig(), P2P: DefaultP2PConfig(),
Mempool: DefaultMempoolConfig(), Mempool: DefaultMempoolConfig(),
Consensus: DefaultConsensusConfig(), Consensus: DefaultConsensusConfig(),
@ -29,6 +31,7 @@ func DefaultConfig() *Config {
func TestConfig() *Config { func TestConfig() *Config {
return &Config{ return &Config{
BaseConfig: TestBaseConfig(), BaseConfig: TestBaseConfig(),
RPC: TestRPCConfig(),
P2P: TestP2PConfig(), P2P: TestP2PConfig(),
Mempool: DefaultMempoolConfig(), Mempool: DefaultMempoolConfig(),
Consensus: TestConsensusConfig(), Consensus: TestConsensusConfig(),
@ -38,12 +41,16 @@ func TestConfig() *Config {
// Set the RootDir for all Config structs // Set the RootDir for all Config structs
func (cfg *Config) SetRoot(root string) *Config { func (cfg *Config) SetRoot(root string) *Config {
cfg.BaseConfig.RootDir = root cfg.BaseConfig.RootDir = root
cfg.RPC.RootDir = root
cfg.P2P.RootDir = root cfg.P2P.RootDir = root
cfg.Mempool.RootDir = root cfg.Mempool.RootDir = root
cfg.Consensus.RootDir = root cfg.Consensus.RootDir = root
return cfg return cfg
} }
//-----------------------------------------------------------------------------
// BaseConfig
// BaseConfig struct for a Tendermint node // BaseConfig struct for a Tendermint node
type BaseConfig struct { type BaseConfig struct {
// The root directory for all data. // The root directory for all data.
@ -92,13 +99,6 @@ type BaseConfig struct {
// Database directory // Database directory
DBPath string `mapstructure:"db_dir"` DBPath string `mapstructure:"db_dir"`
// TCP or UNIX socket address for the RPC server to listen on
RPCListenAddress string `mapstructure:"rpc_laddr"`
// TCP or UNIX socket address for the gRPC server to listen on
// NOTE: This server only supports /broadcast_tx_commit
GRPCListenAddress string `mapstructure:"grpc_laddr"`
} }
func DefaultBaseConfig() BaseConfig { func DefaultBaseConfig() BaseConfig {
@ -108,15 +108,13 @@ func DefaultBaseConfig() BaseConfig {
Moniker: "anonymous", Moniker: "anonymous",
ProxyApp: "tcp://127.0.0.1:46658", ProxyApp: "tcp://127.0.0.1:46658",
ABCI: "socket", ABCI: "socket",
LogLevel: "info",
LogLevel: "state:info,*:error",
ProfListenAddress: "", ProfListenAddress: "",
FastSync: true, FastSync: true,
FilterPeers: false, FilterPeers: false,
TxIndex: "kv", TxIndex: "kv",
DBBackend: "leveldb", DBBackend: "leveldb",
DBPath: "data", DBPath: "data",
RPCListenAddress: "tcp://0.0.0.0:46657",
GRPCListenAddress: "",
} }
} }
@ -126,8 +124,6 @@ func TestBaseConfig() BaseConfig {
conf.ProxyApp = "dummy" conf.ProxyApp = "dummy"
conf.FastSync = false conf.FastSync = false
conf.DBBackend = "memdb" conf.DBBackend = "memdb"
conf.RPCListenAddress = "tcp://0.0.0.0:36657"
conf.GRPCListenAddress = "tcp://0.0.0.0:36658"
return conf return conf
} }
@ -143,6 +139,42 @@ func (b BaseConfig) DBDir() string {
return rootify(b.DBPath, b.RootDir) return rootify(b.DBPath, b.RootDir)
} }
//-----------------------------------------------------------------------------
// RPCConfig
type RPCConfig struct {
RootDir string `mapstructure:"home"`
// TCP or UNIX socket address for the RPC server to listen on
ListenAddress string `mapstructure:"laddr"`
// TCP or UNIX socket address for the gRPC server to listen on
// NOTE: This server only supports /broadcast_tx_commit
GRPCListenAddress string `mapstructure:"grpc_laddr"`
// Activate unsafe RPC commands like /dial_seeds and /unsafe_flush_mempool
Unsafe bool `mapstructure:"unsafe"`
}
func DefaultRPCConfig() *RPCConfig {
return &RPCConfig{
ListenAddress: "tcp://0.0.0.0:46657",
GRPCListenAddress: "",
Unsafe: false,
}
}
func TestRPCConfig() *RPCConfig {
conf := DefaultRPCConfig()
conf.ListenAddress = "tcp://0.0.0.0:36657"
conf.GRPCListenAddress = "tcp://0.0.0.0:36658"
conf.Unsafe = true
return conf
}
//-----------------------------------------------------------------------------
// P2PConfig
type P2PConfig struct { type P2PConfig struct {
RootDir string `mapstructure:"home"` RootDir string `mapstructure:"home"`
ListenAddress string `mapstructure:"laddr"` ListenAddress string `mapstructure:"laddr"`
@ -174,6 +206,9 @@ func (p *P2PConfig) AddrBookFile() string {
return rootify(p.AddrBook, p.RootDir) return rootify(p.AddrBook, p.RootDir)
} }
//-----------------------------------------------------------------------------
// MempoolConfig
type MempoolConfig struct { type MempoolConfig struct {
RootDir string `mapstructure:"home"` RootDir string `mapstructure:"home"`
Recheck bool `mapstructure:"recheck"` Recheck bool `mapstructure:"recheck"`
@ -195,6 +230,9 @@ func (m *MempoolConfig) WalDir() string {
return rootify(m.WalPath, m.RootDir) return rootify(m.WalPath, m.RootDir)
} }
//-----------------------------------------------------------------------------
// ConsensusConfig
// ConsensusConfig holds timeouts and details about the WAL, the block structure, // ConsensusConfig holds timeouts and details about the WAL, the block structure,
// and timeouts in the consensus protocol. // and timeouts in the consensus protocol.
type ConsensusConfig struct { type ConsensusConfig struct {
@ -286,6 +324,9 @@ func (c *ConsensusConfig) SetWalFile(walFile string) {
c.walFile = walFile c.walFile = walFile
} }
//-----------------------------------------------------------------------------
// Utils
// helper function to make config creation independent of root dir // helper function to make config creation independent of root dir
func rootify(path, root string) string { func rootify(path, root string) string {
if filepath.IsAbs(path) { if filepath.IsAbs(path) {


+ 7
- 3
config/toml.go View File

@ -32,8 +32,10 @@ proxy_app = "tcp://127.0.0.1:46658"
moniker = "__MONIKER__" moniker = "__MONIKER__"
fast_sync = true fast_sync = true
db_backend = "leveldb" db_backend = "leveldb"
log_level = "info"
rpc_laddr = "tcp://0.0.0.0:46657"
log_level = "state:info,*:error"
[rpc]
laddr = "tcp://0.0.0.0:46657"
[p2p] [p2p]
laddr = "tcp://0.0.0.0:46656" laddr = "tcp://0.0.0.0:46656"
@ -94,7 +96,9 @@ moniker = "__MONIKER__"
fast_sync = false fast_sync = false
db_backend = "memdb" db_backend = "memdb"
log_level = "info" log_level = "info"
rpc_laddr = "tcp://0.0.0.0:36657"
[rpc]
laddr = "tcp://0.0.0.0:36657"
[p2p] [p2p]
laddr = "tcp://0.0.0.0:36656" laddr = "tcp://0.0.0.0:36656"


+ 4
- 4
node/node.go View File

@ -255,7 +255,7 @@ func (n *Node) OnStart() error {
} }
// Run the RPC server // Run the RPC server
if n.config.RPCListenAddress != "" {
if n.config.RPC.ListenAddress != "" {
listeners, err := n.startRPC() listeners, err := n.startRPC()
if err != nil { if err != nil {
return err return err
@ -320,7 +320,7 @@ func (n *Node) ConfigureRPC() {
func (n *Node) startRPC() ([]net.Listener, error) { func (n *Node) startRPC() ([]net.Listener, error) {
n.ConfigureRPC() n.ConfigureRPC()
listenAddrs := strings.Split(n.config.RPCListenAddress, ",")
listenAddrs := strings.Split(n.config.RPC.ListenAddress, ",")
// we may expose the rpc over both a unix and tcp socket // we may expose the rpc over both a unix and tcp socket
listeners := make([]net.Listener, len(listenAddrs)) listeners := make([]net.Listener, len(listenAddrs))
@ -339,7 +339,7 @@ func (n *Node) startRPC() ([]net.Listener, error) {
} }
// we expose a simplified api over grpc for convenience to app devs // we expose a simplified api over grpc for convenience to app devs
grpcListenAddr := n.config.GRPCListenAddress
grpcListenAddr := n.config.RPC.GRPCListenAddress
if grpcListenAddr != "" { if grpcListenAddr != "" {
listener, err := grpccore.StartGRPCServer(grpcListenAddr) listener, err := grpccore.StartGRPCServer(grpcListenAddr)
if err != nil { if err != nil {
@ -421,7 +421,7 @@ func (n *Node) makeNodeInfo() *p2p.NodeInfo {
p2pListener := n.sw.Listeners()[0] p2pListener := n.sw.Listeners()[0]
p2pHost := p2pListener.ExternalAddress().IP.String() p2pHost := p2pListener.ExternalAddress().IP.String()
p2pPort := p2pListener.ExternalAddress().Port p2pPort := p2pListener.ExternalAddress().Port
rpcListenAddr := n.config.RPCListenAddress
rpcListenAddr := n.config.RPC.ListenAddress
// We assume that the rpcListener has the same ExternalAddress. // We assume that the rpcListener has the same ExternalAddress.
// This is probably true because both P2P and RPC listeners use UPnP, // This is probably true because both P2P and RPC listeners use UPnP,


Loading…
Cancel
Save