diff --git a/metadata/metadata.go b/metadata/metadata.go index 6c01a9b359cc..f6d3563a2fa8 100644 --- a/metadata/metadata.go +++ b/metadata/metadata.go @@ -24,6 +24,7 @@ package metadata // import "google.golang.org/grpc/metadata" import ( "context" "fmt" + "sort" "strings" "google.golang.org/grpc/internal" @@ -91,15 +92,19 @@ func Pairs(kv ...string) MD { } // String implements the Stringer interface for pretty-printing a MD. -// Ordering of the values is non-deterministic as it ranges over a map. func (md MD) String() string { var sb strings.Builder fmt.Fprintf(&sb, "MD{") - for k, v := range md { + keys := make([]string, 0, len(md)) + for k := range md { + keys = append(keys, k) + } + sort.Strings(keys) + for _, k := range keys { if sb.Len() > 3 { fmt.Fprintf(&sb, ", ") } - fmt.Fprintf(&sb, "%s=[%s]", k, strings.Join(v, ", ")) + fmt.Fprintf(&sb, "%s=[%s]", k, strings.Join(md[k], ", ")) } fmt.Fprintf(&sb, "}") return sb.String()