daemon/controller.go: fix bugs in updateDaemonSetStatus

1. return when there is any error

2. fix StatusUpdateRetries loop

3. a few minor cleanup
pull/6/head
Xiang Li 2016-06-06 19:28:05 -07:00
parent 5e7c309b29
commit 8e4966da82
1 changed files with 16 additions and 14 deletions

View File

@ -567,21 +567,22 @@ func (dsc *DaemonSetsController) manage(ds *extensions.DaemonSet) {
} }
func storeDaemonSetStatus(dsClient unversionedextensions.DaemonSetInterface, ds *extensions.DaemonSet, desiredNumberScheduled, currentNumberScheduled, numberMisscheduled int) error { func storeDaemonSetStatus(dsClient unversionedextensions.DaemonSetInterface, ds *extensions.DaemonSet, desiredNumberScheduled, currentNumberScheduled, numberMisscheduled int) error {
if int(ds.Status.DesiredNumberScheduled) == desiredNumberScheduled && int(ds.Status.CurrentNumberScheduled) == currentNumberScheduled && int(ds.Status.NumberMisscheduled) == numberMisscheduled { if int(ds.Status.DesiredNumberScheduled) == desiredNumberScheduled &&
int(ds.Status.CurrentNumberScheduled) == currentNumberScheduled &&
int(ds.Status.NumberMisscheduled) == numberMisscheduled {
return nil return nil
} }
var updateErr, getErr error var updateErr, getErr error
for i := 0; i <= StatusUpdateRetries; i++ { for i := 0; i < StatusUpdateRetries; i++ {
ds.Status.DesiredNumberScheduled = int32(desiredNumberScheduled) ds.Status.DesiredNumberScheduled = int32(desiredNumberScheduled)
ds.Status.CurrentNumberScheduled = int32(currentNumberScheduled) ds.Status.CurrentNumberScheduled = int32(currentNumberScheduled)
ds.Status.NumberMisscheduled = int32(numberMisscheduled) ds.Status.NumberMisscheduled = int32(numberMisscheduled)
_, updateErr = dsClient.UpdateStatus(ds) if _, updateErr = dsClient.UpdateStatus(ds); updateErr == nil {
if updateErr == nil {
// successful update
return nil return nil
} }
// Update the set with the latest resource version for the next poll // Update the set with the latest resource version for the next poll
if ds, getErr = dsClient.Get(ds.Name); getErr != nil { if ds, getErr = dsClient.Get(ds.Name); getErr != nil {
// If the GET fails we can't trust status.Replicas anymore. This error // If the GET fails we can't trust status.Replicas anymore. This error
@ -597,29 +598,30 @@ func (dsc *DaemonSetsController) updateDaemonSetStatus(ds *extensions.DaemonSet)
nodeToDaemonPods, err := dsc.getNodesToDaemonPods(ds) nodeToDaemonPods, err := dsc.getNodesToDaemonPods(ds)
if err != nil { if err != nil {
glog.Errorf("Error getting node to daemon pod mapping for daemon set %+v: %v", ds, err) glog.Errorf("Error getting node to daemon pod mapping for daemon set %+v: %v", ds, err)
return
} }
nodeList, err := dsc.nodeStore.List() nodeList, err := dsc.nodeStore.List()
if err != nil { if err != nil {
glog.Errorf("Couldn't get list of nodes when updating daemon set %+v: %v", ds, err) glog.Errorf("Couldn't get list of nodes when updating daemon set %+v: %v", ds, err)
return
} }
var desiredNumberScheduled, currentNumberScheduled, numberMisscheduled int var desiredNumberScheduled, currentNumberScheduled, numberMisscheduled int
for _, node := range nodeList.Items { for _, node := range nodeList.Items {
shouldRun := dsc.nodeShouldRunDaemonPod(&node, ds) shouldRun := dsc.nodeShouldRunDaemonPod(&node, ds)
numDaemonPods := len(nodeToDaemonPods[node.Name]) scheduled := len(nodeToDaemonPods[node.Name]) > 0
if shouldRun && numDaemonPods > 0 {
currentNumberScheduled++
}
if shouldRun { if shouldRun {
desiredNumberScheduled++ desiredNumberScheduled++
} if scheduled {
currentNumberScheduled++
if !shouldRun && numDaemonPods > 0 { }
numberMisscheduled++ } else {
if scheduled {
numberMisscheduled++
}
} }
} }