(t *testing.T)
| 1847 | } |
| 1848 | |
| 1849 | func 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 |
nothing calls this directly
no test coverage detected