support tmsp via grpc

This commit is contained in:
Ethan Buchman 2016-05-23 14:36:00 -04:00
parent 7383ead106
commit 2a1e7a427d
6 changed files with 33 additions and 24 deletions

View File

@ -18,6 +18,7 @@ func parseFlags(config cfg.Config, args []string) {
rpcLaddr string rpcLaddr string
logLevel string logLevel string
proxyApp string proxyApp string
tmspTransport string
) )
// Declare flags // Declare flags
@ -32,6 +33,7 @@ func parseFlags(config cfg.Config, args []string) {
flags.StringVar(&logLevel, "log_level", config.GetString("log_level"), "Log level") flags.StringVar(&logLevel, "log_level", config.GetString("log_level"), "Log level")
flags.StringVar(&proxyApp, "proxy_app", config.GetString("proxy_app"), flags.StringVar(&proxyApp, "proxy_app", config.GetString("proxy_app"),
"Proxy app address, or 'nilapp' or 'dummy' for local testing.") "Proxy app address, or 'nilapp' or 'dummy' for local testing.")
flags.StringVar(&tmspTransport, "tmsp", config.GetString("tmsp"), "Specify tmsp transport (socket | grpc)")
flags.Parse(args) flags.Parse(args)
if printHelp { if printHelp {
flags.PrintDefaults() flags.PrintDefaults()
@ -47,4 +49,5 @@ func parseFlags(config cfg.Config, args []string) {
config.Set("rpc_laddr", rpcLaddr) config.Set("rpc_laddr", rpcLaddr)
config.Set("log_level", logLevel) config.Set("log_level", logLevel)
config.Set("proxy_app", proxyApp) config.Set("proxy_app", proxyApp)
config.Set("tmsp", tmspTransport)
} }

View File

@ -53,6 +53,7 @@ func GetConfig(rootDir string) cfg.Config {
mapConfig.SetRequired("chain_id") // blows up if you try to use it before setting. 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("proxy_app", "tcp://127.0.0.1:46658") mapConfig.SetDefault("proxy_app", "tcp://127.0.0.1:46658")
mapConfig.SetDefault("tmsp", "socket")
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")
mapConfig.SetDefault("seeds", "") mapConfig.SetDefault("seeds", "")

View File

@ -68,6 +68,7 @@ func ResetConfig(localPath string) cfg.Config {
mapConfig.SetDefault("chain_id", "tendermint_test") mapConfig.SetDefault("chain_id", "tendermint_test")
mapConfig.SetDefault("genesis_file", rootDir+"/genesis.json") mapConfig.SetDefault("genesis_file", rootDir+"/genesis.json")
mapConfig.SetDefault("proxy_app", "dummy") mapConfig.SetDefault("proxy_app", "dummy")
mapConfig.SetDefault("tmsp", "socket")
mapConfig.SetDefault("moniker", "anonymous") mapConfig.SetDefault("moniker", "anonymous")
mapConfig.SetDefault("node_laddr", "0.0.0.0:36656") mapConfig.SetDefault("node_laddr", "0.0.0.0:36656")
mapConfig.SetDefault("fast_sync", false) mapConfig.SetDefault("fast_sync", false)

View File

@ -47,7 +47,7 @@ type Node struct {
privKey crypto.PrivKeyEd25519 privKey crypto.PrivKeyEd25519
} }
func NewNode(config cfg.Config, privValidator *types.PrivValidator, getProxyApp func(proxyAddr string, appHash []byte) proxy.AppConn) *Node { func NewNode(config cfg.Config, privValidator *types.PrivValidator, getProxyApp func(proxyAddr, transport string, appHash []byte) proxy.AppConn) *Node {
EnsureDir(config.GetString("db_dir"), 0700) // incase we use memdb, cswal still gets written here EnsureDir(config.GetString("db_dir"), 0700) // incase we use memdb, cswal still gets written here
@ -64,8 +64,9 @@ func NewNode(config cfg.Config, privValidator *types.PrivValidator, getProxyApp
// Create two proxyAppConn connections, // Create two proxyAppConn connections,
// one for the consensus and one for the mempool. // one for the consensus and one for the mempool.
proxyAddr := config.GetString("proxy_app") proxyAddr := config.GetString("proxy_app")
proxyAppConnMempool := getProxyApp(proxyAddr, state.AppHash) transport := config.GetString("tmsp")
proxyAppConnConsensus := getProxyApp(proxyAddr, state.AppHash) proxyAppConnMempool := getProxyApp(proxyAddr, transport, state.AppHash)
proxyAppConnConsensus := getProxyApp(proxyAddr, transport, state.AppHash)
// add the chainid and number of validators to the global config // add the chainid and number of validators to the global config
config.Set("chain_id", state.ChainID) config.Set("chain_id", state.ChainID)
@ -268,7 +269,7 @@ func makeNodeInfo(config cfg.Config, sw *p2p.Switch, privKey crypto.PrivKeyEd255
// Get a connection to the proxyAppConn addr. // Get a connection to the proxyAppConn addr.
// Check the current hash, and panic if it doesn't match. // Check the current hash, and panic if it doesn't match.
func GetProxyApp(addr string, hash []byte) (proxyAppConn proxy.AppConn) { func GetProxyApp(addr, transport string, hash []byte) (proxyAppConn proxy.AppConn) {
// use local app (for testing) // use local app (for testing)
switch addr { switch addr {
case "nilapp": case "nilapp":
@ -281,7 +282,7 @@ func GetProxyApp(addr string, hash []byte) (proxyAppConn proxy.AppConn) {
proxyAppConn = tmspcli.NewLocalClient(mtx, app) proxyAppConn = tmspcli.NewLocalClient(mtx, app)
default: default:
// Run forever in a loop // Run forever in a loop
remoteApp, err := proxy.NewRemoteAppConn(addr) remoteApp, err := proxy.NewRemoteAppConn(addr, transport)
if err != nil { if err != nil {
Exit(Fmt("Failed to connect to proxy for mempool: %v", err)) Exit(Fmt("Failed to connect to proxy for mempool: %v", err))
} }
@ -397,8 +398,9 @@ func newConsensusState(config cfg.Config) *consensus.ConsensusState {
// Create two proxyAppConn connections, // Create two proxyAppConn connections,
// one for the consensus and one for the mempool. // one for the consensus and one for the mempool.
proxyAddr := config.GetString("proxy_app") proxyAddr := config.GetString("proxy_app")
proxyAppConnMempool := GetProxyApp(proxyAddr, state.AppHash) transport := config.GetString("tmsp")
proxyAppConnConsensus := GetProxyApp(proxyAddr, state.AppHash) proxyAppConnMempool := GetProxyApp(proxyAddr, transport, state.AppHash)
proxyAppConnConsensus := GetProxyApp(proxyAddr, transport, state.AppHash)
// add the chainid to the global config // add the chainid to the global config
config.Set("chain_id", state.ChainID) config.Set("chain_id", state.ChainID)

View File

@ -11,8 +11,8 @@ type remoteAppConn struct {
tmspcli.Client tmspcli.Client
} }
func NewRemoteAppConn(addr string) (*remoteAppConn, error) { func NewRemoteAppConn(addr, transport string) (*remoteAppConn, error) {
client, err := tmspcli.NewClient(addr, false) client, err := tmspcli.NewClient(addr, transport, false)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -9,17 +9,19 @@ import (
"github.com/tendermint/tmsp/server" "github.com/tendermint/tmsp/server"
) )
var SOCKET = "socket"
func TestEcho(t *testing.T) { func TestEcho(t *testing.T) {
sockPath := Fmt("unix:///tmp/echo_%v.sock", RandStr(6)) sockPath := Fmt("unix:///tmp/echo_%v.sock", RandStr(6))
// Start server // Start server
s, err := server.NewServer(sockPath, dummy.NewDummyApplication()) s, err := server.NewSocketServer(sockPath, dummy.NewDummyApplication())
if err != nil { if err != nil {
Exit(err.Error()) Exit(err.Error())
} }
defer s.Stop() defer s.Stop()
// Start client // Start client
proxy, err := NewRemoteAppConn(sockPath) proxy, err := NewRemoteAppConn(sockPath, SOCKET)
if err != nil { if err != nil {
Exit(err.Error()) Exit(err.Error())
} else { } else {
@ -36,13 +38,13 @@ func BenchmarkEcho(b *testing.B) {
b.StopTimer() // Initialize b.StopTimer() // Initialize
sockPath := Fmt("unix:///tmp/echo_%v.sock", RandStr(6)) sockPath := Fmt("unix:///tmp/echo_%v.sock", RandStr(6))
// Start server // Start server
s, err := server.NewServer(sockPath, dummy.NewDummyApplication()) s, err := server.NewSocketServer(sockPath, dummy.NewDummyApplication())
if err != nil { if err != nil {
Exit(err.Error()) Exit(err.Error())
} }
defer s.Stop() defer s.Stop()
// Start client // Start client
proxy, err := NewRemoteAppConn(sockPath) proxy, err := NewRemoteAppConn(sockPath, SOCKET)
if err != nil { if err != nil {
Exit(err.Error()) Exit(err.Error())
} else { } else {
@ -64,13 +66,13 @@ func BenchmarkEcho(b *testing.B) {
func TestInfo(t *testing.T) { func TestInfo(t *testing.T) {
sockPath := Fmt("unix:///tmp/echo_%v.sock", RandStr(6)) sockPath := Fmt("unix:///tmp/echo_%v.sock", RandStr(6))
// Start server // Start server
s, err := server.NewServer(sockPath, dummy.NewDummyApplication()) s, err := server.NewSocketServer(sockPath, dummy.NewDummyApplication())
if err != nil { if err != nil {
Exit(err.Error()) Exit(err.Error())
} }
defer s.Stop() defer s.Stop()
// Start client // Start client
proxy, err := NewRemoteAppConn(sockPath) proxy, err := NewRemoteAppConn(sockPath, SOCKET)
if err != nil { if err != nil {
Exit(err.Error()) Exit(err.Error())
} else { } else {