@@ -411,7 +411,7 @@ func (m *KV) buildMemberlistConfig() (*memberlist.Config, error) {
411411 return mlCfg , nil
412412}
413413
414- func (m * KV ) starting (_ context.Context ) error {
414+ func (m * KV ) starting (ctx context.Context ) error {
415415 mlCfg , err := m .buildMemberlistConfig ()
416416 if err != nil {
417417 return err
@@ -438,6 +438,15 @@ func (m *KV) starting(_ context.Context) error {
438438 }
439439 m .initWG .Done ()
440440
441+ if len (m .cfg .JoinMembers ) > 0 {
442+ // Lookup SRV records for given addresses to discover members.
443+ members := m .discoverMembers (ctx , m .cfg .JoinMembers )
444+
445+ err := m .joinMembersOnStarting (members )
446+ if err != nil {
447+ level .Warn (m .logger ).Log ("msg" , "failed to join memberlist cluster on startup" , "err" , err )
448+ }
449+ }
441450 return nil
442451}
443452
@@ -450,7 +459,7 @@ func (m *KV) running(ctx context.Context) error {
450459 // Lookup SRV records for given addresses to discover members.
451460 members := m .discoverMembers (ctx , m .cfg .JoinMembers )
452461
453- err := m .joinMembersOnStartup (ctx , members )
462+ err := m .joinMembersOnRunning (ctx , members )
454463 if err != nil {
455464 level .Error (m .logger ).Log ("msg" , "failed to join memberlist cluster" , "err" , err )
456465
@@ -517,7 +526,7 @@ func (m *KV) JoinMembers(members []string) (int, error) {
517526 return m .memberlist .Join (members )
518527}
519528
520- func (m * KV ) joinMembersOnStartup (ctx context.Context , members []string ) error {
529+ func (m * KV ) joinMembersOnRunning (ctx context.Context , members []string ) error {
521530 reached , err := m .memberlist .Join (members )
522531 if err == nil {
523532 level .Info (m .logger ).Log ("msg" , "joined memberlist cluster" , "reached_nodes" , reached )
@@ -556,6 +565,16 @@ func (m *KV) joinMembersOnStartup(ctx context.Context, members []string) error {
556565 return lastErr
557566}
558567
568+ func (m * KV ) joinMembersOnStarting (members []string ) error {
569+ reached , err := m .memberlist .Join (members )
570+ if err == nil {
571+ level .Info (m .logger ).Log ("msg" , "joined memberlist cluster" , "reached_nodes" , reached )
572+ return nil
573+ }
574+
575+ return err
576+ }
577+
559578// Provides a dns-based member disovery to join a memberlist cluster w/o knowning members' addresses upfront.
560579func (m * KV ) discoverMembers (ctx context.Context , members []string ) []string {
561580 if len (members ) == 0 {
0 commit comments