Add network policy controller CacheSyncOrTimeout

parent 045cd49a
......@@ -1683,6 +1683,10 @@ func NewNetworkPolicyController(
npInformer := informerFactory.Networking().V1().NetworkPolicies().Informer()
informerFactory.Start(stopCh)
if err := CacheSyncOrTimeout(informerFactory, stopCh, 1*time.Minute); err != nil {
return nil, errors.New("Failed to synchronize cache: " + err.Error())
}
// if config.MetricsEnabled {
// //Register the metrics for this controller
// prometheus.MustRegister(metrics.ControllerIPtablesSyncTime)
......
......@@ -12,8 +12,10 @@ import (
"net"
"os/exec"
"strings"
"time"
apiv1 "k8s.io/api/core/v1"
"k8s.io/client-go/informers"
)
var (
......@@ -537,3 +539,19 @@ func GetNodeIP(node *apiv1.Node) (net.IP, error) {
}
return nil, errors.New("host IP unknown")
}
// CacheSync performs cache synchronization under timeout limit
func CacheSyncOrTimeout(informerFactory informers.SharedInformerFactory, stopCh <-chan struct{}, cacheSyncTimeout time.Duration) error {
syncOverCh := make(chan struct{})
go func() {
informerFactory.WaitForCacheSync(stopCh)
close(syncOverCh)
}()
select {
case <-time.After(cacheSyncTimeout):
return errors.New(cacheSyncTimeout.String() + " timeout")
case <-syncOverCh:
return nil
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment