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