From d5798fac5c0cbbb661b476113167c0c544d2f391 Mon Sep 17 00:00:00 2001 From: FengyunPan Date: Tue, 14 Mar 2017 14:51:28 +0800 Subject: [PATCH] Delete cluster client for a Cluster deletion When federation controller manager checks cluster status, it will delete the offline cluster from clusterSet, but do not delete the corresponding restclient from the map clusterKubeClientMap for the offline cluster. This patch can fix it. --- .../cluster/clustercontroller.go | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/federation/pkg/federation-controller/cluster/clustercontroller.go b/federation/pkg/federation-controller/cluster/clustercontroller.go index 157b111ccce..3710b2c6c03 100644 --- a/federation/pkg/federation-controller/cluster/clustercontroller.go +++ b/federation/pkg/federation-controller/cluster/clustercontroller.go @@ -85,14 +85,22 @@ func NewclusterController(federationClient federationclientset.Interface, cluste // delete the corresponding restclient from the map clusterKubeClientMap func (cc *ClusterController) delFromClusterSet(obj interface{}) { cluster := obj.(*federationv1beta1.Cluster) - cc.knownClusterSet.Delete(cluster.Name) - delete(cc.clusterKubeClientMap, cluster.Name) + cc.delFromClusterSetByName(cluster.Name) +} + +// delFromClusterSetByName delete a cluster from clusterSet by name and +// delete the corresponding restclient from the map clusterKubeClientMap +func (cc *ClusterController) delFromClusterSetByName(clusterName string) { + glog.V(1).Infof("ClusterController observed a cluster deletion: %v", clusterName) + cc.knownClusterSet.Delete(clusterName) + delete(cc.clusterKubeClientMap, clusterName) } // addToClusterSet insert the new cluster to clusterSet and create a corresponding // restclient to map clusterKubeClientMap func (cc *ClusterController) addToClusterSet(obj interface{}) { cluster := obj.(*federationv1beta1.Cluster) + glog.V(1).Infof("ClusterController observed a new cluster: %v", cluster.Name) cc.knownClusterSet.Insert(cluster.Name) // create the restclient of cluster restClient, err := NewClusterClientSet(cluster) @@ -115,9 +123,9 @@ func (cc *ClusterController) Run() { }, cc.clusterMonitorPeriod, wait.NeverStop) } -func (cc *ClusterController) GetClusterStatus(cluster *federationv1beta1.Cluster) (*federationv1beta1.ClusterStatus, error) { - // just get the status of cluster, by requesting the restapi "/healthz" +func (cc *ClusterController) GetClusterClient(cluster *federationv1beta1.Cluster) (*ClusterClient, error) { clusterClient, found := cc.clusterKubeClientMap[cluster.Name] + client := &clusterClient if !found { glog.Infof("It's a new cluster, a cluster client will be created") client, err := NewClusterClientSet(cluster) @@ -125,8 +133,15 @@ func (cc *ClusterController) GetClusterStatus(cluster *federationv1beta1.Cluster glog.Errorf("Failed to create cluster client, err: %v", err) return nil, err } - clusterClient = *client - cc.clusterKubeClientMap[cluster.Name] = clusterClient + } + return client, nil +} + +func (cc *ClusterController) GetClusterStatus(cluster *federationv1beta1.Cluster) (*federationv1beta1.ClusterStatus, error) { + // just get the status of cluster, by requesting the restapi "/healthz" + clusterClient, err := cc.GetClusterClient(cluster) + if err != nil { + return nil, err } clusterStatus := clusterClient.GetClusterHealthStatus() return clusterStatus, nil @@ -140,8 +155,7 @@ func (cc *ClusterController) UpdateClusterStatus() error { } for _, cluster := range clusters.Items { if !cc.knownClusterSet.Has(cluster.Name) { - glog.V(1).Infof("ClusterController observed a new cluster: %#v", cluster) - cc.knownClusterSet.Insert(cluster.Name) + cc.addToClusterSet(&cluster) } } @@ -153,8 +167,7 @@ func (cc *ClusterController) UpdateClusterStatus() error { } deleted := cc.knownClusterSet.Difference(observedSet) for clusterName := range deleted { - glog.V(1).Infof("ClusterController observed a Cluster deletion: %v", clusterName) - cc.knownClusterSet.Delete(clusterName) + cc.delFromClusterSetByName(clusterName) } } for _, cluster := range clusters.Items {