(t *testing.T)
| 1731 | } |
| 1732 | |
| 1733 | func TestWaitBeforeJoining(t *testing.T) { |
| 1734 | t.Parallel() |
| 1735 | |
| 1736 | ringStore, closer := consul.NewInMemoryClient(GetCodec(), log.NewNopLogger(), nil) |
| 1737 | t.Cleanup(func() { assert.NoError(t, closer.Close()) }) |
| 1738 | |
| 1739 | var ringConfig Config |
| 1740 | flagext.DefaultValues(&ringConfig) |
| 1741 | ringConfig.KVStore.Mock = ringStore |
| 1742 | |
| 1743 | r, err := New(ringConfig, "ingester", ringKey, log.NewNopLogger(), nil) |
| 1744 | require.NoError(t, err) |
| 1745 | require.NoError(t, services.StartAndAwaitRunning(context.Background(), r)) |
| 1746 | defer services.StopAndAwaitTerminated(context.Background(), r) //nolint:errcheck |
| 1747 | |
| 1748 | err = r.KVClient.CAS(context.Background(), ringKey, func(interface{}) (interface{}, bool, error) { |
| 1749 | r := &Desc{ |
| 1750 | Ingesters: map[string]InstanceDesc{ |
| 1751 | instanceName(0, 1): { |
| 1752 | State: ACTIVE, |
| 1753 | Tokens: []uint32{1, 2, 3}, |
| 1754 | }, |
| 1755 | instanceName(1, 1): { |
| 1756 | State: ACTIVE, |
| 1757 | Tokens: []uint32{4, 5, 6}, |
| 1758 | }, |
| 1759 | }, |
| 1760 | } |
| 1761 | |
| 1762 | return r, true, nil |
| 1763 | }) |
| 1764 | require.NoError(t, err) |
| 1765 | |
| 1766 | targetZone := zone(1) |
| 1767 | spreadMinimizingZones := []string{zone(1), zone(2), zone(3)} |
| 1768 | canJoinTimeout := 5 * time.Second |
| 1769 | spreadMinimizingTokenGenerator := func(targetInstanceID string, canJoinEnabled bool) TokenGenerator { |
| 1770 | tokenGenerator, err := NewSpreadMinimizingTokenGenerator(targetInstanceID, targetZone, spreadMinimizingZones, canJoinEnabled) |
| 1771 | require.NoError(t, err) |
| 1772 | return tokenGenerator |
| 1773 | } |
| 1774 | |
| 1775 | tests := map[string]struct { |
| 1776 | targetInstanceID string |
| 1777 | tokenGenerator TokenGenerator |
| 1778 | timeoutRequired bool |
| 1779 | errorRequired bool |
| 1780 | }{ |
| 1781 | "RandomTokenGenerator never returns errors": { |
| 1782 | targetInstanceID: instanceName(3, 1), |
| 1783 | tokenGenerator: initTokenGenerator(t), |
| 1784 | }, |
| 1785 | "SpreadMinimizingTokenGenerator with CanJoinEnabled=false never returns errors": { |
| 1786 | targetInstanceID: instanceName(3, 1), |
| 1787 | tokenGenerator: spreadMinimizingTokenGenerator(instanceName(2, 1), false), |
| 1788 | }, |
| 1789 | "SpreadMinimizingTokenGenerator with CanJoinEnabled=true returns nil when the first instance joins": { |
| 1790 | targetInstanceID: instanceName(0, 1), |
nothing calls this directly
no test coverage detected