PR feedback fixes

This commit is contained in:
William Banfield
2021-08-02 12:50:13 -04:00
parent df669c7bed
commit 03ee71eac4
6 changed files with 24 additions and 36 deletions

View File

@@ -13,11 +13,12 @@ import (
"github.com/tendermint/tendermint/types"
)
// Debug is a type useful for debugging tendermint problems.
// Tendermint nodes will shutdown if a divergent hash is detected. Once in this
// state, they will not start up again. Debug runs just an RPC server on the
// tendermint data stores without running any other components. This way a user
// can query the RPC server to diagnose the issue that caused a crash to begin with.
// Debug manages an RPC service that exports methods to debug a failed node.
// After a node shuts down due to a consensus failure,, it will no longer start
// up and cannot easily be inspected. A Debug value provides a similar interface
// to the node, using the underlying Tendermint data stores, without bringing up
// any other components. A caller can query the Debug service to inspect the
// persisted state and debug the failure.
type Debug struct {
service.BaseService
@@ -35,6 +36,9 @@ func NewDebugFromConfig(cfg *config.Config) (*Debug, error) {
}
blockStore := store.NewBlockStore(blockStoreDB)
stateDB, err := config.DefaultDBProvider(&config.DBContext{ID: _stateStoreID, Config: cfg})
if err != nil {
return nil, err
}
stateStore := sm.NewStore(stateDB)
return NewDebug(cfg.RPC, blockStore, stateStore), nil
@@ -63,7 +67,7 @@ func (debug *Debug) OnStart() error {
}
routes := rpcCoreEnv.InfoRoutes()
l := log.MustNewDefaultLogger(log.LogFormatPlain, log.LogLevelInfo, false)
listeners, err := startHTTPRPCServer(debug.rpcConfig, l, routes, types.NopEventBus{})
listeners, err := startRPCServers(debug.rpcConfig, l, routes, types.NopEventBus{})
if err != nil {
return err
}
@@ -72,7 +76,7 @@ func (debug *Debug) OnStart() error {
}
func (debug *Debug) OnStop() {
for _, listener := range debug.listeners {
listener.Close()
for i := len(debug.listeners) - 1; i >= 0; i-- {
debug.listeners[i].Close()
}
}

View File

@@ -579,7 +579,7 @@ func (n *nodeImpl) OnStart() error {
routes = rpccore.CombineRoutes(routes, env.UnsafeRoutes())
}
listeners, err := startHTTPRPCServer(n.config.RPC, env.Logger, routes, n.eventBus)
listeners, err := startRPCServers(n.config.RPC, env.Logger, routes, n.eventBus)
if err != nil {
return err
}
@@ -591,7 +591,7 @@ func (n *nodeImpl) OnStart() error {
if err != nil {
return err
}
listener, err := startGRPCServer(n.config.RPC, env, env.Logger)
listener, err := startRPCServer(n.config.RPC, env, env.Logger)
if err != nil {
return err
}

View File

@@ -8,6 +8,7 @@ import (
"time"
"github.com/rs/cors"
cfg "github.com/tendermint/tendermint/config"
"github.com/tendermint/tendermint/libs/log"
tmpubsub "github.com/tendermint/tendermint/libs/pubsub"
@@ -18,9 +19,7 @@ import (
"github.com/tendermint/tendermint/types"
)
func startGRPCServer(rpcConfig *cfg.RPCConfig,
env *rpccore.Environment,
logger log.Logger) (net.Listener, error) {
func startRPCServer(rpcConfig *cfg.RPCConfig, env *rpccore.Environment, logger log.Logger) (net.Listener, error) {
// we expose a simplified api over grpc for convenience to app devs
listener, err := rpcserver.Listen(rpcConfig.GRPCListenAddress, rpcConfig.GRPCMaxOpenConnections)
if err != nil {
@@ -34,11 +33,7 @@ func startGRPCServer(rpcConfig *cfg.RPCConfig,
return listener, nil
}
func startHTTPRPCServer(rpcConfig *cfg.RPCConfig,
logger log.Logger,
routes rpccore.RoutesMap,
eventBus types.EventBusSubscriber) ([]net.Listener, error) {
func startRPCServers(rpcConfig *cfg.RPCConfig, logger log.Logger, routes rpccore.RoutesMap, eventBus types.EventBusSubscriber) ([]net.Listener, error) {
config := rpcserver.DefaultConfig()
config.MaxBodyBytes = rpcConfig.MaxBodyBytes
config.MaxHeaderBytes = rpcConfig.MaxHeaderBytes
@@ -58,6 +53,7 @@ func startHTTPRPCServer(rpcConfig *cfg.RPCConfig,
mux := http.NewServeMux()
registerWebsocketHandler(rpcConfig, mux, routes, logger, eventBus)
rpcserver.RegisterRPCFuncs(mux, routes, logger)
listenerAddr := listener.Addr().String()
var rootHandler http.Handler = mux
if rpcConfig.IsCorsEnabled() {
@@ -65,12 +61,10 @@ func startHTTPRPCServer(rpcConfig *cfg.RPCConfig,
}
if rpcConfig.IsTLSEnabled() {
go func() {
listenerAddr := listener.Addr().String()
keyFile := rpcConfig.KeyFile()
certFile := rpcConfig.CertFile()
logger.Info("RPC HTTPS server starting", "address", listenerAddr,
"certfile", certFile, "keyfile", keyFile)
err := rpcserver.ServeTLS(listener, rootHandler, keyFile, certFile, logger, config)
if !errors.Is(err, net.ErrClosed) {
logger.Error("RPC HTTPS server stopped with error", "address", listener, "err", err)
@@ -80,7 +74,6 @@ func startHTTPRPCServer(rpcConfig *cfg.RPCConfig,
}()
} else {
go func() {
listenerAddr := listener.Addr().String()
logger.Info("RPC HTTPS server starting", "address", listenerAddr)
err := rpcserver.Serve(listener, rootHandler, logger, config)
@@ -102,7 +95,12 @@ func listenersFromRPCConfig(rpcConfig *cfg.RPCConfig) ([]net.Listener, error) {
for i, listenAddr := range listenAddrs {
listener, err := rpcserver.Listen(listenAddr, rpcConfig.MaxOpenConnections)
if err != nil {
closeOpenListeners(listeners)
// close any listeners opened before returning
for _, l := range listeners {
if l != nil {
l.Close()
}
}
return nil, err
}
listeners[i] = listener
@@ -142,9 +140,3 @@ func addCORSHandler(rpcConfig *cfg.RPCConfig, h http.Handler) http.Handler {
}
return h
}
func closeOpenListeners(listeners []net.Listener) {
for _, listener := range listeners {
listener.Close()
}
}