|
@@ -25,13 +25,7 @@ import (
|
|
|
// isConnectedToQuorumSince checks whether the local member is connected to the
|
|
// isConnectedToQuorumSince checks whether the local member is connected to the
|
|
|
// quorum of the cluster since the given time.
|
|
// quorum of the cluster since the given time.
|
|
|
func isConnectedToQuorumSince(transport rafthttp.Transporter, since time.Time, self types.ID, members []*membership.Member) bool {
|
|
func isConnectedToQuorumSince(transport rafthttp.Transporter, since time.Time, self types.ID, members []*membership.Member) bool {
|
|
|
- var connectedNum int
|
|
|
|
|
- for _, m := range members {
|
|
|
|
|
- if m.ID == self || isConnectedSince(transport, since, m.ID) {
|
|
|
|
|
- connectedNum++
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- return connectedNum >= (len(members)+1)/2
|
|
|
|
|
|
|
+ return numConnectedSince(transport, since, self, members) >= (len(members)/2)+1
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// isConnectedSince checks whether the local member is connected to the
|
|
// isConnectedSince checks whether the local member is connected to the
|
|
@@ -44,10 +38,17 @@ func isConnectedSince(transport rafthttp.Transporter, since time.Time, remote ty
|
|
|
// isConnectedFullySince checks whether the local member is connected to all
|
|
// isConnectedFullySince checks whether the local member is connected to all
|
|
|
// members in the cluster since the given time.
|
|
// members in the cluster since the given time.
|
|
|
func isConnectedFullySince(transport rafthttp.Transporter, since time.Time, self types.ID, members []*membership.Member) bool {
|
|
func isConnectedFullySince(transport rafthttp.Transporter, since time.Time, self types.ID, members []*membership.Member) bool {
|
|
|
|
|
+ return numConnectedSince(transport, since, self, members) == len(members)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// numConnectedSince counts how many members are connected to the local member
|
|
|
|
|
+// since the given time.
|
|
|
|
|
+func numConnectedSince(transport rafthttp.Transporter, since time.Time, self types.ID, members []*membership.Member) int {
|
|
|
|
|
+ connectedNum := 0
|
|
|
for _, m := range members {
|
|
for _, m := range members {
|
|
|
- if m.ID != self && !isConnectedSince(transport, since, m.ID) {
|
|
|
|
|
- return false
|
|
|
|
|
|
|
+ if m.ID == self || isConnectedSince(transport, since, m.ID) {
|
|
|
|
|
+ connectedNum++
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- return true
|
|
|
|
|
|
|
+ return connectedNum
|
|
|
}
|
|
}
|