Skip to content

Commit d83679d

Browse files
committed
Make Metadata Stringer implementation deterministic
Signed-off-by: Davanum Srinivas <[email protected]>
1 parent 98e5dee commit d83679d

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

metadata/metadata.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ package metadata // import "google.golang.org/grpc/metadata"
2424
import (
2525
"context"
2626
"fmt"
27+
"sort"
2728
"strings"
2829

2930
"google.golang.org/grpc/internal"
@@ -91,15 +92,19 @@ func Pairs(kv ...string) MD {
9192
}
9293

9394
// String implements the Stringer interface for pretty-printing a MD.
94-
// Ordering of the values is non-deterministic as it ranges over a map.
9595
func (md MD) String() string {
9696
var sb strings.Builder
9797
fmt.Fprintf(&sb, "MD{")
98-
for k, v := range md {
98+
keys := make([]string, 0, len(md))
99+
for k := range md {
100+
keys = append(keys, k)
101+
}
102+
sort.Strings(keys)
103+
for _, k := range keys {
99104
if sb.Len() > 3 {
100105
fmt.Fprintf(&sb, ", ")
101106
}
102-
fmt.Fprintf(&sb, "%s=[%s]", k, strings.Join(v, ", "))
107+
fmt.Fprintf(&sb, "%s=[%s]", k, strings.Join(md[k], ", "))
103108
}
104109
fmt.Fprintf(&sb, "}")
105110
return sb.String()

0 commit comments

Comments
 (0)