Skip to content

Commit 25d543b

Browse files
authored
CLOUDP-147896: Fix the InstanceSize must match issue (#782)
1 parent 5e726a0 commit 25d543b

File tree

2 files changed

+56
-14
lines changed

2 files changed

+56
-14
lines changed

pkg/controller/atlasdeployment/advanced_deployment.go

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,6 @@ func advancedDeploymentIdle(ctx *workflow.Context, project *mdbv1.AtlasProject,
8686
}
8787
}
8888

89-
// Prevent changing of instanceSize and diskSizeGB if autoscaling is enabled
90-
9189
cleanupTheSpec(&specDeployment)
9290

9391
deploymentAsAtlas, err := specDeployment.ToAtlas()
@@ -103,8 +101,41 @@ func advancedDeploymentIdle(ctx *workflow.Context, project *mdbv1.AtlasProject,
103101
return nil, workflow.InProgress(workflow.DeploymentUpdating, "deployment is updating")
104102
}
105103

106-
func cleanupTheSpec(deployment *mdbv1.AdvancedDeploymentSpec) {
107-
deployment.MongoDBVersion = ""
104+
func cleanupTheSpec(specMerged *mdbv1.AdvancedDeploymentSpec) {
105+
specMerged.MongoDBVersion = ""
106+
107+
globalInstanceSize := ""
108+
for i, replicationSpec := range specMerged.ReplicationSpecs {
109+
for k := range replicationSpec.RegionConfigs {
110+
regionConfig := specMerged.ReplicationSpecs[i].RegionConfigs[k]
111+
112+
specs := []*mdbv1.Specs{
113+
regionConfig.AnalyticsSpecs,
114+
regionConfig.ElectableSpecs,
115+
regionConfig.ReadOnlySpecs,
116+
}
117+
118+
forEachSpec := func(f func(spec *mdbv1.Specs)) {
119+
for _, spec := range specs {
120+
if spec != nil {
121+
f(spec)
122+
}
123+
}
124+
}
125+
126+
forEachSpec(func(spec *mdbv1.Specs) {
127+
if globalInstanceSize == "" && spec.NodeCount != nil && *spec.NodeCount != 0 {
128+
globalInstanceSize = spec.InstanceSize
129+
}
130+
})
131+
132+
forEachSpec(func(spec *mdbv1.Specs) {
133+
if spec.NodeCount == nil || *spec.NodeCount == 0 {
134+
spec.InstanceSize = globalInstanceSize
135+
}
136+
})
137+
}
138+
}
108139
}
109140

110141
// This will prevent from setting diskSizeGB if at least one region config has enabled disk size autoscaling

test/int/deployment_test.go

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -850,14 +850,7 @@ var _ = Describe("AtlasDeployment", Label("int", "AtlasDeployment"), func() {
850850
})
851851

852852
By(fmt.Sprintf("Updating the InstanceSize of Advanced Deployment %s", kube.ObjectKeyFromObject(createdDeployment)), func() {
853-
newInstanceSize := "M20"
854-
createdDeployment.Spec.AdvancedDeploymentSpec.ReplicationSpecs[0].RegionConfigs[0].AnalyticsSpecs = &mdbv1.Specs{
855-
InstanceSize: newInstanceSize,
856-
}
857-
createdDeployment.Spec.AdvancedDeploymentSpec.ReplicationSpecs[0].RegionConfigs[0].ElectableSpecs.InstanceSize = newInstanceSize
858-
createdDeployment.Spec.AdvancedDeploymentSpec.ReplicationSpecs[0].RegionConfigs[0].ReadOnlySpecs = &mdbv1.Specs{
859-
InstanceSize: newInstanceSize,
860-
}
853+
createdDeployment.Spec.AdvancedDeploymentSpec.ReplicationSpecs[0].RegionConfigs[0].ElectableSpecs.InstanceSize = "M20"
861854
Expect(k8sClient.Update(context.Background(), createdDeployment)).ToNot(HaveOccurred())
862855

863856
Eventually(func(g Gomega) bool {
@@ -871,10 +864,12 @@ var _ = Describe("AtlasDeployment", Label("int", "AtlasDeployment"), func() {
871864
})
872865

873866
By(fmt.Sprintf("Enable AutoScaling for the Advanced Deployment %s", kube.ObjectKeyFromObject(createdDeployment)), func() {
874-
createdDeployment.Spec.AdvancedDeploymentSpec.ReplicationSpecs[0].RegionConfigs[0].AutoScaling = &mdbv1.AdvancedAutoScalingSpec{
867+
regionConfig := createdDeployment.Spec.AdvancedDeploymentSpec.ReplicationSpecs[0].RegionConfigs[0]
868+
regionConfig.ElectableSpecs.InstanceSize = "M10"
869+
regionConfig.AutoScaling = &mdbv1.AdvancedAutoScalingSpec{
875870
Compute: &mdbv1.ComputeSpec{
876871
Enabled: toptr.MakePtr(true),
877-
MaxInstanceSize: "M20",
872+
MaxInstanceSize: "M30",
878873
MinInstanceSize: "M10",
879874
ScaleDownEnabled: toptr.MakePtr(true),
880875
},
@@ -890,6 +885,22 @@ var _ = Describe("AtlasDeployment", Label("int", "AtlasDeployment"), func() {
890885

891886
doAdvancedDeploymentStatusChecks()
892887
checkAdvancedAtlasState()
888+
889+
lastGeneration++
890+
})
891+
892+
By(fmt.Sprintf("Update Instance Size Margins with AutoScaling for Deployemnt %s", kube.ObjectKeyFromObject(createdDeployment)), func() {
893+
regionConfig := createdDeployment.Spec.AdvancedDeploymentSpec.ReplicationSpecs[0].RegionConfigs[0]
894+
regionConfig.AutoScaling.Compute.MinInstanceSize = "M20"
895+
regionConfig.ElectableSpecs.InstanceSize = "M20"
896+
Expect(k8sClient.Update(context.Background(), createdDeployment)).ToNot(HaveOccurred())
897+
898+
Eventually(func(g Gomega) bool {
899+
return testutil.CheckCondition(k8sClient, createdDeployment, status.TrueCondition(status.ReadyType), validateDeploymentUpdatingFunc(g))
900+
}).WithTimeout(30 * time.Minute).WithPolling(interval).Should(BeTrue())
901+
902+
doAdvancedDeploymentStatusChecks()
903+
checkAdvancedAtlasState()
893904
})
894905
})
895906
})

0 commit comments

Comments
 (0)