Merge pull request #619 from brendandburns/controller

Make individual controller actions asynchronous.
This commit is contained in:
Daniel Smith
2014-07-28 15:35:19 -07:00
3 changed files with 30 additions and 8 deletions

View File

@@ -183,15 +183,27 @@ func (rm *ReplicationManager) syncReplicationController(controllerSpec api.Repli
diff := len(filteredList) - controllerSpec.DesiredState.Replicas
if diff < 0 {
diff *= -1
wait := sync.WaitGroup{}
wait.Add(diff)
glog.Infof("Too few replicas, creating %d\n", diff)
for i := 0; i < diff; i++ {
rm.podControl.createReplica(controllerSpec)
go func() {
defer wait.Done()
rm.podControl.createReplica(controllerSpec)
}()
}
wait.Wait()
} else if diff > 0 {
glog.Infof("Too many replicas, deleting %d\n", diff)
wait := sync.WaitGroup{}
wait.Add(diff)
for i := 0; i < diff; i++ {
rm.podControl.deletePod(filteredList[i].ID)
go func(ix int) {
defer wait.Done()
rm.podControl.deletePod(filteredList[ix].ID)
}(i)
}
wait.Wait()
}
return nil
}