From 669bf0773f59d5512097d092d3d14517726df44e Mon Sep 17 00:00:00 2001 From: mfanjie Date: Tue, 21 Jun 2016 09:33:09 +0800 Subject: [PATCH] add kubernetes service back when it is deleted in kubernetes cluster --- .../federation-controller/service/service_helper.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/federation/pkg/federation-controller/service/service_helper.go b/federation/pkg/federation-controller/service/service_helper.go index f6c38e7934..acf687c28f 100644 --- a/federation/pkg/federation-controller/service/service_helper.go +++ b/federation/pkg/federation-controller/service/service_helper.go @@ -68,7 +68,7 @@ func (cc *clusterClientCache) syncService(key, clusterName string, clusterCache clusterCache.serviceQueue.Add(key) return err } - var needUpdate bool + var needUpdate, isDeletion bool if exists { service, ok := serviceInterface.(*v1.Service) if ok { @@ -81,10 +81,12 @@ func (cc *clusterClientCache) syncService(key, clusterName string, clusterCache } glog.Infof("Found tombstone for %v", key) needUpdate = cc.processServiceDeletion(cachedService, clusterName) + isDeletion = true } } else { glog.Infof("Can not get service %v for cluster %s from serviceStore", key, clusterName) needUpdate = cc.processServiceDeletion(cachedService, clusterName) + isDeletion = true } if needUpdate { @@ -108,6 +110,15 @@ func (cc *clusterClientCache) syncService(key, clusterName string, clusterCache } } } + if isDeletion { + // cachedService is not reliable here as + // deleting cache is the last step of federation service deletion + _, err := fedClient.Core().Services(cachedService.lastState.Namespace).Get(cachedService.lastState.Name) + // rebuild service if federation service still exists + if err == nil || !errors.IsNotFound(err) { + return sc.ensureClusterService(cachedService, clusterName, cachedService.appliedState, clusterCache.clientset) + } + } return nil }