Merge pull request #44526 from FengyunPan/fix-UpdateClusterStatus-panic

Automatic merge from submit-queue (batch tested with PRs 44469, 44566, 44467, 44526)

[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.
This commit is contained in:
Kubernetes Submit Queue 2017-04-17 20:07:01 -07:00 committed by GitHub
commit aa43023fd7

View File

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