Skip to content

Commit 9d10d24

Browse files
m1kolafealebenpae
authored andcommitted
CLOUDP-302068: Refactor GetMongoVersionForAutomationConfig (#4140)
Refactors `GetMongoVersionForAutomationConfig` in a way that it no longer reads `MDB_ASSUME_ENTERPRISE_IMAGE` and `MONGODB_IMAGE` env vars directly and receives these in arguments. This will help with merging the community operator and the enterprise operators into a single process. Note that more refactoring is needed to be able to merge these. There are several places with `FIXME(Mikalai)` comments and a follow up for these is cumming in the next iteration. The effort was split into multiple parts for more manageable code review.
1 parent 5ea1f14 commit 9d10d24

23 files changed

+242
-209
lines changed

controllers/om/deployment/om_deployment_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@ func init() {
2424
func TestPrepareScaleDown_OpsManagerRemovedMember(t *testing.T) {
2525
// This is deployment with 2 members (emulating that OpsManager removed the 3rd one)
2626
rs := mdbv1.NewReplicaSetBuilder().SetName("bam").SetMembers(2).Build()
27-
oldDeployment := CreateFromReplicaSet(rs)
27+
oldDeployment := CreateFromReplicaSet("fake-mongoDBImage", false, rs)
2828
mockedOmConnection := om.NewMockedOmConnection(oldDeployment)
2929

3030
// We try to prepare two members for scale down, but one of them will fail (bam-2)
3131
rsWithThreeMembers := map[string][]string{"bam": {"bam-1", "bam-2"}}
3232
assert.NoError(t, replicaset.PrepareScaleDownFromMap(mockedOmConnection, rsWithThreeMembers, rsWithThreeMembers["bam"], zap.S()))
3333

34-
expectedDeployment := CreateFromReplicaSet(rs)
34+
expectedDeployment := CreateFromReplicaSet("fake-mongoDBImage", false, rs)
3535

3636
assert.NoError(t, expectedDeployment.MarkRsMembersUnvoted("bam", []string{"bam-1"}))
3737

controllers/om/deployment/testing_utils.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import (
1818
// different packages. And test files are only compiled
1919
// when testing that specific package
2020
// https://github.com/golang/go/issues/10184#issuecomment-84465873
21-
func CreateFromReplicaSet(rs *mdb.MongoDB) om.Deployment {
21+
func CreateFromReplicaSet(mongoDBImage string, forceEnterprise bool, rs *mdb.MongoDB) om.Deployment {
2222
sts := construct.DatabaseStatefulSet(*rs, construct.ReplicaSetOptions(
2323
func(options *construct.DatabaseStatefulSetOptions) {
2424
options.PodVars = &env.PodEnvVars{ProjectID: "abcd"}
@@ -32,7 +32,7 @@ func CreateFromReplicaSet(rs *mdb.MongoDB) om.Deployment {
3232
}
3333

3434
d.MergeReplicaSet(
35-
replicaset.BuildFromStatefulSet(sts, rs.GetSpec(), rs.Status.FeatureCompatibilityVersion),
35+
replicaset.BuildFromStatefulSet(mongoDBImage, forceEnterprise, sts, rs.GetSpec(), rs.Status.FeatureCompatibilityVersion),
3636
rs.Spec.AdditionalMongodConfig.ToMap(),
3737
lastConfig.ToMap(),
3838
zap.S(),

controllers/om/deployment_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ func TestMergeReplicaSet(t *testing.T) {
6363

6464
// Now the deployment "gets updated" from external - new node is added and one is removed - this should be fixed
6565
// by merge
66-
newProcess := NewMongodProcess("foo", "bar", &mdbv1.AdditionalMongodConfig{}, &mdbv1.NewStandaloneBuilder().Build().Spec, "", nil, "")
66+
newProcess := NewMongodProcess("foo", "bar", "fake-mongoDBImage", false, &mdbv1.AdditionalMongodConfig{}, &mdbv1.NewStandaloneBuilder().Build().Spec, "", nil, "")
6767

6868
d.getProcesses()[0]["processType"] = ProcessTypeMongos // this will be overriden
6969
d.getProcesses()[1].EnsureNetConfig()["MaxIncomingConnections"] = 20 // this will be left as-is
@@ -742,15 +742,15 @@ func buildRsByProcesses(rsName string, processes []Process) ReplicaSetWithProces
742742
}
743743

744744
func createStandalone() Process {
745-
return NewMongodProcess("merchantsStandalone", "mongo1.some.host", &mdbv1.AdditionalMongodConfig{}, defaultMongoDBVersioned("3.6.3"), "", nil, "")
745+
return NewMongodProcess("merchantsStandalone", "mongo1.some.host", "fake-mongoDBImage", false, &mdbv1.AdditionalMongodConfig{}, defaultMongoDBVersioned("3.6.3"), "", nil, "")
746746
}
747747

748748
func createMongosProcesses(num int, name, clusterName string) []Process {
749749
mongosProcesses := make([]Process, num)
750750

751751
for i := 0; i < num; i++ {
752752
idx := strconv.Itoa(i)
753-
mongosProcesses[i] = NewMongosProcess(name+idx, "mongoS"+idx+".some.host", &mdbv1.AdditionalMongodConfig{}, defaultMongoDBVersioned("3.6.3"), "", nil, "")
753+
mongosProcesses[i] = NewMongosProcess(name+idx, "mongoS"+idx+".some.host", "fake-mongoDBImage", false, &mdbv1.AdditionalMongodConfig{}, defaultMongoDBVersioned("3.6.3"), "", nil, "")
754754
if clusterName != "" {
755755
mongosProcesses[i].setCluster(clusterName)
756756
}
@@ -766,7 +766,7 @@ func createReplicaSetProcessesCount(count int, rsName string) []Process {
766766
rsMembers := make([]Process, count)
767767

768768
for i := 0; i < count; i++ {
769-
rsMembers[i] = NewMongodProcess(fmt.Sprintf("%s-%d", rsName, i), fmt.Sprintf("%s-%d.some.host", rsName, i), &mdbv1.AdditionalMongodConfig{}, defaultMongoDBVersioned("3.6.3"), "", nil, "")
769+
rsMembers[i] = NewMongodProcess(fmt.Sprintf("%s-%d", rsName, i), fmt.Sprintf("%s-%d.some.host", rsName, i), "fake-mongoDBImage", false, &mdbv1.AdditionalMongodConfig{}, defaultMongoDBVersioned("3.6.3"), "", nil, "")
770770
// Note that we don't specify the replicaset config for process
771771
}
772772
return rsMembers
@@ -776,7 +776,7 @@ func createReplicaSetProcessesCountEnt(count int, rsName string) []Process {
776776
rsMembers := make([]Process, count)
777777

778778
for i := 0; i < count; i++ {
779-
rsMembers[i] = NewMongodProcess(fmt.Sprintf("%s-%d", rsName, i), fmt.Sprintf("%s-%d.some.host", rsName, i), &mdbv1.AdditionalMongodConfig{}, defaultMongoDBVersioned("3.6.3-ent"), "", nil, "")
779+
rsMembers[i] = NewMongodProcess(fmt.Sprintf("%s-%d", rsName, i), fmt.Sprintf("%s-%d.some.host", rsName, i), "fake-mongoDBImage", false, &mdbv1.AdditionalMongodConfig{}, defaultMongoDBVersioned("3.6.3-ent"), "", nil, "")
780780
// Note that we don't specify the replicaset config for process
781781
}
782782
return rsMembers

controllers/om/depshardedcluster_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ func TestMergeShardedCluster_ReplicaSetsModified(t *testing.T) {
110110
// These OM changes must be overriden
111111
(*d.getReplicaSetByName("cluster-0"))["protocolVersion"] = util.Int32Ref(2)
112112
(*d.getReplicaSetByName("configSrv")).addMember(
113-
NewMongodProcess("foo", "bar", &mdbv1.AdditionalMongodConfig{}, mdbv1.NewStandaloneBuilder().Build().GetSpec(), "", nil, ""), "", automationconfig.MemberOptions{},
113+
NewMongodProcess("foo", "bar", "fake-mongoDBImage", false, &mdbv1.AdditionalMongodConfig{}, mdbv1.NewStandaloneBuilder().Build().GetSpec(), "", nil, ""), "", automationconfig.MemberOptions{},
114114
)
115115
(*d.getReplicaSetByName("cluster-2")).setMembers(d.getReplicaSetByName("cluster-2").Members()[0:2])
116116

controllers/om/process.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -94,17 +94,19 @@ func NewProcessFromInterface(i interface{}) Process {
9494
return i.(map[string]interface{})
9595
}
9696

97-
func NewMongosProcess(name, hostName string, additionalMongodConfig *mdbv1.AdditionalMongodConfig, spec mdbv1.DbSpec, certificateFilePath string, annotations map[string]string, fcv string) Process {
97+
func NewMongosProcess(name, hostName, mongoDBImage string, forceEnterprise bool, additionalMongodConfig *mdbv1.AdditionalMongodConfig, spec mdbv1.DbSpec, certificateFilePath string, annotations map[string]string, fcv string) Process {
9898
if additionalMongodConfig == nil {
9999
additionalMongodConfig = mdbv1.NewEmptyAdditionalMongodConfig()
100100
}
101101

102+
architecture := architectures.GetArchitecture(annotations)
103+
processVersion := architectures.GetMongoVersionForAutomationConfig(mongoDBImage, spec.GetMongoDBVersion(nil), forceEnterprise, architecture)
102104
p := createProcess(
103105
WithName(name),
104106
WithHostname(hostName),
105107
WithProcessType(ProcessTypeMongos),
106108
WithAdditionalMongodConfig(*additionalMongodConfig),
107-
WithResourceSpec(spec, annotations, fcv),
109+
WithResourceSpec(processVersion, fcv),
108110
)
109111

110112
// default values for configurable values
@@ -118,17 +120,19 @@ func NewMongosProcess(name, hostName string, additionalMongodConfig *mdbv1.Addit
118120
return p
119121
}
120122

121-
func NewMongodProcess(name, hostName string, additionalConfig *mdbv1.AdditionalMongodConfig, spec mdbv1.DbSpec, certificateFilePath string, annotations map[string]string, fcv string) Process {
123+
func NewMongodProcess(name, hostName, mongoDBImage string, forceEnterprise bool, additionalConfig *mdbv1.AdditionalMongodConfig, spec mdbv1.DbSpec, certificateFilePath string, annotations map[string]string, fcv string) Process {
122124
if additionalConfig == nil {
123125
additionalConfig = mdbv1.NewEmptyAdditionalMongodConfig()
124126
}
125127

128+
architecture := architectures.GetArchitecture(annotations)
129+
processVersion := architectures.GetMongoVersionForAutomationConfig(mongoDBImage, spec.GetMongoDBVersion(nil), forceEnterprise, architecture)
126130
p := createProcess(
127131
WithName(name),
128132
WithHostname(hostName),
129133
WithProcessType(ProcessTypeMongod),
130134
WithAdditionalMongodConfig(*additionalConfig),
131-
WithResourceSpec(spec, annotations, fcv),
135+
WithResourceSpec(processVersion, fcv),
132136
)
133137

134138
// default values for configurable values
@@ -395,9 +399,8 @@ func createProcess(opts ...ProcessOption) Process {
395399

396400
type ProcessOption func(process Process)
397401

398-
func WithResourceSpec(resourceSpec mdbv1.DbSpec, annotations map[string]string, fcv string) ProcessOption {
402+
func WithResourceSpec(processVersion, fcv string) ProcessOption {
399403
return func(process Process) {
400-
processVersion := architectures.GetMongoVersionForAutomationConfig(resourceSpec.GetMongoDBVersion(nil), annotations)
401404
process["version"] = processVersion
402405
process["authSchemaVersion"] = CalculateAuthSchemaVersion()
403406
process["featureCompatibilityVersion"] = fcv

controllers/om/process/om_process.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
"github.com/10gen/ops-manager-kubernetes/pkg/util"
1414
)
1515

16-
func CreateMongodProcessesWithLimit(set appsv1.StatefulSet, dbSpec mdbv1.DbSpec, limit int, fcv string) []om.Process {
16+
func CreateMongodProcessesWithLimit(mongoDBImage string, forceEnterprise bool, set appsv1.StatefulSet, dbSpec mdbv1.DbSpec, limit int, fcv string) []om.Process {
1717
hostnames, names := dns.GetDnsForStatefulSetReplicasSpecified(set, dbSpec.GetClusterDomain(), limit, dbSpec.GetExternalDomain())
1818
processes := make([]om.Process, len(hostnames))
1919

@@ -23,14 +23,14 @@ func CreateMongodProcessesWithLimit(set appsv1.StatefulSet, dbSpec mdbv1.DbSpec,
2323
}
2424

2525
for idx, hostname := range hostnames {
26-
processes[idx] = om.NewMongodProcess(names[idx], hostname, dbSpec.GetAdditionalMongodConfig(), dbSpec, certificateFileName, set.Annotations, fcv)
26+
processes[idx] = om.NewMongodProcess(names[idx], hostname, mongoDBImage, forceEnterprise, dbSpec.GetAdditionalMongodConfig(), dbSpec, certificateFileName, set.Annotations, fcv)
2727
}
2828

2929
return processes
3030
}
3131

3232
// CreateMongodProcessesWithLimitMulti creates the process array for automationConfig based on MultiCluster CR spec
33-
func CreateMongodProcessesWithLimitMulti(mrs mdbmultiv1.MongoDBMultiCluster, certFileName string) ([]om.Process, error) {
33+
func CreateMongodProcessesWithLimitMulti(mongoDBImage string, forceEnterprise bool, mrs mdbmultiv1.MongoDBMultiCluster, certFileName string) ([]om.Process, error) {
3434
hostnames := make([]string, 0)
3535
clusterNums := make([]int, 0)
3636
podNum := make([]int, 0)
@@ -50,7 +50,7 @@ func CreateMongodProcessesWithLimitMulti(mrs mdbmultiv1.MongoDBMultiCluster, cer
5050

5151
processes := make([]om.Process, len(hostnames))
5252
for idx := range hostnames {
53-
processes[idx] = om.NewMongodProcess(fmt.Sprintf("%s-%d-%d", mrs.Name, clusterNums[idx], podNum[idx]), hostnames[idx], mrs.Spec.GetAdditionalMongodConfig(), &mrs.Spec, certFileName, mrs.Annotations, mrs.CalculateFeatureCompatibilityVersion())
53+
processes[idx] = om.NewMongodProcess(fmt.Sprintf("%s-%d-%d", mrs.Name, clusterNums[idx], podNum[idx]), hostnames[idx], mongoDBImage, forceEnterprise, mrs.Spec.GetAdditionalMongodConfig(), &mrs.Spec, certFileName, mrs.Annotations, mrs.CalculateFeatureCompatibilityVersion())
5454
}
5555

5656
return processes, nil

0 commit comments

Comments
 (0)