1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Make reachable/unreachable condition more readable

Introducing methods to make the intent of the condition clearer to the
eyes of the reader 👼.

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
This commit is contained in:
Vincent Demeester 2016-08-19 22:49:58 +02:00
parent bf61c916ee
commit 82a451bc94
No known key found for this signature in database
GPG key ID: 083CC6FD6EB699A3

View file

@ -509,6 +509,14 @@ func (c *Cluster) stopNode() error {
return nil return nil
} }
func removingManagerCausesLossOfQuorum(reachable, unreachable int) bool {
return reachable-2 <= unreachable
}
func isLastManager(reachable, unreachable int) bool {
return reachable == 1 && unreachable == 0
}
// Leave shuts down Cluster and removes current state. // Leave shuts down Cluster and removes current state.
func (c *Cluster) Leave(force bool) error { func (c *Cluster) Leave(force bool) error {
c.Lock() c.Lock()
@ -523,8 +531,8 @@ func (c *Cluster) Leave(force bool) error {
if c.isActiveManager() { if c.isActiveManager() {
active, reachable, unreachable, err := c.managerStats() active, reachable, unreachable, err := c.managerStats()
if err == nil { if err == nil {
if active && reachable-2 <= unreachable { if active && removingManagerCausesLossOfQuorum(reachable, unreachable) {
if reachable == 1 && unreachable == 0 { if isLastManager(reachable, unreachable) {
msg += "Removing the last manager erases all current state of the swarm. Use `--force` to ignore this message. " msg += "Removing the last manager erases all current state of the swarm. Use `--force` to ignore this message. "
c.Unlock() c.Unlock()
return fmt.Errorf(msg) return fmt.Errorf(msg)
@ -1270,8 +1278,8 @@ func (c *Cluster) Cleanup() {
if c.isActiveManager() { if c.isActiveManager() {
active, reachable, unreachable, err := c.managerStats() active, reachable, unreachable, err := c.managerStats()
if err == nil { if err == nil {
singlenode := active && reachable == 1 && unreachable == 0 singlenode := active && isLastManager(reachable, unreachable)
if active && !singlenode && reachable-2 <= unreachable { if active && !singlenode && removingManagerCausesLossOfQuorum(reachable, unreachable) {
logrus.Errorf("Leaving cluster with %v managers left out of %v. Raft quorum will be lost.", reachable-1, reachable+unreachable) logrus.Errorf("Leaving cluster with %v managers left out of %v. Raft quorum will be lost.", reachable-1, reachable+unreachable)
} }
} }