-
Notifications
You must be signed in to change notification settings - Fork 6
/
management.go
37 lines (32 loc) · 964 Bytes
/
management.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package mrpb
import "github.com/kakao/varlog/pkg/types"
func (ci *ClusterInfo) NewerThan(other *ClusterInfo) bool {
if ci == nil || other == nil {
return false
}
if ci.AppliedIndex > other.AppliedIndex {
return true
} else if ci.AppliedIndex < other.AppliedIndex {
return false
}
// NOTE: Some endpoints are filled late, but applied indices of ClusterInfos are same.
thisEndpoints := ci.definedEndpoints()
thatEndpoints := other.definedEndpoints()
return len(thisEndpoints) > len(thatEndpoints)
}
func (ci *ClusterInfo) definedEndpoints() []string {
endpoints := make([]string, 0, len(ci.GetMembers()))
for _, member := range ci.GetMembers() {
if len(member.GetEndpoint()) > 0 {
endpoints = append(endpoints, member.GetEndpoint())
}
}
return endpoints
}
func (ci *ClusterInfo) ForEachMember(f func(types.NodeID, *ClusterInfo_Member) bool) {
for nodeID, member := range ci.GetMembers() {
if !f(nodeID, member) {
return
}
}
}