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

Add retry to cluster-peers

Add retry field to cluster-peers probe

Signed-off-by: Flavio Crisciani <flavio.crisciani@docker.com>
This commit is contained in:
Flavio Crisciani 2018-06-20 21:54:15 -07:00
parent 6716626d32
commit 4f3fb7ee6a

View file

@ -310,19 +310,33 @@ func doJoin(ips []string) {
close(doneCh)
}
// cluster-peers expectedNumberPeers
// cluster-peers expectedNumberPeers maxRetry
func doClusterPeers(ips []string, args []string) {
doneCh := make(chan resultTuple, len(ips))
expectedPeers, _ := strconv.Atoi(args[0])
maxRetry, _ := strconv.Atoi(args[1])
for retry := 0; retry < maxRetry; retry++ {
// check all the nodes
for _, ip := range ips {
go clusterPeersNumber(ip, servicePort, doneCh)
}
var failed bool
// wait for the readiness of all nodes
for i := len(ips); i > 0; i-- {
node := <-doneCh
if node.result != expectedPeers {
failed = true
if retry == maxRetry-1 {
log.Fatalf("Expected peers from %s missmatch %d != %d", node.id, expectedPeers, node.result)
} else {
logrus.Warnf("Expected peers from %s missmatch %d != %d", node.id, expectedPeers, node.result)
}
time.Sleep(1 * time.Second)
}
}
// check if needs retry
if !failed {
break
}
}
close(doneCh)
@ -356,7 +370,7 @@ func doLeaveNetwork(ips []string, args []string) {
close(doneCh)
}
// cluster-peers networkName expectedNumberPeers maxRetry
// network-peers networkName expectedNumberPeers maxRetry
func doNetworkPeers(ips []string, args []string) {
doneCh := make(chan resultTuple, len(ips))
networkName := args[0]
@ -367,10 +381,12 @@ func doNetworkPeers(ips []string, args []string) {
for _, ip := range ips {
go networkPeersNumber(ip, servicePort, networkName, doneCh)
}
var failed bool
// wait for the readiness of all nodes
for i := len(ips); i > 0; i-- {
node := <-doneCh
if node.result != expectedPeers {
failed = true
if retry == maxRetry-1 {
log.Fatalf("Expected peers from %s missmatch %d != %d", node.id, expectedPeers, node.result)
} else {
@ -379,6 +395,10 @@ func doNetworkPeers(ips []string, args []string) {
time.Sleep(1 * time.Second)
}
}
// check if needs retry
if !failed {
break
}
}
close(doneCh)
}
@ -618,8 +638,9 @@ var cmdArgChec = map[string]int{
"leave": 2,
"join-network": 3,
"leave-network": 3,
"cluster-peers": 3,
"write-delete-unique-keys": 4,
"cluster-peers": 5,
"network-peers": 5,
"write-delete-unique-keys": 7,
}
// Client is a client
@ -628,7 +649,7 @@ func Client(args []string) {
command := args[0]
if len(args) < cmdArgChec[command] {
log.Fatalf("Command %s requires %d arguments, aborting...", command, cmdArgChec[command])
log.Fatalf("Command %s requires %d arguments, passed %d, aborting...", command, cmdArgChec[command], len(args))
}
switch command {
@ -656,7 +677,7 @@ func Client(args []string) {
case "leave":
case "cluster-peers":
// cluster-peers
// cluster-peers maxRetry
doClusterPeers(ips, commandArgs)
case "join-network":