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

Function TestRestartIngester_NoUnregister_LongHeartbeat

ring/lifecycler_test.go:1434–1490  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

1432func (f *noopFlushTransferer) TransferOut(_ context.Context) error { return nil }
1433
1434func TestRestartIngester_NoUnregister_LongHeartbeat(t *testing.T) {
1435 t.Parallel()
1436
1437 ringStore, closer := consul.NewInMemoryClient(GetCodec(), log.NewNopLogger(), nil)
1438 t.Cleanup(func() { assert.NoError(t, closer.Close()) })
1439
1440 origTokens := initTokenGenerator(t).GenerateTokens(100, nil)
1441
1442 const id = "test"
1443 registeredAt := time.Now().Add(-1 * time.Hour)
1444
1445 err := ringStore.CAS(context.Background(), ringKey, func(in interface{}) (out interface{}, retry bool, err error) {
1446 // Create ring with LEAVING entry with some tokens
1447 r := GetOrCreateRingDesc(in)
1448 r.AddIngester(id, "3.3.3.3:333", "old", origTokens, LEAVING, registeredAt, false, time.Time{}, nil)
1449 return r, true, err
1450 })
1451 require.NoError(t, err)
1452
1453 var lifecyclerConfig LifecyclerConfig
1454 flagext.DefaultValues(&lifecyclerConfig)
1455 lifecyclerConfig.Addr = "1.1.1.1"
1456 lifecyclerConfig.Port = 111
1457 lifecyclerConfig.Zone = "new"
1458 lifecyclerConfig.RingConfig.KVStore.Mock = ringStore
1459 lifecyclerConfig.NumTokens = len(origTokens)
1460 lifecyclerConfig.ID = id
1461 lifecyclerConfig.HeartbeatPeriod = 5 * time.Minute // Long hearbeat period.
1462 lifecyclerConfig.MinReadyDuration = 0 // Disable waiting extra time for Ready
1463 lifecyclerConfig.JoinAfter = 1 * time.Minute // Use long value to make sure that we don't use "join" code path.
1464
1465 l, err := NewLifecycler(lifecyclerConfig, &noopFlushTransferer{}, "test", ringKey, false, log.NewNopLogger(), nil)
1466 require.NoError(t, err)
1467
1468 require.NoError(t, services.StartAndAwaitRunning(context.Background(), l))
1469 defer services.StopAndAwaitTerminated(context.Background(), l) //nolint:errcheck
1470
1471 test.Poll(t, 1*time.Second, nil, func() interface{} {
1472 return l.CheckReady(context.Background())
1473 })
1474
1475 // Lifecycler should be in ACTIVE state, using tokens from the ring.
1476 require.Equal(t, ACTIVE, l.GetState())
1477 require.Equal(t, origTokens, l.getTokens())
1478 require.Equal(t, registeredAt.Truncate(time.Second), l.getRegisteredAt())
1479
1480 // check that ring entry has updated address and state
1481 desc, err := ringStore.Get(context.Background(), ringKey)
1482 require.NoError(t, err)
1483
1484 r := GetOrCreateRingDesc(desc)
1485 require.Equal(t, lifecyclerConfig.ID, r.Ingesters[id].Id)
1486 require.Equal(t, ACTIVE, r.Ingesters[id].State)
1487 require.Equal(t, "1.1.1.1:111", r.Ingesters[id].Addr)
1488 require.Equal(t, "new", r.Ingesters[id].Zone)
1489 require.Equal(t, registeredAt.Unix(), r.Ingesters[id].RegisteredTimestamp)
1490}
1491

Callers

nothing calls this directly

Calls 15

CheckReadyMethod · 0.95
GetStateMethod · 0.95
getTokensMethod · 0.95
getRegisteredAtMethod · 0.95
NewInMemoryClientFunction · 0.92
DefaultValuesFunction · 0.92
StartAndAwaitRunningFunction · 0.92
StopAndAwaitTerminatedFunction · 0.92
PollFunction · 0.92
GetCodecFunction · 0.85
initTokenGeneratorFunction · 0.85
GetOrCreateRingDescFunction · 0.85

Tested by

no test coverage detected