The joinMembersOnStartup method resolves the addresses of the given join_members hosts and asks memberlist to join to them. This method cannot be called before KV.running state as it may wait for K8S DNS to resolve the service addresses of members running this very method. Which means the service ne
(ctx context.Context)
| 791 | // This method cannot be called before KV.running state as it may wait for K8S DNS to resolve the service addresses of members |
| 792 | // running this very method. Which means the service needs to be READY for K8S to add it to DNS. |
| 793 | func (m *KV) joinMembersOnStartup(ctx context.Context) bool { |
| 794 | // Trigger a hook used for testing. |
| 795 | if m.cfg.beforeJoinMembersOnStartupHook != nil { |
| 796 | m.cfg.beforeJoinMembersOnStartupHook(ctx) |
| 797 | } |
| 798 | |
| 799 | if len(m.cfg.JoinMembers) == 0 { |
| 800 | return true |
| 801 | } |
| 802 | |
| 803 | logger := log.With(m.logger, "phase", "startup") |
| 804 | level.Info(logger).Log("msg", "joining memberlist cluster", "join_members", strings.Join(m.cfg.JoinMembers, ",")) |
| 805 | startTime := time.Now() |
| 806 | reached, err := m.joinMembersWithRetries(ctx, m.cfg.JoinMembers, m.cfg.MaxJoinRetries, logger) |
| 807 | if err != nil { |
| 808 | level.Error(logger).Log("msg", "joining memberlist cluster failed", "err", err, "elapsed_time", time.Since(startTime)) |
| 809 | return false |
| 810 | } |
| 811 | level.Info(logger).Log("msg", "joining memberlist cluster succeeded", "reached_nodes", reached, "elapsed_time", time.Since(startTime)) |
| 812 | return true |
| 813 | } |
| 814 | |
| 815 | // joinMembersWithRetries joins the given members 100 at a time. After each batch of 100 it rediscovers the members. |
| 816 | // This helps when the list of members is big and by the time we reach the end the originally resolved addresses may be obsolete. |
no test coverage detected