mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 21:47:07 +00:00
fixtodo:rsDeepCopy only when sizeNeedsUpdate or annotationsNeedUpdate
This commit is contained in:
parent
20f7f37c49
commit
1fa06a6bd4
@ -402,18 +402,17 @@ func (dc *DeploymentController) scaleReplicaSetAndRecordEvent(rs *extensions.Rep
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (dc *DeploymentController) scaleReplicaSet(rs *extensions.ReplicaSet, newScale int32, deployment *extensions.Deployment, scalingOperation string) (bool, *extensions.ReplicaSet, error) {
|
func (dc *DeploymentController) scaleReplicaSet(rs *extensions.ReplicaSet, newScale int32, deployment *extensions.Deployment, scalingOperation string) (bool, *extensions.ReplicaSet, error) {
|
||||||
rsCopy := rs.DeepCopy()
|
|
||||||
|
|
||||||
sizeNeedsUpdate := *(rsCopy.Spec.Replicas) != newScale
|
sizeNeedsUpdate := *(rs.Spec.Replicas) != newScale
|
||||||
// TODO: Do not mutate the replica set here, instead simply compare the annotation and if they mismatch
|
|
||||||
// call SetReplicasAnnotations inside the following if clause. Then we can also move the deep-copy from
|
annotationsNeedUpdate := deploymentutil.ReplicasAnnotationsNeedUpdate(rs, *(deployment.Spec.Replicas), *(deployment.Spec.Replicas)+deploymentutil.MaxSurge(*deployment))
|
||||||
// above inside the if too.
|
|
||||||
annotationsNeedUpdate := deploymentutil.SetReplicasAnnotations(rsCopy, *(deployment.Spec.Replicas), *(deployment.Spec.Replicas)+deploymentutil.MaxSurge(*deployment))
|
|
||||||
|
|
||||||
scaled := false
|
scaled := false
|
||||||
var err error
|
var err error
|
||||||
if sizeNeedsUpdate || annotationsNeedUpdate {
|
if sizeNeedsUpdate || annotationsNeedUpdate {
|
||||||
|
rsCopy := rs.DeepCopy()
|
||||||
*(rsCopy.Spec.Replicas) = newScale
|
*(rsCopy.Spec.Replicas) = newScale
|
||||||
|
deploymentutil.SetReplicasAnnotations(rsCopy, *(deployment.Spec.Replicas), *(deployment.Spec.Replicas)+deploymentutil.MaxSurge(*deployment))
|
||||||
rs, err = dc.client.ExtensionsV1beta1().ReplicaSets(rsCopy.Namespace).Update(rsCopy)
|
rs, err = dc.client.ExtensionsV1beta1().ReplicaSets(rsCopy.Namespace).Update(rsCopy)
|
||||||
if err == nil && sizeNeedsUpdate {
|
if err == nil && sizeNeedsUpdate {
|
||||||
scaled = true
|
scaled = true
|
||||||
|
@ -400,6 +400,22 @@ func SetReplicasAnnotations(rs *extensions.ReplicaSet, desiredReplicas, maxRepli
|
|||||||
return updated
|
return updated
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AnnotationsNeedUpdate return true if ReplicasAnnotations need to be updated
|
||||||
|
func ReplicasAnnotationsNeedUpdate(rs *extensions.ReplicaSet, desiredReplicas, maxReplicas int32) bool {
|
||||||
|
if rs.Annotations == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
desiredString := fmt.Sprintf("%d", desiredReplicas)
|
||||||
|
if hasString := rs.Annotations[DesiredReplicasAnnotation]; hasString != desiredString {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
maxString := fmt.Sprintf("%d", maxReplicas)
|
||||||
|
if hasString := rs.Annotations[MaxReplicasAnnotation]; hasString != maxString {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// MaxUnavailable returns the maximum unavailable pods a rolling deployment can take.
|
// MaxUnavailable returns the maximum unavailable pods a rolling deployment can take.
|
||||||
func MaxUnavailable(deployment extensions.Deployment) int32 {
|
func MaxUnavailable(deployment extensions.Deployment) int32 {
|
||||||
if !IsRollingUpdate(&deployment) || *(deployment.Spec.Replicas) == 0 {
|
if !IsRollingUpdate(&deployment) || *(deployment.Spec.Replicas) == 0 {
|
||||||
|
Loading…
Reference in New Issue
Block a user