mirror of
https://github.com/tendermint/tendermint.git
synced 2026-02-04 02:52:07 +00:00
PR feedback fixes
This commit is contained in:
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
28
node/rpc.go
28
node/rpc.go
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user