From fce4cf4dc8d5be8b70abdcb21849c47f39d4e46d Mon Sep 17 00:00:00 2001 From: Yicheng Qin Date: Fri, 24 Apr 2015 13:06:43 -0700 Subject: [PATCH] Revert "etcdserver: fix cluster fallback recovery" This reverts commit cff005777a40bcf3a5bea3e87387273afe054ce1. --- etcdmain/etcd.go | 2 +- etcdserver/cluster.go | 8 -------- etcdserver/cluster_util.go | 17 +---------------- etcdserver/etcdhttp/peer.go | 6 +----- etcdserver/etcdhttp/peer_test.go | 4 ++-- etcdserver/server.go | 19 +++++++------------ integration/cluster_test.go | 2 +- 7 files changed, 13 insertions(+), 45 deletions(-) diff --git a/etcdmain/etcd.go b/etcdmain/etcd.go index ee27e5047..d7ebb8eed 100644 --- a/etcdmain/etcd.go +++ b/etcdmain/etcd.go @@ -191,7 +191,7 @@ func startEtcd(cfg *config) (<-chan struct{}, error) { Handler: etcdhttp.NewClientHandler(s), Info: cfg.corsInfo, } - ph := etcdhttp.NewPeerHandler(s.Cluster, etcdserver.RaftTimer(s), s.RaftHandler()) + ph := etcdhttp.NewPeerHandler(s.Cluster, s.RaftHandler()) // Start the peer server in a goroutine for _, l := range plns { go func(l net.Listener) { diff --git a/etcdserver/cluster.go b/etcdserver/cluster.go index 1b94342e0..908aeed29 100644 --- a/etcdserver/cluster.go +++ b/etcdserver/cluster.go @@ -59,12 +59,6 @@ type Cluster struct { id types.ID token string store store.Store - // index is the raft index that cluster is updated at bootstrap - // from remote cluster info. - // It may have a higher value than local raft index, because it - // displays a further view of the cluster. - // TODO: upgrade it as last modified index - index uint64 sync.Mutex // guards members and removed map members map[types.ID]*Member @@ -236,8 +230,6 @@ func (c *Cluster) SetID(id types.ID) { c.id = id } func (c *Cluster) SetStore(st store.Store) { c.store = st } -func (c *Cluster) UpdateIndex(index uint64) { c.index = index } - func (c *Cluster) Recover() { c.members, c.removed = membersFromStore(c.store) } diff --git a/etcdserver/cluster_util.go b/etcdserver/cluster_util.go index 1792769ef..9cc0a72e2 100644 --- a/etcdserver/cluster_util.go +++ b/etcdserver/cluster_util.go @@ -21,7 +21,6 @@ import ( "log" "net/http" "sort" - "strconv" "time" "github.com/coreos/etcd/pkg/types" @@ -89,21 +88,7 @@ func getClusterFromRemotePeers(urls []string, logerr bool, tr *http.Transport) ( } continue } - var index uint64 - // The header at or before v2.0.3 doesn't have this field. For backward - // compatibility, it checks whether the field exists. - if indexStr := resp.Header.Get("X-Raft-Index"); indexStr != "" { - index, err = strconv.ParseUint(indexStr, 10, 64) - if err != nil { - if logerr { - log.Printf("etcdserver: could not parse raft index: %v", err) - } - continue - } - } - cl := NewClusterFromMembers("", id, membs) - cl.UpdateIndex(index) - return cl, nil + return NewClusterFromMembers("", id, membs), nil } return nil, fmt.Errorf("etcdserver: could not retrieve cluster information from the given urls") } diff --git a/etcdserver/etcdhttp/peer.go b/etcdserver/etcdhttp/peer.go index 0b2b47707..23d7471ff 100644 --- a/etcdserver/etcdhttp/peer.go +++ b/etcdserver/etcdhttp/peer.go @@ -18,7 +18,6 @@ import ( "encoding/json" "log" "net/http" - "strconv" "github.com/coreos/etcd/etcdserver" "github.com/coreos/etcd/rafthttp" @@ -29,10 +28,9 @@ const ( ) // NewPeerHandler generates an http.Handler to handle etcd peer (raft) requests. -func NewPeerHandler(clusterInfo etcdserver.ClusterInfo, timer etcdserver.RaftTimer, raftHandler http.Handler) http.Handler { +func NewPeerHandler(clusterInfo etcdserver.ClusterInfo, raftHandler http.Handler) http.Handler { mh := &peerMembersHandler{ clusterInfo: clusterInfo, - timer: timer, } mux := http.NewServeMux() @@ -45,7 +43,6 @@ func NewPeerHandler(clusterInfo etcdserver.ClusterInfo, timer etcdserver.RaftTim type peerMembersHandler struct { clusterInfo etcdserver.ClusterInfo - timer etcdserver.RaftTimer } func (h *peerMembersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { @@ -53,7 +50,6 @@ func (h *peerMembersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { return } w.Header().Set("X-Etcd-Cluster-ID", h.clusterInfo.ID().String()) - w.Header().Set("X-Raft-Index", strconv.FormatUint(h.timer.Index(), 10)) if r.URL.Path != peerMembersPrefix { http.Error(w, "bad path", http.StatusBadRequest) diff --git a/etcdserver/etcdhttp/peer_test.go b/etcdserver/etcdhttp/peer_test.go index 850dd6677..cff85f35b 100644 --- a/etcdserver/etcdhttp/peer_test.go +++ b/etcdserver/etcdhttp/peer_test.go @@ -33,7 +33,7 @@ func TestNewPeerHandlerOnRaftPrefix(t *testing.T) { h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("test data")) }) - ph := NewPeerHandler(&fakeCluster{}, &dummyRaftTimer{}, h) + ph := NewPeerHandler(&fakeCluster{}, h) srv := httptest.NewServer(ph) defer srv.Close() @@ -91,7 +91,7 @@ func TestServeMembersGet(t *testing.T) { id: 1, members: map[uint64]*etcdserver.Member{1: &memb1, 2: &memb2}, } - h := &peerMembersHandler{clusterInfo: cluster, timer: &dummyRaftTimer{}} + h := &peerMembersHandler{clusterInfo: cluster} msb, err := json.Marshal([]etcdserver.Member{memb1, memb2}) if err != nil { t.Fatal(err) diff --git a/etcdserver/server.go b/etcdserver/server.go index 5d1082516..f57dcf509 100644 --- a/etcdserver/server.go +++ b/etcdserver/server.go @@ -170,7 +170,6 @@ func NewServer(cfg *ServerConfig) (*EtcdServer, error) { if err := ValidateClusterAndAssignIDs(cfg.Cluster, existingCluster); err != nil { return nil, fmt.Errorf("error validating peerURLs %s: %v", existingCluster, err) } - cfg.Cluster.UpdateIndex(existingCluster.index) cfg.Cluster.SetID(existingCluster.id) cfg.Cluster.SetStore(st) cfg.Print() @@ -395,19 +394,15 @@ func (s *EtcdServer) run() { if err := s.store.Recovery(rd.Snapshot.Data); err != nil { log.Panicf("recovery store error: %v", err) } + s.Cluster.Recover() - // It avoids snapshot recovery overwriting newer cluster and - // transport setting, which may block the communication. - if s.Cluster.index < rd.Snapshot.Metadata.Index { - s.Cluster.Recover() - // recover raft transport - s.r.transport.RemoveAllPeers() - for _, m := range s.Cluster.Members() { - if m.ID == s.ID() { - continue - } - s.r.transport.AddPeer(m.ID, m.PeerURLs) + // recover raft transport + s.r.transport.RemoveAllPeers() + for _, m := range s.Cluster.Members() { + if m.ID == s.ID() { + continue } + s.r.transport.AddPeer(m.ID, m.PeerURLs) } appliedi = rd.Snapshot.Metadata.Index diff --git a/integration/cluster_test.go b/integration/cluster_test.go index b7d7c7715..4f5e7db83 100644 --- a/integration/cluster_test.go +++ b/integration/cluster_test.go @@ -526,7 +526,7 @@ func (m *member) Launch() error { m.s.SyncTicker = time.Tick(500 * time.Millisecond) m.s.Start() - m.raftHandler = &testutil.PauseableHandler{Next: etcdhttp.NewPeerHandler(m.s.Cluster, m.s, m.s.RaftHandler())} + m.raftHandler = &testutil.PauseableHandler{Next: etcdhttp.NewPeerHandler(m.s.Cluster, m.s.RaftHandler())} for _, ln := range m.PeerListeners { hs := &httptest.Server{