Add network policy controller CacheSyncOrTimeout

This commit is contained in:
Erik Wilson 2020-10-07 12:35:44 -07:00
parent 045cd49ab5
commit e26e333b7e
No known key found for this signature in database
GPG Key ID: 28E43BB8BE202CF8
2 changed files with 22 additions and 0 deletions

View File

@ -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)

View File

@ -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
}
}