fix max msg size type issues on different arch (#1623)
diff --git a/rpc_util.go b/rpc_util.go
index e006b7e..9c8d881 100644
--- a/rpc_util.go
+++ b/rpc_util.go
@@ -274,7 +274,10 @@
if length == 0 {
return pf, nil, nil
}
- if length > uint32(maxReceiveMessageSize) {
+ if int64(length) > int64(maxInt) {
+ return 0, nil, Errorf(codes.ResourceExhausted, "grpc: received message larger than max length allowed on current machine (%d vs. %d)", length, maxInt)
+ }
+ if int(length) > maxReceiveMessageSize {
return 0, nil, Errorf(codes.ResourceExhausted, "grpc: received message larger than max (%d vs. %d)", length, maxReceiveMessageSize)
}
// TODO(bradfitz,zhaoq): garbage. reuse buffer after proto decoding instead
diff --git a/service_config.go b/service_config.go
index 0631e7d..cde6483 100644
--- a/service_config.go
+++ b/service_config.go
@@ -25,6 +25,8 @@
"google.golang.org/grpc/grpclog"
)
+const maxInt = int(^uint(0) >> 1)
+
// MethodConfig defines the configuration recommended by the service providers for a
// particular method.
// DEPRECATED: Users should not use this struct. Service config should be received
@@ -97,8 +99,8 @@
Name *[]jsonName
WaitForReady *bool
Timeout *string
- MaxRequestMessageBytes *int
- MaxResponseMessageBytes *int
+ MaxRequestMessageBytes *int64
+ MaxResponseMessageBytes *int64
}
// TODO(lyuxuan): delete this struct after cleaning up old service config implementation.
@@ -135,8 +137,20 @@
mc := MethodConfig{
WaitForReady: m.WaitForReady,
Timeout: d,
- MaxReqSize: m.MaxRequestMessageBytes,
- MaxRespSize: m.MaxResponseMessageBytes,
+ }
+ if m.MaxRequestMessageBytes != nil {
+ if *m.MaxRequestMessageBytes > int64(maxInt) {
+ mc.MaxReqSize = newInt(maxInt)
+ } else {
+ mc.MaxReqSize = newInt(int(*m.MaxRequestMessageBytes))
+ }
+ }
+ if m.MaxResponseMessageBytes != nil {
+ if *m.MaxResponseMessageBytes > int64(maxInt) {
+ mc.MaxRespSize = newInt(maxInt)
+ } else {
+ mc.MaxRespSize = newInt(int(*m.MaxResponseMessageBytes))
+ }
}
for _, n := range *m.Name {
if path, valid := n.generatePath(); valid {