Files
releases/util/wait.go
T
mikaelcabot 47ecd762d7 feat: server wait for plugins
A new flag introduced `ready-timeout`.
This flag controls if and for how long OPA server will wait for
configured bundles and plugins to be activated/ready before listening for traffic.
A value of 0 or less means no wait is exercised.

Signed-off-by: mikaelcabot <mikaelcabot@gmail.com>
2020-08-06 14:34:27 -07:00

35 lines
742 B
Go

// Copyright 2020 The OPA Authors. All rights reserved.
// Use of this source code is governed by an Apache2
// license that can be found in the LICENSE file.
package util
import (
"fmt"
"time"
)
// WaitFunc will call passed function at an interval and return nil
// as soon this function returns true.
// If timeout is reached before the passed in function returns true
// an error is returned.
func WaitFunc(fun func() bool, interval, timeout time.Duration) error {
if fun() {
return nil
}
ticker := time.NewTicker(interval)
timer := time.NewTimer(timeout)
defer ticker.Stop()
defer timer.Stop()
for {
select {
case <-timer.C:
return fmt.Errorf("timeout")
case <-ticker.C:
if fun() {
return nil
}
}
}
}