From 9fadd7422a3f9e73cf984a7809e7c3493536869a Mon Sep 17 00:00:00 2001 From: Josh Klopfenstein Date: Tue, 12 Sep 2023 10:15:09 -0500 Subject: [PATCH] Revert "Make RPC concurrency configurable (#1214)" This reverts commit 2196b70dc1fd100d80344ad48b74a3f69cdc12da. --- cmd/juno/juno.go | 4 ---- cmd/juno/juno_test.go | 39 ++++++++++++++------------------------- node/node.go | 7 ++++--- node/node_test.go | 8 +++----- 4 files changed, 21 insertions(+), 37 deletions(-) diff --git a/cmd/juno/juno.go b/cmd/juno/juno.go index ff24f171b7..508e9e9579 100644 --- a/cmd/juno/juno.go +++ b/cmd/juno/juno.go @@ -49,7 +49,6 @@ const ( metricsPortF = "metrics-port" grpcF = "grpc" grpcPortF = "grpc-port" - rpcMaxConcurrencyF = "rpc-max-concurrency" defaultConfig = "" defaultHTTP = false @@ -69,7 +68,6 @@ const ( defaultMetricsPort = 9090 defaultGRPC = false defaultGRPCPort = 6064 - defaultRPCMaxConcurrency = 1024 configFlagUsage = "The yaml configuration file." logLevelFlagUsage = "Options: debug, info, warn, error." @@ -92,7 +90,6 @@ const ( metricsPortUsage = "The port on which the prometheus endpoint will listen for requests." grpcUsage = "Enable the HTTP GRPC server on the default port." grpcPortUsage = "The port on which the GRPC server will listen for requests." - rpcMaxConcurrencyUsage = "Maximum number of RPC requests to be handled concurrently" ) var Version string @@ -199,7 +196,6 @@ func NewCmd(config *node.Config, run func(*cobra.Command, []string) error) *cobr junoCmd.Flags().Uint16(metricsPortF, defaultMetricsPort, metricsPortUsage) junoCmd.Flags().Bool(grpcF, defaultGRPC, grpcUsage) junoCmd.Flags().Uint16(grpcPortF, defaultGRPCPort, grpcPortUsage) - junoCmd.Flags().Int(rpcMaxConcurrencyF, defaultRPCMaxConcurrency, rpcMaxConcurrencyUsage) return junoCmd } diff --git a/cmd/juno/juno_test.go b/cmd/juno/juno_test.go index 2ca46e1fdf..f45470af1f 100644 --- a/cmd/juno/juno_test.go +++ b/cmd/juno/juno_test.go @@ -36,7 +36,6 @@ func TestConfigPrecedence(t *testing.T) { defaultGRPCPort := uint16(6064) defaultColour := true defaultPendingPollInterval := time.Duration(0) - defaultRPCMaxConcurrency := 1024 tests := map[string]struct { cfgFile bool @@ -63,7 +62,6 @@ func TestConfigPrecedence(t *testing.T) { MetricsPort: defaultMetricsPort, Colour: defaultColour, PendingPollInterval: defaultPendingPollInterval, - RPCMaxConcurrency: defaultRPCMaxConcurrency, }, }, "config file path is empty string": { @@ -84,7 +82,6 @@ func TestConfigPrecedence(t *testing.T) { PprofPort: defaultPprofPort, Colour: defaultColour, PendingPollInterval: defaultPendingPollInterval, - RPCMaxConcurrency: defaultRPCMaxConcurrency, }, }, "config file doesn't exist": { @@ -109,7 +106,6 @@ func TestConfigPrecedence(t *testing.T) { PendingPollInterval: defaultPendingPollInterval, Pprof: defaultPprof, PprofPort: defaultPprofPort, - RPCMaxConcurrency: defaultRPCMaxConcurrency, }, }, "config file with all settings but without any other flags": { @@ -136,7 +132,6 @@ pprof: true PprofPort: defaultPprofPort, Colour: defaultColour, PendingPollInterval: defaultPendingPollInterval, - RPCMaxConcurrency: defaultRPCMaxConcurrency, }, }, "config file with some settings but without any other flags": { @@ -160,7 +155,6 @@ http-port: 4576 PprofPort: defaultPprofPort, Colour: defaultColour, PendingPollInterval: defaultPendingPollInterval, - RPCMaxConcurrency: defaultRPCMaxConcurrency, }, }, "all flags without config file": { @@ -169,21 +163,20 @@ http-port: 4576 "--db-path", "/home/.juno", "--network", "goerli", "--pprof", }, expectedConfig: &node.Config{ - LogLevel: utils.DEBUG, - HTTP: defaultHTTP, - HTTPPort: 4576, - Websocket: defaultWS, - WebsocketPort: defaultWSPort, - GRPC: defaultGRPC, - GRPCPort: defaultGRPCPort, - Metrics: defaultMetrics, - MetricsPort: defaultMetricsPort, - DatabasePath: "/home/.juno", - Network: utils.GOERLI, - Pprof: true, - PprofPort: defaultPprofPort, - Colour: defaultColour, - RPCMaxConcurrency: defaultRPCMaxConcurrency, + LogLevel: utils.DEBUG, + HTTP: defaultHTTP, + HTTPPort: 4576, + Websocket: defaultWS, + WebsocketPort: defaultWSPort, + GRPC: defaultGRPC, + GRPCPort: defaultGRPCPort, + Metrics: defaultMetrics, + MetricsPort: defaultMetricsPort, + DatabasePath: "/home/.juno", + Network: utils.GOERLI, + Pprof: true, + PprofPort: defaultPprofPort, + Colour: defaultColour, }, }, "some flags without config file": { @@ -207,7 +200,6 @@ http-port: 4576 PprofPort: defaultPprofPort, Colour: defaultColour, PendingPollInterval: defaultPendingPollInterval, - RPCMaxConcurrency: defaultRPCMaxConcurrency, }, }, "all setting set in both config file and flags": { @@ -248,7 +240,6 @@ pending-poll-interval: 5s PprofPort: 6064, Colour: defaultColour, PendingPollInterval: time.Millisecond, - RPCMaxConcurrency: defaultRPCMaxConcurrency, }, }, "some setting set in both config file and flags": { @@ -274,7 +265,6 @@ network: goerli PprofPort: defaultPprofPort, Colour: defaultColour, PendingPollInterval: defaultPendingPollInterval, - RPCMaxConcurrency: defaultRPCMaxConcurrency, }, }, "some setting set in default, config file and flags": { @@ -297,7 +287,6 @@ network: goerli PprofPort: defaultPprofPort, Colour: defaultColour, PendingPollInterval: defaultPendingPollInterval, - RPCMaxConcurrency: defaultRPCMaxConcurrency, }, }, } diff --git a/node/node.go b/node/node.go index 3e8d5e5e7a..47e48ff59e 100644 --- a/node/node.go +++ b/node/node.go @@ -8,6 +8,7 @@ import ( "os" "path/filepath" "reflect" + "runtime" "time" "github.com/Masterminds/semver/v3" @@ -62,8 +63,6 @@ type Config struct { P2P bool `mapstructure:"p2p"` P2PAddr string `mapstructure:"p2p-addr"` P2PBootPeers string `mapstructure:"p2p-boot-peers"` - - RPCMaxConcurrency int `mapstructure:"rpc-max-concurrency"` } type Node struct { @@ -114,7 +113,9 @@ func New(cfg *Config, version string) (*Node, error) { //nolint:gocyclo,funlen gatewayClient := gateway.NewClient(cfg.Network.GatewayURL(), log).WithUserAgent(ua) rpcHandler := rpc.New(chain, synchronizer, cfg.Network, gatewayClient, client, vm.New(log), version, log) - jsonrpcServer := jsonrpc.NewServer(cfg.RPCMaxConcurrency, log).WithValidator(validator.Validator()) + // to improve RPC throughput we double GOMAXPROCS + maxGoroutines := 2 * runtime.GOMAXPROCS(0) + jsonrpcServer := jsonrpc.NewServer(maxGoroutines, log).WithValidator(validator.Validator()) for _, method := range methods(rpcHandler) { if err = jsonrpcServer.RegisterMethod(method); err != nil { return nil, err diff --git a/node/node_test.go b/node/node_test.go index 198fc437c1..789ce66812 100644 --- a/node/node_test.go +++ b/node/node_test.go @@ -19,11 +19,10 @@ func TestDefaultDbPath(t *testing.T) { for _, n := range networks { t.Run(n.String(), func(t *testing.T) { - cfg := &node.Config{Network: n, DatabasePath: "", RPCMaxConcurrency: 1} + cfg := &node.Config{Network: n, DatabasePath: ""} expectedCfg := node.Config{ - Network: n, - DatabasePath: filepath.Join(defaultDataDir, n.String()), - RPCMaxConcurrency: cfg.RPCMaxConcurrency, + Network: n, + DatabasePath: filepath.Join(defaultDataDir, n.String()), } snNode, err := node.New(cfg, "1.2.3") require.NoError(t, err) @@ -55,7 +54,6 @@ func TestNewNode(t *testing.T) { P2P: true, P2PAddr: "", P2PBootPeers: "", - RPCMaxConcurrency: 1, } _, err := node.New(config, "v0.3")