MCPcopy
hub / github.com/grafana/dskit / TestRing_GetReplicationSetForOperation

Function TestRing_GetReplicationSetForOperation

ring/ring_test.go:1017–1139  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

1015}
1016
1017func TestRing_GetReplicationSetForOperation(t *testing.T) {
1018 now := time.Now()
1019 gen := initTokenGenerator(t)
1020
1021 tests := map[string]struct {
1022 ringInstances map[string]InstanceDesc
1023 ringHeartbeatTimeout time.Duration
1024 ringReplicationFactor int
1025 expectedErrForRead error
1026 expectedSetForRead []string
1027 expectedErrForWrite error
1028 expectedSetForWrite []string
1029 expectedErrForReporting error
1030 expectedSetForReporting []string
1031 }{
1032 "should return error on empty ring": {
1033 ringInstances: nil,
1034 ringHeartbeatTimeout: time.Minute,
1035 ringReplicationFactor: 1,
1036 expectedErrForRead: ErrEmptyRing,
1037 expectedErrForWrite: ErrEmptyRing,
1038 expectedErrForReporting: ErrEmptyRing,
1039 },
1040 "should succeed on all healthy instances and RF=1": {
1041 ringInstances: map[string]InstanceDesc{
1042 "instance-1": {Addr: "127.0.0.1", State: ACTIVE, Timestamp: now.Unix(), Tokens: gen.GenerateTokens(128, nil)},
1043 "instance-2": {Addr: "127.0.0.2", State: ACTIVE, Timestamp: now.Add(-10 * time.Second).Unix(), Tokens: gen.GenerateTokens(128, nil)},
1044 "instance-3": {Addr: "127.0.0.3", State: ACTIVE, Timestamp: now.Add(-20 * time.Second).Unix(), Tokens: gen.GenerateTokens(128, nil)},
1045 "instance-4": {Addr: "127.0.0.4", State: ACTIVE, Timestamp: now.Add(-30 * time.Second).Unix(), Tokens: gen.GenerateTokens(128, nil)},
1046 "instance-5": {Addr: "127.0.0.5", State: ACTIVE, Timestamp: now.Add(-40 * time.Second).Unix(), Tokens: gen.GenerateTokens(128, nil)},
1047 },
1048 ringHeartbeatTimeout: time.Minute,
1049 ringReplicationFactor: 1,
1050 expectedSetForRead: []string{"127.0.0.1", "127.0.0.2", "127.0.0.3", "127.0.0.4", "127.0.0.5"},
1051 expectedSetForWrite: []string{"127.0.0.1", "127.0.0.2", "127.0.0.3", "127.0.0.4", "127.0.0.5"},
1052 expectedSetForReporting: []string{"127.0.0.1", "127.0.0.2", "127.0.0.3", "127.0.0.4", "127.0.0.5"},
1053 },
1054 "should succeed on instances with old timestamps but long heartbeat timeout": {
1055 ringInstances: map[string]InstanceDesc{
1056 "instance-1": {Addr: "127.0.0.1", State: ACTIVE, Timestamp: now.Add(-2 * time.Minute).Unix(), Tokens: gen.GenerateTokens(128, nil)},
1057 "instance-2": {Addr: "127.0.0.2", State: ACTIVE, Timestamp: now.Add(-2 * time.Minute).Unix(), Tokens: gen.GenerateTokens(128, nil)},
1058 "instance-3": {Addr: "127.0.0.3", State: ACTIVE, Timestamp: now.Add(-2 * time.Minute).Unix(), Tokens: gen.GenerateTokens(128, nil)},
1059 "instance-4": {Addr: "127.0.0.4", State: ACTIVE, Timestamp: now.Add(-2 * time.Minute).Unix(), Tokens: gen.GenerateTokens(128, nil)},
1060 "instance-5": {Addr: "127.0.0.5", State: ACTIVE, Timestamp: now.Add(-2 * time.Minute).Unix(), Tokens: gen.GenerateTokens(128, nil)},
1061 },
1062 ringHeartbeatTimeout: time.Hour,
1063 ringReplicationFactor: 1,
1064 expectedSetForRead: []string{"127.0.0.1", "127.0.0.2", "127.0.0.3", "127.0.0.4", "127.0.0.5"},
1065 expectedSetForWrite: []string{"127.0.0.1", "127.0.0.2", "127.0.0.3", "127.0.0.4", "127.0.0.5"},
1066 expectedSetForReporting: []string{"127.0.0.1", "127.0.0.2", "127.0.0.3", "127.0.0.4", "127.0.0.5"},
1067 },
1068 "should fail on 1 unhealthy instance and RF=1": {
1069 ringInstances: map[string]InstanceDesc{
1070 "instance-1": {Addr: "127.0.0.1", State: ACTIVE, Timestamp: now.Unix(), Tokens: gen.GenerateTokens(128, nil)},
1071 "instance-2": {Addr: "127.0.0.2", State: ACTIVE, Timestamp: now.Add(-10 * time.Second).Unix(), Tokens: gen.GenerateTokens(128, nil)},
1072 "instance-3": {Addr: "127.0.0.3", State: ACTIVE, Timestamp: now.Add(-20 * time.Second).Unix(), Tokens: gen.GenerateTokens(128, nil)},
1073 "instance-4": {Addr: "127.0.0.4", State: ACTIVE, Timestamp: now.Add(-30 * time.Second).Unix(), Tokens: gen.GenerateTokens(128, nil)},
1074 "instance-5": {Addr: "127.0.0.5", State: ACTIVE, Timestamp: now.Add(-2 * time.Minute).Unix(), Tokens: gen.GenerateTokens(128, nil)},

Callers

nothing calls this directly

Calls 9

initTokenGeneratorFunction · 0.85
newRingForTestingFunction · 0.85
RunMethod · 0.80
setRingStateFromDescMethod · 0.80
GetAddressesMethod · 0.80
GenerateTokensMethod · 0.65
AddMethod · 0.65
EqualMethod · 0.45

Tested by

no test coverage detected