From 8b80f8ee05d530dd1ed6398f3b9c34ec356f243d Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Wed, 30 Nov 2016 22:58:47 -0500 Subject: [PATCH] feature flag: pex reactor --- cmd/tendermint/flags.go | 10 ++++++++++ config/tendermint/config.go | 2 ++ config/tendermint_test/config.go | 2 ++ glide.lock | 2 +- node/node.go | 9 +++++++++ 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/cmd/tendermint/flags.go b/cmd/tendermint/flags.go index 1765cc54..70791792 100644 --- a/cmd/tendermint/flags.go +++ b/cmd/tendermint/flags.go @@ -19,11 +19,15 @@ func parseFlags(config cfg.Config, args []string) { logLevel string proxyApp string tmspTransport string + + pex bool ) // Declare flags var flags = flag.NewFlagSet("main", flag.ExitOnError) flags.BoolVar(&printHelp, "help", false, "Print this help message.") + + // configuration options flags.StringVar(&moniker, "moniker", config.GetString("moniker"), "Node Name") flags.StringVar(&nodeLaddr, "node_laddr", config.GetString("node_laddr"), "Node listen address. (0.0.0.0:0 means any interface, any port)") flags.StringVar(&seeds, "seeds", config.GetString("seeds"), "Comma delimited host:port seed nodes") @@ -34,6 +38,10 @@ func parseFlags(config cfg.Config, args []string) { flags.StringVar(&proxyApp, "proxy_app", config.GetString("proxy_app"), "Proxy app address, or 'nilapp' or 'dummy' for local testing.") flags.StringVar(&tmspTransport, "tmsp", config.GetString("tmsp"), "Specify tmsp transport (socket | grpc)") + + // feature flags + flags.BoolVar(&pex, "pex", config.GetBool("pex_reactor"), "Enable Peer-Exchange (dev feature)") + flags.Parse(args) if printHelp { flags.PrintDefaults() @@ -50,4 +58,6 @@ func parseFlags(config cfg.Config, args []string) { config.Set("log_level", logLevel) config.Set("proxy_app", proxyApp) config.Set("tmsp", tmspTransport) + + config.Set("pex_reactor", pex) } diff --git a/config/tendermint/config.go b/config/tendermint/config.go index 465297ba..2b22f232 100644 --- a/config/tendermint/config.go +++ b/config/tendermint/config.go @@ -61,6 +61,8 @@ func GetConfig(rootDir string) cfg.Config { mapConfig.SetDefault("fast_sync", true) mapConfig.SetDefault("skip_upnp", false) mapConfig.SetDefault("addrbook_file", rootDir+"/addrbook.json") + mapConfig.SetDefault("addrbook_strict", true) // disable to allow connections locally + mapConfig.SetDefault("pex_reactor", false) // enable for peer exchange mapConfig.SetDefault("priv_validator_file", rootDir+"/priv_validator.json") mapConfig.SetDefault("db_backend", "leveldb") mapConfig.SetDefault("db_dir", rootDir+"/data") diff --git a/config/tendermint_test/config.go b/config/tendermint_test/config.go index 6f321747..a14c6b05 100644 --- a/config/tendermint_test/config.go +++ b/config/tendermint_test/config.go @@ -74,6 +74,8 @@ func ResetConfig(localPath string) cfg.Config { mapConfig.SetDefault("fast_sync", false) mapConfig.SetDefault("skip_upnp", true) mapConfig.SetDefault("addrbook_file", rootDir+"/addrbook.json") + mapConfig.SetDefault("addrbook_strict", true) // disable to allow connections locally + mapConfig.SetDefault("pex_reactor", false) // enable for peer exchange mapConfig.SetDefault("priv_validator_file", rootDir+"/priv_validator.json") mapConfig.SetDefault("db_backend", "memdb") mapConfig.SetDefault("db_dir", rootDir+"/data") diff --git a/glide.lock b/glide.lock index 39ead086..d125cb3d 100644 --- a/glide.lock +++ b/glide.lock @@ -70,7 +70,7 @@ imports: - name: github.com/tendermint/go-merkle version: 05042c6ab9cad51d12e4cecf717ae68e3b1409a8 - name: github.com/tendermint/go-p2p - version: 1eb390680d33299ba0e3334490eca587efd18414 + version: 2cee3646927182964268e63c4248db3def69ac4e subpackages: - upnp - name: github.com/tendermint/go-rpc diff --git a/node/node.go b/node/node.go index bb191b55..1f75b572 100644 --- a/node/node.go +++ b/node/node.go @@ -115,6 +115,15 @@ func NewNode(config cfg.Config, privValidator *types.PrivValidator, clientCreato sw.AddReactor("BLOCKCHAIN", bcReactor) sw.AddReactor("CONSENSUS", consensusReactor) + // Optionally, start the pex reactor + // TODO: this is a dev feature, it needs some love + if config.GetBool("pex_reactor") { + addrBook := p2p.NewAddrBook(config.GetString("addrbook_file"), config.GetBool("addrbook_strict")) + addrBook.Start() + pexReactor := p2p.NewPEXReactor(addrBook) + sw.AddReactor("PEX", pexReactor) + } + // filter peers by addr or pubkey with a tmsp query. // if the query return code is OK, add peer // XXX: query format subject to change