Skip to content

Commit

Permalink
Make Metadata Stringer implementation deterministic
Browse files Browse the repository at this point in the history
Signed-off-by: Davanum Srinivas <davanum@gmail.com>
  • Loading branch information
dims committed Jun 26, 2024
1 parent 98e5dee commit d83679d
Showing 1 changed file with 8 additions and 3 deletions.
11 changes: 8 additions & 3 deletions metadata/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ package metadata // import "google.golang.org/grpc/metadata"
import (
"context"
"fmt"
"sort"
"strings"

"google.golang.org/grpc/internal"
Expand Down Expand Up @@ -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()
Expand Down

0 comments on commit d83679d

Please sign in to comment.