diff --git a/transport/grpc/headers.go b/transport/grpc/headers.go index 4b1436f81..b4c646eb4 100644 --- a/transport/grpc/headers.go +++ b/transport/grpc/headers.go @@ -203,7 +203,7 @@ func metadataToApplicationErrorMeta(responseMD metadata.MD) *transport.Applicati // addApplicationHeaders adds the headers to md. func addApplicationHeaders(md metadata.MD, headers transport.Headers) error { for header, value := range headers.Items() { - header = transport.CanonicalizeHeaderKey(header) + // Items() keys are already canonical (lowercased on insertion via With). if isReserved(header) { return yarpcerrors.InvalidArgumentErrorf("cannot use reserved header in application headers: %s", header) } diff --git a/transport/grpc/headers_test.go b/transport/grpc/headers_test.go index 9fb3c6e3a..eb6e7e73b 100644 --- a/transport/grpc/headers_test.go +++ b/transport/grpc/headers_test.go @@ -404,3 +404,19 @@ func BenchmarkIsReserved(b *testing.B) { }) } } + +func BenchmarkAddApplicationHeaders(b *testing.B) { + headers := transport.HeadersFromMap(map[string]string{ + "x-uber-source": "service-a", + "x-request-id": "abc-123", + "x-trace-id": "trace-456", + "x-custom-1": "val1", + "x-custom-2": "val2", + }) + + b.ResetTimer() + for range b.N { + md := metadata.New(nil) + _ = addApplicationHeaders(md, headers) + } +}