From 38f2ec6d7de506e19d508430aad7d9986f4604aa Mon Sep 17 00:00:00 2001 From: terence tsao Date: Wed, 6 May 2020 14:01:23 -0700 Subject: [PATCH] Update gateway max resv size to 16MB (#5756) * Update max resv size to 16MB * Merge refs/heads/master into 5752 * Use GrpcMaxCallRecvMsgSizeFlag for beacon node * Merge branch '5752' of github.com:prysmaticlabs/prysm into 5752 * Typo * Fix server * Merge refs/heads/master into 5752 * Merge refs/heads/master into 5752 * Merge refs/heads/master into 5752 * Merge refs/heads/master into 5752 * Update beacon-chain/gateway/server/main.go Co-authored-by: Preston Van Loon * Merge refs/heads/master into 5752 --- beacon-chain/gateway/gateway.go | 23 ++++++++++++++++++----- beacon-chain/gateway/server/main.go | 2 ++ beacon-chain/main.go | 1 + beacon-chain/node/node.go | 1 + beacon-chain/usage.go | 1 + shared/cmd/flags.go | 6 ++++++ validator/flags/flags.go | 5 ----- validator/main.go | 2 +- validator/node/node.go | 2 +- validator/usage.go | 2 +- 10 files changed, 32 insertions(+), 13 deletions(-) diff --git a/beacon-chain/gateway/gateway.go b/beacon-chain/gateway/gateway.go index dcef54cd43..1bdce237d5 100644 --- a/beacon-chain/gateway/gateway.go +++ b/beacon-chain/gateway/gateway.go @@ -32,6 +32,7 @@ type Gateway struct { allowedOrigins []string startFailure error enableDebugRPCEndpoints bool + maxCallRecvMsgSize uint64 } // Start the gateway service. This serves the HTTP JSON traffic on the specified @@ -42,7 +43,7 @@ func (g *Gateway) Start() { log.WithField("address", g.gatewayAddr).Info("Starting gRPC gateway.") - conn, err := dial(ctx, "tcp", g.remoteAddr) + conn, err := g.dial(ctx, "tcp", g.remoteAddr) if err != nil { log.WithError(err).Error("Failed to connect to gRPC server") g.startFailure = err @@ -125,6 +126,7 @@ func New( mux *http.ServeMux, allowedOrigins []string, enableDebugRPCEndpoints bool, + maxCallRecvMsgSize uint64, ) *Gateway { if mux == nil { mux = http.NewServeMux() @@ -137,14 +139,15 @@ func New( mux: mux, allowedOrigins: allowedOrigins, enableDebugRPCEndpoints: enableDebugRPCEndpoints, + maxCallRecvMsgSize: maxCallRecvMsgSize, } } // dial the gRPC server. -func dial(ctx context.Context, network, addr string) (*grpc.ClientConn, error) { +func (g *Gateway) dial(ctx context.Context, network, addr string) (*grpc.ClientConn, error) { switch network { case "tcp": - return dialTCP(ctx, addr) + return g.dialTCP(ctx, addr) case "unix": return dialUnix(ctx, addr) default: @@ -154,8 +157,18 @@ func dial(ctx context.Context, network, addr string) (*grpc.ClientConn, error) { // dialTCP creates a client connection via TCP. // "addr" must be a valid TCP address with a port number. -func dialTCP(ctx context.Context, addr string) (*grpc.ClientConn, error) { - return grpc.DialContext(ctx, addr, grpc.WithInsecure()) +func (g *Gateway) dialTCP(ctx context.Context, addr string) (*grpc.ClientConn, error) { + opts := []grpc.DialOption{grpc.WithInsecure()} + + if g.enableDebugRPCEndpoints { + opts = append(opts, grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(int(g.maxCallRecvMsgSize)))) + } + + return grpc.DialContext( + ctx, + addr, + opts..., + ) } // dialUnix creates a client connection via a unix domain socket. diff --git a/beacon-chain/gateway/server/main.go b/beacon-chain/gateway/server/main.go index 8174aa2c84..b5ceefbdfd 100644 --- a/beacon-chain/gateway/server/main.go +++ b/beacon-chain/gateway/server/main.go @@ -21,6 +21,7 @@ var ( debug = flag.Bool("debug", false, "Enable debug logging") allowedOrigins = flag.String("corsdomain", "", "A comma separated list of CORS domains to allow") enableDebugRPCEndpoints = flag.Bool("enable-debug-rpc-endpoints", false, "Enable debug rpc endpoints such as /eth/v1alpha1/beacon/state") + grpcMaxMsgSize = flag.Int("grpc-max-msg-size", 1<<22, "Integer to define max recieve message call size") ) func init() { @@ -43,6 +44,7 @@ func main() { mux, strings.Split(*allowedOrigins, ","), *enableDebugRPCEndpoints, + uint64(*grpcMaxMsgSize), ) mux.HandleFunc("/swagger/", gateway.SwaggerServer()) mux.HandleFunc("/healthz", healthzServer(gw)) diff --git a/beacon-chain/main.go b/beacon-chain/main.go index fdcee2dfc9..7ac7113ef7 100644 --- a/beacon-chain/main.go +++ b/beacon-chain/main.go @@ -88,6 +88,7 @@ var appFlags = []cli.Flag{ cmd.EnableUPnPFlag, cmd.ConfigFileFlag, cmd.ChainConfigFileFlag, + cmd.GrpcMaxCallRecvMsgSizeFlag, } func init() { diff --git a/beacon-chain/node/node.go b/beacon-chain/node/node.go index f899373db6..baf3b08574 100644 --- a/beacon-chain/node/node.go +++ b/beacon-chain/node/node.go @@ -594,6 +594,7 @@ func (b *BeaconNode) registerGRPCGateway() error { nil, /*optional mux*/ allowedOrigins, enableDebugRPCEndpoints, + b.cliCtx.Uint64(cmd.GrpcMaxCallRecvMsgSizeFlag.Name), ), ) } diff --git a/beacon-chain/usage.go b/beacon-chain/usage.go index cb9f7744da..fc6ba8d311 100644 --- a/beacon-chain/usage.go +++ b/beacon-chain/usage.go @@ -62,6 +62,7 @@ var appHelpFlagGroups = []flagGroup{ cmd.ClearDB, cmd.ConfigFileFlag, cmd.ChainConfigFileFlag, + cmd.GrpcMaxCallRecvMsgSizeFlag, }, }, { diff --git a/shared/cmd/flags.go b/shared/cmd/flags.go index 19bfd2f732..dade0f087c 100644 --- a/shared/cmd/flags.go +++ b/shared/cmd/flags.go @@ -179,4 +179,10 @@ var ( Name: "chain-config-file", Usage: "The path to a YAML file with chain config values", } + // GrpcMaxCallRecvMsgSizeFlag defines the max call message size for GRPC + GrpcMaxCallRecvMsgSizeFlag = &cli.IntFlag{ + Name: "grpc-max-msg-size", + Usage: "Integer to define max recieve message call size (default: 4194304 (for 40MB))", + Value: 1 << 22, + } ) diff --git a/validator/flags/flags.go b/validator/flags/flags.go index 7117542ce9..79bb495c5f 100644 --- a/validator/flags/flags.go +++ b/validator/flags/flags.go @@ -33,11 +33,6 @@ var ( Name: "graffiti", Usage: "String to include in proposed blocks", } - // GrpcMaxCallRecvMsgSizeFlag defines the max call message size for GRPC - GrpcMaxCallRecvMsgSizeFlag = &cli.IntFlag{ - Name: "grpc-max-msg-size", - Usage: "Integer to define max recieve message call size (default: 52428800 (for 50Mb)).", - } // GrpcRetriesFlag defines the number of times to retry a failed gRPC request. GrpcRetriesFlag = &cli.UintFlag{ Name: "grpc-retries", diff --git a/validator/main.go b/validator/main.go index fed2c2759e..d358972778 100644 --- a/validator/main.go +++ b/validator/main.go @@ -47,7 +47,6 @@ var appFlags = []cli.Flag{ flags.UnencryptedKeysFlag, flags.InteropStartIndex, flags.InteropNumValidators, - flags.GrpcMaxCallRecvMsgSizeFlag, flags.GrpcRetriesFlag, flags.GrpcHeadersFlag, flags.KeyManager, @@ -72,6 +71,7 @@ var appFlags = []cli.Flag{ cmd.LogFileName, cmd.ConfigFileFlag, cmd.ChainConfigFileFlag, + cmd.GrpcMaxCallRecvMsgSizeFlag, } func init() { diff --git a/validator/node/node.go b/validator/node/node.go index f811bfb089..160499b669 100644 --- a/validator/node/node.go +++ b/validator/node/node.go @@ -183,7 +183,7 @@ func (s *ValidatorClient) registerClientService(ctx *cli.Context, keyManager key emitAccountMetrics := ctx.Bool(flags.AccountMetricsFlag.Name) cert := ctx.String(flags.CertFlag.Name) graffiti := ctx.String(flags.GraffitiFlag.Name) - maxCallRecvMsgSize := ctx.Int(flags.GrpcMaxCallRecvMsgSizeFlag.Name) + maxCallRecvMsgSize := ctx.Int(cmd.GrpcMaxCallRecvMsgSizeFlag.Name) grpcRetries := ctx.Uint(flags.GrpcRetriesFlag.Name) v, err := client.NewValidatorService(context.Background(), &client.Config{ Endpoint: endpoint, diff --git a/validator/usage.go b/validator/usage.go index 760ab7c096..7644205839 100644 --- a/validator/usage.go +++ b/validator/usage.go @@ -57,6 +57,7 @@ var appHelpFlagGroups = []flagGroup{ cmd.LogFileName, cmd.ConfigFileFlag, cmd.ChainConfigFileFlag, + cmd.GrpcMaxCallRecvMsgSizeFlag, }, }, { @@ -82,7 +83,6 @@ var appHelpFlagGroups = []flagGroup{ flags.DisablePenaltyRewardLogFlag, flags.UnencryptedKeysFlag, flags.GraffitiFlag, - flags.GrpcMaxCallRecvMsgSizeFlag, flags.GrpcRetriesFlag, flags.GrpcHeadersFlag, flags.AccountMetricsFlag,