Sort keys when serialising log tokens

This commit is contained in:
Kegan Dougal 2020-07-30 14:24:33 +01:00
parent 17afe4dfd0
commit 389520f678
2 changed files with 8 additions and 7 deletions

View file

@ -18,6 +18,7 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"sort"
"strconv" "strconv"
"strings" "strings"
@ -129,15 +130,14 @@ func (t *StreamingToken) EDUPosition() StreamPosition {
return t.Positions[1] return t.Positions[1]
} }
func (t *StreamingToken) String() string { func (t *StreamingToken) String() string {
logStrings := []string{ var logStrings []string
t.syncToken.String(),
}
for name, lp := range t.logs { for name, lp := range t.logs {
logStr := fmt.Sprintf("%s-%d-%d", name, lp.Partition, lp.Offset) logStr := fmt.Sprintf("%s-%d-%d", name, lp.Partition, lp.Offset)
logStrings = append(logStrings, logStr) logStrings = append(logStrings, logStr)
} }
sort.Strings(logStrings)
// E.g s11_22_33.dl0-134.ab1-441 // E.g s11_22_33.dl0-134.ab1-441
return strings.Join(logStrings, ".") return strings.Join(append([]string{t.syncToken.String()}, logStrings...), ".")
} }
// IsAfter returns true if ANY position in this token is greater than `other`. // IsAfter returns true if ANY position in this token is greater than `other`.

View file

@ -20,7 +20,7 @@ func TestNewSyncTokenWithLogs(t *testing.T) {
}, },
}, },
}, },
"s4_0.dl-0-123.ab-1-14419482332": &StreamingToken{ "s4_0.ab-1-14419482332.dl-0-123": &StreamingToken{
syncToken: syncToken{Type: "s", Positions: []StreamPosition{4, 0}}, syncToken: syncToken{Type: "s", Positions: []StreamPosition{4, 0}},
logs: map[string]*LogPosition{ logs: map[string]*LogPosition{
"ab": &LogPosition{ "ab": &LogPosition{
@ -46,8 +46,9 @@ func TestNewSyncTokenWithLogs(t *testing.T) {
if !reflect.DeepEqual(got, *want) { if !reflect.DeepEqual(got, *want) {
t.Errorf("%s mismatch: got %v want %v", tok, got, want) t.Errorf("%s mismatch: got %v want %v", tok, got, want)
} }
if got.String() != tok { gotStr := got.String()
t.Errorf("%s reserialisation mismatch: got %s want %s", tok, got.String(), tok) if gotStr != tok {
t.Errorf("%s reserialisation mismatch: got %s want %s", tok, gotStr, tok)
} }
} }
} }