diff --git a/microcloud/cmd/microcloud/main_init.go b/microcloud/cmd/microcloud/main_init.go index 7d9b8b0e1..8a8236b7e 100644 --- a/microcloud/cmd/microcloud/main_init.go +++ b/microcloud/cmd/microcloud/main_init.go @@ -339,18 +339,23 @@ func waitForJoin(sh *service.Handler, clusterSize map[types.ServiceType]int, sec clustered[tokenInfo.Service] = false } + // Iterate over all services until the database is updated with the new node across all of them. now := time.Now() for len(clustered) != 0 { if time.Since(now) >= time.Second*30 { return fmt.Errorf("Timed out waiting for cluster member %q to appear", peer) } + // Check the size of the cluster for each service. for service := range clustered { systems, err := sh.Services[service].ClusterMembers(context.Background(), nil) if err != nil { return err } + // If the size of the cluster has been incremented by 1 from its initial value, + // then we don't need to check the corresponding service anymore. + // So remove the service from consideration and update the current cluster size for the next node. if len(systems) == clusterSize[service]+1 { delete(clustered, service) clusterSize[service] = clusterSize[service] + 1