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

Function TestTokensTakeover

ring/merge_test.go:186–245  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

184}
185
186func TestTokensTakeover(t *testing.T) {
187 now := time.Now().Unix()
188
189 first := func() *Desc {
190 return &Desc{
191 Ingesters: map[string]InstanceDesc{
192 "Ing 1": {Addr: "addr1", Timestamp: now, State: ACTIVE, Tokens: []uint32{30, 40, 50}},
193 "Ing 2": {Addr: "addr2", Timestamp: now, State: JOINING, Tokens: []uint32{5, 10, 20}}, // partially migrated from Ing 3
194 },
195 }
196 }
197
198 second := func() *Desc {
199 return &Desc{
200 Ingesters: map[string]InstanceDesc{
201 "Ing 2": {Addr: "addr2", Timestamp: now + 5, State: ACTIVE, Tokens: []uint32{5, 10, 20}},
202 "Ing 3": {Addr: "addr3", Timestamp: now + 5, State: LEAVING, Tokens: []uint32{5, 10, 20, 100, 200}},
203 },
204 }
205 }
206
207 merged := func() *Desc {
208 return &Desc{
209 Ingesters: map[string]InstanceDesc{
210 "Ing 1": {Addr: "addr1", Timestamp: now, State: ACTIVE, Tokens: []uint32{30, 40, 50}},
211 "Ing 2": {Addr: "addr2", Timestamp: now + 5, State: ACTIVE, Tokens: []uint32{5, 10, 20}},
212 "Ing 3": {Addr: "addr3", Timestamp: now + 5, State: LEAVING, Tokens: []uint32{100, 200}},
213 },
214 }
215 }
216
217 {
218 our, ch := merge(first(), second())
219 assert.Equal(t, merged(), our)
220 assert.Equal(t, &Desc{
221 Ingesters: map[string]InstanceDesc{
222 "Ing 2": {Addr: "addr2", Timestamp: now + 5, State: ACTIVE, Tokens: []uint32{5, 10, 20}},
223 "Ing 3": {Addr: "addr3", Timestamp: now + 5, State: LEAVING, Tokens: []uint32{100, 200}}, // change doesn't contain conflicted tokens
224 },
225 }, ch)
226 }
227
228 { // idempotency: (no change after applying same ring again)
229 our, ch := merge(merged(), second())
230 assert.Equal(t, merged(), our)
231 assert.Equal(t, (*Desc)(nil), ch)
232 }
233
234 { // commutativity: (Merge(first, second) == Merge(second, first)
235 our, ch := merge(second(), first())
236 assert.Equal(t, merged(), our)
237
238 // change is different though
239 assert.Equal(t, &Desc{
240 Ingesters: map[string]InstanceDesc{
241 "Ing 1": {Addr: "addr1", Timestamp: now, State: ACTIVE, Tokens: []uint32{30, 40, 50}},
242 },
243 }, ch)

Callers

nothing calls this directly

Calls 2

mergeFunction · 0.85
EqualMethod · 0.45

Tested by

no test coverage detected