Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

grpc: make client report Internal status when server response contains unsupported encoding #7461

Merged
merged 15 commits into from
Aug 6, 2024
Merged
Prev Previous commit
Next Next commit
add supported compressions to error desc
Gayathri625 committed Aug 2, 2024
commit 1e611ff23fe8f022a7d4202e933e2cc63a3830d5
5 changes: 3 additions & 2 deletions rpc_util.go
Original file line number Diff line number Diff line change
@@ -34,6 +34,7 @@
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/encoding"
"google.golang.org/grpc/encoding/proto"
"google.golang.org/grpc/internal/grpcutil"
"google.golang.org/grpc/internal/transport"
"google.golang.org/grpc/metadata"
"google.golang.org/grpc/peer"
@@ -728,9 +729,9 @@
}
if !haveCompressor {
if isServer {
return status.Newf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", recvCompress)
return status.Newf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q, supported compressions: %v", recvCompress, grpcutil.RegisteredCompressors())

Check warning on line 732 in rpc_util.go

Codecov / codecov/patch

rpc_util.go#L732

Added line #L732 was not covered by tests
} else {
return status.Newf(codes.Internal, "grpc: Decompressor is not installed for grpc-encoding %q", recvCompress)
return status.Newf(codes.Internal, "grpc: Decompressor is not installed for grpc-encoding %q, supported compressions: %v", recvCompress, grpcutil.RegisteredCompressors())
}
}
default:
4 changes: 2 additions & 2 deletions server.go
Original file line number Diff line number Diff line change
@@ -1304,7 +1304,7 @@ func (s *Server) processUnaryRPC(ctx context.Context, t transport.ServerTranspor
} else if rc != "" && rc != encoding.Identity {
decomp = encoding.GetCompressor(rc)
if decomp == nil {
st := status.Newf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", rc)
st := status.Newf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q, supported compressions: %v", rc, grpcutil.RegisteredCompressors())
t.WriteStatus(stream, st)
return st.Err()
}
@@ -1632,7 +1632,7 @@ func (s *Server) processStreamingRPC(ctx context.Context, t transport.ServerTran
} else if rc != "" && rc != encoding.Identity {
ss.decomp = encoding.GetCompressor(rc)
if ss.decomp == nil {
st := status.Newf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", rc)
st := status.Newf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q, supported compressions: %v", rc, grpcutil.RegisteredCompressors())
t.WriteStatus(ss.s, st)
return st.Err()
}