You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2025/09/05 03:39:07 UTC

(skywalking-banyandb) branch main updated: feat: optimize gRPC message size limits for better time-series data handling (#752)

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 <ha...@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()