raft: use the first master to bootstrap the election

This commit is contained in:
Chris Lu 2019-02-09 12:52:09 -08:00
parent 744abc2690
commit 8afc632484

View file

@ -3,7 +3,6 @@ package weed_server
import ( import (
"encoding/json" "encoding/json"
"io/ioutil" "io/ioutil"
"math/rand"
"os" "os"
"path" "path"
"reflect" "reflect"
@ -71,8 +70,8 @@ func NewRaftServer(r *mux.Router, peers []string, httpAddr string, dataDir strin
for _, peer := range s.peers { for _, peer := range s.peers {
s.raftServer.AddPeer(peer, "http://"+peer) s.raftServer.AddPeer(peer, "http://"+peer)
} }
time.Sleep(time.Duration(1000+rand.Int31n(3000)) * time.Millisecond)
if s.raftServer.IsLogEmpty() { if s.raftServer.IsLogEmpty() && isTheFirstOne(httpAddr, s.peers) {
// Initialize the server by joining itself. // Initialize the server by joining itself.
glog.V(0).Infoln("Initializing new cluster") glog.V(0).Infoln("Initializing new cluster")
@ -129,3 +128,11 @@ func isPeersChanged(dir string, self string, peers []string) (oldPeers []string,
return oldPeers, !reflect.DeepEqual(peers, oldPeers) return oldPeers, !reflect.DeepEqual(peers, oldPeers)
} }
func isTheFirstOne(self string, peers []string) bool {
sort.Strings(peers)
if len(peers)<=0{
return true
}
return self == peers[0]
}