From 8886574a675ca780912794a1cc5ee4075aab6e5f Mon Sep 17 00:00:00 2001 From: FengyunPan Date: Sun, 16 Apr 2017 19:40:16 +0800 Subject: [PATCH] [Federation]Fix panic: index out of range When the number of clusterStatusNew's Conditions is different from the number of clusterStatusOld's Conditions, clustercontroller will panic. We should check it before comparing. --- .../cluster/clustercontroller.go | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/federation/pkg/federation-controller/cluster/clustercontroller.go b/federation/pkg/federation-controller/cluster/clustercontroller.go index 422e0aabe58..ecf5904db60 100644 --- a/federation/pkg/federation-controller/cluster/clustercontroller.go +++ b/federation/pkg/federation-controller/cluster/clustercontroller.go @@ -192,13 +192,18 @@ func (cc *ClusterController) UpdateClusterStatus() error { } else { hasTransition := false - for i := 0; i < len(clusterStatusNew.Conditions); i++ { - if !(strings.EqualFold(string(clusterStatusNew.Conditions[i].Type), string(clusterStatusOld.Conditions[i].Type)) && - strings.EqualFold(string(clusterStatusNew.Conditions[i].Status), string(clusterStatusOld.Conditions[i].Status))) { - hasTransition = true - break + if len(clusterStatusNew.Conditions) != len(clusterStatusOld.Conditions) { + hasTransition = true + } else { + for i := 0; i < len(clusterStatusNew.Conditions); i++ { + if !(strings.EqualFold(string(clusterStatusNew.Conditions[i].Type), string(clusterStatusOld.Conditions[i].Type)) && + strings.EqualFold(string(clusterStatusNew.Conditions[i].Status), string(clusterStatusOld.Conditions[i].Status))) { + hasTransition = true + break + } } } + if !hasTransition { for j := 0; j < len(clusterStatusNew.Conditions); j++ { clusterStatusNew.Conditions[j].LastTransitionTime = clusterStatusOld.Conditions[j].LastTransitionTime @@ -207,7 +212,7 @@ func (cc *ClusterController) UpdateClusterStatus() error { } clusterClient, found := cc.clusterKubeClientMap[cluster.Name] if !found { - glog.Warningf("Failed to client for cluster %s", cluster.Name) + glog.Warningf("Failed to get client for cluster %s", cluster.Name) continue }