This is an automated email from the ASF dual-hosted git repository. wusheng pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb.git
The following commit(s) were added to refs/heads/main by this push: new 7e6ac87d feat: optimize gRPC message size limits for better time-series data handling (#752) 7e6ac87d is described below commit 7e6ac87dc0bab86bd4c08def720be5a4fc9a41e2 Author: Gao Hongtao <hanahm...@gmail.com> AuthorDate: Fri Sep 5 11:39:02 2025 +0800 feat: optimize gRPC message size limits for better time-series data handling (#752) - Increase server max receive message size from 10MB to 16MB - Increase client max receive message size from 10MB to 32MB --- CHANGES.md | 1 + banyand/liaison/grpc/server.go | 2 +- banyand/queue/pub/client.go | 10 ++++++++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index e45678c6..a83a2283 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -39,6 +39,7 @@ Release Notes. - Merge memory data and disk data. - Enhance access log functionality with sampling option. - Implement a resilient publisher with circuit breaker and retry logic with exponential backoff. +- Optimize gRPC message size limits: increase server max receive message size to 16MB and client max receive message size to 32MB for better handling of large time-series data blocks. ### Bug Fixes diff --git a/banyand/liaison/grpc/server.go b/banyand/liaison/grpc/server.go index f8d0c704..762ecdb9 100644 --- a/banyand/liaison/grpc/server.go +++ b/banyand/liaison/grpc/server.go @@ -52,7 +52,7 @@ import ( pkgtls "github.com/apache/skywalking-banyandb/pkg/tls" ) -const defaultRecvSize = 10 << 20 +const defaultRecvSize = 16 << 20 var ( errServerCert = errors.New("invalid server cert file") diff --git a/banyand/queue/pub/client.go b/banyand/queue/pub/client.go index ddd5e02d..104bbbdd 100644 --- a/banyand/queue/pub/client.go +++ b/banyand/queue/pub/client.go @@ -37,6 +37,8 @@ import ( const ( rpcTimeout = 2 * time.Second + // maxReceiveMessageSize sets the maximum message size the client can receive (32MB). + maxReceiveMessageSize = 32 << 20 ) // The timeout is set by each RPC. @@ -167,7 +169,9 @@ func (p *pub) OnAddOrUpdate(md schema.Metadata) { p.log.Error().Err(err).Msg("failed to load client TLS credentials") return } - conn, err := grpc.NewClient(address, append(credOpts, grpc.WithDefaultServiceConfig(p.retryPolicy))...) + conn, err := grpc.NewClient(address, append(credOpts, + grpc.WithDefaultServiceConfig(p.retryPolicy), + grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(maxReceiveMessageSize)))...) if err != nil { p.log.Error().Err(err).Msg("failed to connect to grpc server") return @@ -316,7 +320,9 @@ func (p *pub) checkClientHealthAndReconnect(conn *grpc.ClientConn, md schema.Met p.log.Error().Err(errEvict).Msg("failed to load client TLS credentials (evict)") return } - connEvict, errEvict := grpc.NewClient(node.GrpcAddress, append(credOpts, grpc.WithDefaultServiceConfig(p.retryPolicy))...) + connEvict, errEvict := grpc.NewClient(node.GrpcAddress, append(credOpts, + grpc.WithDefaultServiceConfig(p.retryPolicy), + grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(maxReceiveMessageSize)))...) if errEvict == nil && p.healthCheck(en.n.String(), connEvict) { func() { p.mu.Lock()