From 5472555186a91bdbedcf4c1890cf483a9e21467d Mon Sep 17 00:00:00 2001 From: Manuel de Brito Fontes Date: Mon, 29 May 2017 12:22:30 -0400 Subject: [PATCH] Avoid checking if the controllers are synced --- core/pkg/ingress/controller/backend_ssl.go | 7 ------ core/pkg/ingress/controller/controller.go | 27 +++++++++++----------- 2 files changed, 13 insertions(+), 21 deletions(-) diff --git a/core/pkg/ingress/controller/backend_ssl.go b/core/pkg/ingress/controller/backend_ssl.go index aadebd8368..8ce21bb9b3 100644 --- a/core/pkg/ingress/controller/backend_ssl.go +++ b/core/pkg/ingress/controller/backend_ssl.go @@ -20,7 +20,6 @@ import ( "fmt" "reflect" "strings" - "time" "github.com/golang/glog" @@ -37,12 +36,6 @@ import ( func (ic *GenericController) syncSecret() { glog.V(3).Infof("starting syncing of secrets") - if !ic.controllersInSync() { - time.Sleep(podStoreSyncedPollPeriod) - glog.Warningf("deferring sync till endpoints controller has synced") - return - } - var cert *ingress.SSLCert var err error diff --git a/core/pkg/ingress/controller/controller.go b/core/pkg/ingress/controller/controller.go index aad79c34ca..8c910a48ad 100644 --- a/core/pkg/ingress/controller/controller.go +++ b/core/pkg/ingress/controller/controller.go @@ -30,6 +30,7 @@ import ( "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/util/intstr" + "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" clientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/scheme" @@ -322,15 +323,6 @@ func newIngressController(config *Configuration) *GenericController { return &ic } -func (ic *GenericController) controllersInSync() bool { - return ic.ingController.HasSynced() && - ic.svcController.HasSynced() && - ic.endpController.HasSynced() && - ic.secrController.HasSynced() && - ic.mapController.HasSynced() && - ic.nodeController.HasSynced() -} - // Info returns information about the backend func (ic GenericController) Info() *ingress.BackendInfo { return ic.cfg.Backend.Info() @@ -379,11 +371,6 @@ func (ic *GenericController) syncIngress(key interface{}) error { return nil } - if !ic.controllersInSync() { - time.Sleep(podStoreSyncedPollPeriod) - return fmt.Errorf("deferring sync till endpoints controller has synced") - } - upstreams, servers := ic.getBackendServers() var passUpstreams []*ingress.SSLPassthroughBackend for _, server := range servers { @@ -1167,6 +1154,18 @@ func (ic GenericController) Start() { go ic.secrController.Run(ic.stopCh) go ic.mapController.Run(ic.stopCh) + // Wait for all involved caches to be synced, before processing items from the queue is started + if !cache.WaitForCacheSync(ic.stopCh, + ic.ingController.HasSynced, + ic.svcController.HasSynced, + ic.endpController.HasSynced, + ic.secrController.HasSynced, + ic.mapController.HasSynced, + ic.nodeController.HasSynced, + ) { + runtime.HandleError(fmt.Errorf("Timed out waiting for caches to sync")) + } + go ic.syncQueue.Run(10*time.Second, ic.stopCh) go wait.Forever(ic.syncSecret, 10*time.Second)