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

Function TestAutoJoinWithSpreadMinimizingTokenGenerator

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

Source from the content-addressed store, hash-verified

1847}
1848
1849func TestAutoJoinWithSpreadMinimizingTokenGenerator(t *testing.T) {
1850 t.Parallel()
1851
1852 canJoinDelay := 1 * time.Second
1853 canJoinTimeout := 5 * time.Second
1854 ringStore, closer := consul.NewInMemoryClient(GetCodec(), log.NewNopLogger(), nil)
1855 t.Cleanup(func() { assert.NoError(t, closer.Close()) })
1856
1857 var ringConfig Config
1858 flagext.DefaultValues(&ringConfig)
1859 ringConfig.KVStore.Mock = ringStore
1860
1861 r, err := New(ringConfig, "ingester", ringKey, log.NewNopLogger(), nil)
1862 require.NoError(t, err)
1863 require.NoError(t, services.StartAndAwaitRunning(context.Background(), r))
1864 defer services.StopAndAwaitTerminated(context.Background(), r) //nolint:errcheck
1865
1866 var (
1867 firstInstanceRegistrationTimestamp time.Time
1868 secondInstanceRegistrationTimestamp time.Time
1869 firstInstanceID = instanceName(0, 1)
1870 secondInstanceID = instanceName(1, 1)
1871 wg sync.WaitGroup
1872 )
1873 wg.Add(1)
1874 go func() {
1875 var (
1876 firstInstanceRegistered = atomic.NewBool(false)
1877 secondInstanceRegistered = atomic.NewBool(false)
1878 )
1879 test.Poll(t, 20*time.Second, true, func() interface{} {
1880 d, err := r.KVClient.Get(context.Background(), ringKey)
1881 require.NoError(t, err)
1882
1883 desc, ok := d.(*Desc)
1884 if !ok {
1885 return false
1886 }
1887
1888 firstInstanceDesc, ok := desc.Ingesters[firstInstanceID]
1889 if ok && firstInstanceDesc.State == ACTIVE && len(firstInstanceDesc.Tokens) != 0 {
1890 if firstInstanceRegistered.CompareAndSwap(false, true) {
1891 firstInstanceRegistrationTimestamp = time.Now()
1892 }
1893 }
1894
1895 secondInstanceDesc, ok := desc.Ingesters[secondInstanceID]
1896 if ok && secondInstanceDesc.State == ACTIVE && len(secondInstanceDesc.Tokens) != 0 {
1897 if secondInstanceRegistered.CompareAndSwap(false, true) {
1898 secondInstanceRegistrationTimestamp = time.Now()
1899 }
1900 }
1901
1902 return firstInstanceRegistered.Load() && secondInstanceRegistered.Load()
1903 })
1904 wg.Done()
1905 }()
1906

Callers

nothing calls this directly

Calls 15

NewInMemoryClientFunction · 0.92
DefaultValuesFunction · 0.92
StartAndAwaitRunningFunction · 0.92
StopAndAwaitTerminatedFunction · 0.92
PollFunction · 0.92
GetCodecFunction · 0.85
instanceNameFunction · 0.85
testLifecyclerConfigFunction · 0.85
NewLifecyclerFunction · 0.85
NewFunction · 0.70

Tested by

no test coverage detected