diff --git a/etcdserver/membership/cluster.go b/etcdserver/membership/cluster.go index 4e757725d..25c45dfce 100644 --- a/etcdserver/membership/cluster.go +++ b/etcdserver/membership/cluster.go @@ -24,6 +24,9 @@ import ( "sort" "strings" "sync" + "time" + + "golang.org/x/net/context" "github.com/coreos/etcd/mvcc/backend" "github.com/coreos/etcd/pkg/netutil" @@ -484,8 +487,10 @@ func ValidateClusterAndAssignIDs(local *RaftCluster, existing *RaftCluster) erro sort.Sort(MembersByPeerURLs(ems)) sort.Sort(MembersByPeerURLs(lms)) + ctx, cancel := context.WithTimeout(context.TODO(), 30*time.Second) + defer cancel() for i := range ems { - if !netutil.URLStringsEqual(ems[i].PeerURLs, lms[i].PeerURLs) { + if !netutil.URLStringsEqual(ctx, ems[i].PeerURLs, lms[i].PeerURLs) { return fmt.Errorf("unmatched member while checking PeerURLs") } lms[i].ID = ems[i].ID