Deployment Controller - don't copy pods in getPodMapForDeployment

As the benchmark shows it speeds up the method~x4 and reduces memory
consumption ~x20.

```
benchmark                              old ns/op     new ns/op     delta
BenchmarkGetPodMapForDeployment-12     276121        72591         -73.71%

benchmark                              old allocs     new allocs     delta
BenchmarkGetPodMapForDeployment-12     241            238            -1.24%

benchmark                              old bytes     new bytes     delta
BenchmarkGetPodMapForDeployment-12     554025        28956         -94.77%
```
This commit is contained in:
Matt Matejczyk
2019-07-09 14:22:02 +02:00
parent 88808aa89f
commit 8140bbc4f5
4 changed files with 54 additions and 68 deletions

View File

@@ -25,7 +25,7 @@ import (
)
// rolloutRecreate implements the logic for recreating a replica set.
func (dc *DeploymentController) rolloutRecreate(d *apps.Deployment, rsList []*apps.ReplicaSet, podMap map[types.UID]*v1.PodList) error {
func (dc *DeploymentController) rolloutRecreate(d *apps.Deployment, rsList []*apps.ReplicaSet, podMap map[types.UID][]*v1.Pod) error {
// Don't create a new RS if not already existed, so that we avoid scaling up before scaling down.
newRS, oldRSs, err := dc.getAllReplicaSetsAndSyncRevision(d, rsList, false)
if err != nil {
@@ -95,7 +95,7 @@ func (dc *DeploymentController) scaleDownOldReplicaSetsForRecreate(oldRSs []*app
}
// oldPodsRunning returns whether there are old pods running or any of the old ReplicaSets thinks that it runs pods.
func oldPodsRunning(newRS *apps.ReplicaSet, oldRSs []*apps.ReplicaSet, podMap map[types.UID]*v1.PodList) bool {
func oldPodsRunning(newRS *apps.ReplicaSet, oldRSs []*apps.ReplicaSet, podMap map[types.UID][]*v1.Pod) bool {
if oldPods := util.GetActualReplicaCountForReplicaSets(oldRSs); oldPods > 0 {
return true
}
@@ -104,7 +104,7 @@ func oldPodsRunning(newRS *apps.ReplicaSet, oldRSs []*apps.ReplicaSet, podMap ma
if newRS != nil && newRS.UID == rsUID {
continue
}
for _, pod := range podList.Items {
for _, pod := range podList {
switch pod.Status.Phase {
case v1.PodFailed, v1.PodSucceeded:
// Don't count pods in terminal state.