aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--weed/server/master_server.go3
-rw-r--r--weed/server/raft_server.go13
2 files changed, 13 insertions, 3 deletions
diff --git a/weed/server/master_server.go b/weed/server/master_server.go
index f22925e56..492bb76e9 100644
--- a/weed/server/master_server.go
+++ b/weed/server/master_server.go
@@ -98,6 +98,9 @@ func (ms *MasterServer) SetRaftServer(raftServer *RaftServer) {
glog.V(0).Infoln("[", ms.Topo.RaftServer.Name(), "]", ms.Topo.RaftServer.Leader(), "becomes leader.")
}
})
+ ms.Topo.RaftServer.AddEventListener(raft.StateChangeEventType, func(e raft.Event) {
+ glog.V(0).Infof("state change: %+v", e)
+ })
if ms.Topo.IsLeader() {
glog.V(0).Infoln("[", ms.Topo.RaftServer.Name(), "]", "I am the leader!")
} else {
diff --git a/weed/server/raft_server.go b/weed/server/raft_server.go
index ca1792ac6..c332da38e 100644
--- a/weed/server/raft_server.go
+++ b/weed/server/raft_server.go
@@ -3,7 +3,6 @@ package weed_server
import (
"encoding/json"
"io/ioutil"
- "math/rand"
"os"
"path"
"reflect"
@@ -71,8 +70,8 @@ func NewRaftServer(r *mux.Router, peers []string, httpAddr string, dataDir strin
for _, peer := range s.peers {
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.
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)
}
+
+func isTheFirstOne(self string, peers []string) bool {
+ sort.Strings(peers)
+ if len(peers)<=0{
+ return true
+ }
+ return self == peers[0]
+}