From 29b4b1a53795c5f2e4469a2ead7891ba0d704bca Mon Sep 17 00:00:00 2001 From: Tonis Tiigi Date: Wed, 29 May 2024 20:52:48 -0700 Subject: [PATCH] ensure correct grpc max sizes for control API and frontends Signed-off-by: Tonis Tiigi --- cmd/buildkitd/main.go | 3 +++ frontend/gateway/gateway.go | 9 ++++++++- frontend/gateway/grpcclient/client.go | 17 ++++++++++++----- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/cmd/buildkitd/main.go b/cmd/buildkitd/main.go index d254b7ce1d95..a06767f92162 100644 --- a/cmd/buildkitd/main.go +++ b/cmd/buildkitd/main.go @@ -15,6 +15,7 @@ import ( "strings" "sync" + "github.com/containerd/containerd/defaults" "github.com/containerd/containerd/pkg/seed" //nolint:staticcheck // SA1019 deprecated "github.com/containerd/containerd/pkg/userns" "github.com/containerd/containerd/platforms" @@ -289,6 +290,8 @@ func main() { grpc.StatsHandler(statsHandler), grpc.ChainUnaryInterceptor(unaryInterceptor, grpcerrors.UnaryServerInterceptor), grpc.StreamInterceptor(grpcerrors.StreamServerInterceptor), + grpc.MaxRecvMsgSize(defaults.DefaultMaxRecvMsgSize), + grpc.MaxSendMsgSize(defaults.DefaultMaxSendMsgSize), } server := grpc.NewServer(opts...) diff --git a/frontend/gateway/gateway.go b/frontend/gateway/gateway.go index baf002b7e917..3959fab88000 100644 --- a/frontend/gateway/gateway.go +++ b/frontend/gateway/gateway.go @@ -14,6 +14,7 @@ import ( "syscall" "time" + "github.com/containerd/containerd/defaults" "github.com/containerd/containerd/mount" "github.com/distribution/reference" "github.com/docker/docker/pkg/idtools" @@ -497,7 +498,13 @@ func newBridgeForwarder(ctx context.Context, llbBridge frontend.FrontendLLBBridg func serveLLBBridgeForwarder(ctx context.Context, llbBridge frontend.FrontendLLBBridge, exec executor.Executor, workers worker.Infos, inputs map[string]*opspb.Definition, sid string, sm *session.Manager) (*llbBridgeForwarder, context.Context, error) { ctx, cancel := context.WithCancelCause(ctx) lbf := newBridgeForwarder(ctx, llbBridge, exec, workers, inputs, sid, sm) - server := grpc.NewServer(grpc.UnaryInterceptor(grpcerrors.UnaryServerInterceptor), grpc.StreamInterceptor(grpcerrors.StreamServerInterceptor)) + serverOpt := []grpc.ServerOption{ + grpc.UnaryInterceptor(grpcerrors.UnaryServerInterceptor), + grpc.StreamInterceptor(grpcerrors.StreamServerInterceptor), + grpc.MaxRecvMsgSize(defaults.DefaultMaxRecvMsgSize), + grpc.MaxSendMsgSize(defaults.DefaultMaxSendMsgSize), + } + server := grpc.NewServer(serverOpt...) grpc_health_v1.RegisterHealthServer(server, health.NewServer()) pb.RegisterLLBBridgeServer(server, lbf) diff --git a/frontend/gateway/grpcclient/client.go b/frontend/gateway/grpcclient/client.go index f5e820770780..cb857a094d59 100644 --- a/frontend/gateway/grpcclient/client.go +++ b/frontend/gateway/grpcclient/client.go @@ -1249,11 +1249,18 @@ func (r *reference) StatFile(ctx context.Context, req client.StatRequest) (*fsty } func grpcClientConn(ctx context.Context) (context.Context, *grpc.ClientConn, error) { - dialOpt := grpc.WithContextDialer(func(ctx context.Context, addr string) (net.Conn, error) { - return stdioConn(), nil - }) - - cc, err := grpc.DialContext(ctx, "localhost", dialOpt, grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithUnaryInterceptor(grpcerrors.UnaryClientInterceptor), grpc.WithStreamInterceptor(grpcerrors.StreamClientInterceptor)) + dialOpts := []grpc.DialOption{ + grpc.WithContextDialer(func(ctx context.Context, addr string) (net.Conn, error) { + return stdioConn(), nil + }), + grpc.WithTransportCredentials(insecure.NewCredentials()), + grpc.WithUnaryInterceptor(grpcerrors.UnaryClientInterceptor), + grpc.WithStreamInterceptor(grpcerrors.StreamClientInterceptor), + grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(16 << 20)), + grpc.WithDefaultCallOptions(grpc.MaxCallSendMsgSize(16 << 20)), + } + + cc, err := grpc.DialContext(ctx, "localhost", dialOpts...) if err != nil { return nil, nil, errors.Wrap(err, "failed to create grpc client") }