Provides a dns-based member discovery to join a memberlist cluster w/o knowning members' addresses upfront. May both return some addresses and an error in case of a partial resolution.
(ctx context.Context, members []string)
| 924 | // Provides a dns-based member discovery to join a memberlist cluster w/o knowning members' addresses upfront. |
| 925 | // May both return some addresses and an error in case of a partial resolution. |
| 926 | func (m *KV) discoverMembers(ctx context.Context, members []string) ([]string, error) { |
| 927 | if len(members) == 0 { |
| 928 | return nil, nil |
| 929 | } |
| 930 | |
| 931 | var ms, resolve []string |
| 932 | |
| 933 | for _, member := range members { |
| 934 | if strings.Contains(member, "+") { |
| 935 | resolve = append(resolve, member) |
| 936 | } else { |
| 937 | // No DNS SRV record to lookup, just append member |
| 938 | ms = append(ms, member) |
| 939 | } |
| 940 | } |
| 941 | |
| 942 | err := m.provider.Resolve(ctx, resolve) |
| 943 | if err != nil { |
| 944 | level.Warn(m.logger).Log("msg", "failed to resolve members", "addrs", strings.Join(resolve, ","), "err", err) |
| 945 | } |
| 946 | |
| 947 | ms = append(ms, m.provider.Addresses()...) |
| 948 | |
| 949 | return ms, err |
| 950 | } |
| 951 | |
| 952 | // Like discoverMembers() but retries (up to 10 times) on error. |
| 953 | func (m *KV) discoverMembersWithRetries(ctx context.Context, members []string) ([]string, error) { |
no test coverage detected