|
@@ -759,16 +759,21 @@ func ValidateClusterAndAssignIDs(lg *zap.Logger, local *RaftCluster, existing *R
|
|
|
if len(ems) != len(lms) {
|
|
if len(ems) != len(lms) {
|
|
|
return fmt.Errorf("member count is unequal")
|
|
return fmt.Errorf("member count is unequal")
|
|
|
}
|
|
}
|
|
|
- sort.Sort(MembersByPeerURLs(ems))
|
|
|
|
|
- sort.Sort(MembersByPeerURLs(lms))
|
|
|
|
|
|
|
|
|
|
ctx, cancel := context.WithTimeout(context.TODO(), 30*time.Second)
|
|
ctx, cancel := context.WithTimeout(context.TODO(), 30*time.Second)
|
|
|
defer cancel()
|
|
defer cancel()
|
|
|
for i := range ems {
|
|
for i := range ems {
|
|
|
- if ok, err := netutil.URLStringsEqual(ctx, lg, ems[i].PeerURLs, lms[i].PeerURLs); !ok {
|
|
|
|
|
- return fmt.Errorf("unmatched member while checking PeerURLs (%v)", err)
|
|
|
|
|
|
|
+ var err error
|
|
|
|
|
+ ok := false
|
|
|
|
|
+ for j := range lms {
|
|
|
|
|
+ if ok, err = netutil.URLStringsEqual(ctx, lg, ems[i].PeerURLs, lms[j].PeerURLs); ok {
|
|
|
|
|
+ lms[j].ID = ems[i].ID
|
|
|
|
|
+ break
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if !ok {
|
|
|
|
|
+ return fmt.Errorf("PeerURLs: no match found for existing member (%v, %v), last resolver error (%v)", ems[i].ID, ems[i].PeerURLs, err)
|
|
|
}
|
|
}
|
|
|
- lms[i].ID = ems[i].ID
|
|
|
|
|
}
|
|
}
|
|
|
local.members = make(map[types.ID]*Member)
|
|
local.members = make(map[types.ID]*Member)
|
|
|
for _, m := range lms {
|
|
for _, m := range lms {
|