mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2025-09-20 07:47:58 +08:00
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
This commit is contained in:
@@ -5,6 +5,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"sync"
|
"sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/chrislusf/raft"
|
"github.com/chrislusf/raft"
|
||||||
|
|
||||||
@@ -65,26 +66,26 @@ func (t *Topology) IsLeader() bool {
|
|||||||
if t.RaftServer.State() == raft.Leader {
|
if t.RaftServer.State() == raft.Leader {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if t.RaftServer.Leader() == "" {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Topology) Leader() (string, error) {
|
func (t *Topology) Leader() (string, error) {
|
||||||
l := ""
|
l := ""
|
||||||
if t.RaftServer != nil {
|
count := 3
|
||||||
l = t.RaftServer.Leader()
|
for count > 0 {
|
||||||
} else {
|
if t.RaftServer != nil {
|
||||||
return "", errors.New("Raft Server not ready yet!")
|
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
|
||||||
}
|
}
|
||||||
|
|
||||||
if l == "" {
|
|
||||||
// We are a single node cluster, we are the leader
|
|
||||||
return t.RaftServer.Name(), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return l, nil
|
return l, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user