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

Method joinMembersOnStartup

kv/memberlist/memberlist_client.go:793–813  ·  view source on GitHub ↗

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)

Source from the content-addressed store, hash-verified

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.
793func (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.

Callers 1

runningMethod · 0.95

Calls 4

WithMethod · 0.80
LogMethod · 0.45
ErrorMethod · 0.45

Tested by

no test coverage detected