Browse Source

fix bug: two same volumeId in different collections

1, there will be two leader when master server startup in a few seconds
2, raft server will get a leader even there is only one master, so there is no need to do hard code to set the server to be leader
pull/1419/head
cheng.li01 4 years ago
parent
commit
25fbff5d52
  1. 27
      weed/topology/topology.go

27
weed/topology/topology.go

@ -5,6 +5,7 @@ import (
"fmt"
"math/rand"
"sync"
"time"
"github.com/chrislusf/raft"
@ -65,26 +66,26 @@ func (t *Topology) IsLeader() bool {
if t.RaftServer.State() == raft.Leader {
return true
}
if t.RaftServer.Leader() == "" {
return true
}
}
return false
}
func (t *Topology) Leader() (string, error) {
l := ""
if t.RaftServer != nil {
l = t.RaftServer.Leader()
} else {
return "", errors.New("Raft Server not ready yet!")
}
if l == "" {
// We are a single node cluster, we are the leader
return t.RaftServer.Name(), nil
count := 3
for count > 0 {
if t.RaftServer != nil {
l = t.RaftServer.Leader()
} else {
return "", errors.New("Raft Server not ready yet!")
}
if l != "" {
break
} else {
time.Sleep(time.Duration(5-count) * time.Second)
}
count -= 1
}
return l, nil
}

Loading…
Cancel
Save