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:
parent
6716626d32
commit
4f3fb7ee6a
1 changed files with 36 additions and 15 deletions
|
@ -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])
|
||||||
|
maxRetry, _ := strconv.Atoi(args[1])
|
||||||
|
for retry := 0; retry < maxRetry; retry++ {
|
||||||
// check all the nodes
|
// check all the nodes
|
||||||
for _, ip := range ips {
|
for _, ip := range ips {
|
||||||
go clusterPeersNumber(ip, servicePort, doneCh)
|
go clusterPeersNumber(ip, servicePort, 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 {
|
||||||
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 {
|
||||||
|
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":
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue