From caef02cf43e4a05b48a8a8aeaa78f86b7844975d Mon Sep 17 00:00:00 2001 From: "Madhusudan.C.S" Date: Sat, 29 Oct 2016 18:15:11 -0700 Subject: [PATCH] [Federation][init-06] Check for the availability of federation API server's service loadbalancer address before waiting. This speeds up the tests. Otherwise tests end up unnecessarily waiting for the poll interval/duration which is 5 seconds right now. --- federation/pkg/kubefed/init/init.go | 2 +- pkg/util/wait/wait.go | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/federation/pkg/kubefed/init/init.go b/federation/pkg/kubefed/init/init.go index e5c819cba3..ad2a8475fd 100644 --- a/federation/pkg/kubefed/init/init.go +++ b/federation/pkg/kubefed/init/init.go @@ -242,7 +242,7 @@ func waitForLoadBalancerAddress(clientset *client.Clientset, svc *api.Service) ( ips := []string{} hostnames := []string{} - err := wait.PollInfinite(lbAddrRetryInterval, func() (bool, error) { + err := wait.PollImmediateInfinite(lbAddrRetryInterval, func() (bool, error) { pollSvc, err := clientset.Core().Services(svc.Namespace).Get(svc.Name) if err != nil { return false, nil diff --git a/pkg/util/wait/wait.go b/pkg/util/wait/wait.go index 65f2e0b761..34d833b44d 100644 --- a/pkg/util/wait/wait.go +++ b/pkg/util/wait/wait.go @@ -192,6 +192,20 @@ func PollInfinite(interval time.Duration, condition ConditionFunc) error { return PollUntil(interval, condition, done) } +// PollImmediateInfinite is identical to PollInfinite, except that it +// performs the first check immediately, not waiting interval +// beforehand. +func PollImmediateInfinite(interval time.Duration, condition ConditionFunc) error { + done, err := condition() + if err != nil { + return err + } + if done { + return nil + } + return PollInfinite(interval, condition) +} + // PollUntil is like Poll, but it takes a stop change instead of total duration func PollUntil(interval time.Duration, condition ConditionFunc, stopCh <-chan struct{}) error { return WaitFor(poller(interval, 0), condition, stopCh)