From ab1be9380922b64a82b2e2ac7ede265ebafb5578 Mon Sep 17 00:00:00 2001 From: waynepeking348 Date: Sun, 20 Dec 2020 13:37:00 +0800 Subject: [PATCH] clean rs by revision instead of creat timestamp --- pkg/controller/deployment/sync.go | 2 +- pkg/controller/deployment/util/deployment_util.go | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/pkg/controller/deployment/sync.go b/pkg/controller/deployment/sync.go index 3c7e808b24b..c1e3d18c05b 100644 --- a/pkg/controller/deployment/sync.go +++ b/pkg/controller/deployment/sync.go @@ -448,7 +448,7 @@ func (dc *DeploymentController) cleanupDeployment(oldRSs []*apps.ReplicaSet, dep return nil } - sort.Sort(controller.ReplicaSetsByCreationTimestamp(cleanableRSes)) + sort.Sort(deploymentutil.ReplicaSetsByRevision(cleanableRSes)) klog.V(4).Infof("Looking to cleanup old replica sets for deployment %q", deployment.Name) for i := int32(0); i < diff; i++ { diff --git a/pkg/controller/deployment/util/deployment_util.go b/pkg/controller/deployment/util/deployment_util.go index fb1af676d4c..be7d98789ab 100644 --- a/pkg/controller/deployment/util/deployment_util.go +++ b/pkg/controller/deployment/util/deployment_util.go @@ -949,3 +949,18 @@ func GetDeploymentsForReplicaSet(deploymentLister appslisters.DeploymentLister, return deployments, nil } + +// ReplicaSetsByRevision sorts a list of ReplicaSet by revision, using their creation timestamp or name as a tie breaker. +// By using the creation timestamp, this sorts from old to new replica sets. +type ReplicaSetsByRevision []*apps.ReplicaSet + +func (o ReplicaSetsByRevision) Len() int { return len(o) } +func (o ReplicaSetsByRevision) Swap(i, j int) { o[i], o[j] = o[j], o[i] } +func (o ReplicaSetsByRevision) Less(i, j int) bool { + revision1, err1 := Revision(o[i]) + revision2, err2 := Revision(o[j]) + if err1 != nil || err2 != nil || revision1 == revision2 { + return controller.ReplicaSetsByCreationTimestamp(o).Less(i, j) + } + return revision1 < revision2 +}