Skip to content

Commit 8e1a37b

Browse files
Use pointer field for priority in member options (#1610)
* Use pointer field for priority in member options * Ignore G115 for probes * Skip leftover overflows * Ignore G115 at golangi.yml level * Sort members by rs member id
1 parent f1d5c04 commit 8e1a37b

File tree

8 files changed

+46
-17
lines changed

8 files changed

+46
-17
lines changed

.golangci.yml

+4-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ linters:
2828
- rowserrcheck
2929
- gosec
3030
- unconvert
31-
31+
linters-settings:
32+
gosec:
33+
excludes:
34+
- G115
3235
run:
3336
modules-download-mode: mod
3437
# timeout for analysis, e.g. 30s, 5m, default is 1m

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ require (
1717
k8s.io/api v0.27.12
1818
k8s.io/apimachinery v0.27.12
1919
k8s.io/client-go v0.27.12
20+
k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0
2021
sigs.k8s.io/controller-runtime v0.15.3
2122
sigs.k8s.io/yaml v1.4.0
2223
)
@@ -83,7 +84,6 @@ require (
8384
k8s.io/component-base v0.27.12 // indirect
8485
k8s.io/klog/v2 v2.90.1 // indirect
8586
k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect
86-
k8s.io/utils v0.0.0-20230209194617-a36077c30491 // indirect
8787
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
8888
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
8989
)

go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,8 @@ k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5F
311311
k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg=
312312
k8s.io/utils v0.0.0-20230209194617-a36077c30491 h1:r0BAOLElQnnFhE/ApUsg3iHdVYYPBjNSSOMowRZxxsY=
313313
k8s.io/utils v0.0.0-20230209194617-a36077c30491/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
314+
k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 h1:jgGTlFYnhF1PM1Ax/lAlxUPE+KfCIXHaathvJg1C3ak=
315+
k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
314316
sigs.k8s.io/controller-runtime v0.15.3 h1:L+t5heIaI3zeejoIyyvLQs5vTVu/67IU2FfisVzFlBc=
315317
sigs.k8s.io/controller-runtime v0.15.3/go.mod h1:kp4jckA4vTx281S/0Yk2LFEEQe67mjg+ev/yknv47Ds=
316318
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=

pkg/automationconfig/automation_config.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ type ReplicaSetMember struct {
283283
// is different in AC from the CR(CR don't support float) - hence all the members are declared
284284
// separately
285285
Votes *int `json:"votes,omitempty"`
286-
Priority float32 `json:"priority,omitempty"`
286+
Priority *float32 `json:"priority,omitempty"`
287287
Tags map[string]string `json:"tags,omitempty"`
288288
}
289289

@@ -294,7 +294,7 @@ func newReplicaSetMember(name string, id int, horizons ReplicaSetHorizons, isArb
294294
// ensure that the number of voting members in the replica set is not more than 7
295295
// as this is the maximum number of voting members.
296296
votes := 0
297-
priority := 0.0
297+
priority := float32(0.0)
298298

299299
if isVotingMember {
300300
votes = 1
@@ -307,7 +307,7 @@ func newReplicaSetMember(name string, id int, horizons ReplicaSetHorizons, isArb
307307
ArbiterOnly: isArbiter,
308308
Horizons: horizons,
309309
Votes: &votes,
310-
Priority: float32(priority),
310+
Priority: &priority,
311311
}
312312
}
313313

pkg/automationconfig/automation_config_builder.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ import (
66
"strings"
77

88
"github.com/blang/semver"
9-
109
"github.com/mongodb/mongodb-kubernetes-operator/pkg/util/versions"
10+
11+
"k8s.io/utils/ptr"
1112
)
1213

1314
type Topology string
@@ -351,7 +352,7 @@ func (b *Builder) Build() (AutomationConfig, error) {
351352
if len(b.memberOptions) > i {
352353
// override the member options if explicitly specified in the spec
353354
members[i].Votes = b.memberOptions[i].Votes
354-
members[i].Priority = b.memberOptions[i].GetPriority()
355+
members[i].Priority = ptr.To(b.memberOptions[i].GetPriority())
355356
members[i].Tags = b.memberOptions[i].Tags
356357
}
357358
}

pkg/automationconfig/automation_config_test.go

+17
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,23 @@ func TestAreEqual(t *testing.T) {
477477
assert.NoError(t, err)
478478
assert.False(t, areEqual)
479479
})
480+
481+
t.Run("Automation Configs with nil and zero values are not equal", func(t *testing.T) {
482+
votes := 1
483+
priority := "0.0"
484+
firstBuilder := NewBuilder().SetName("name0").SetMongoDBVersion("mdbVersion0").SetOptions(Options{DownloadBase: "downloadBase0"}).SetDomain("domain0").SetMembers(2).SetAuth(Auth{Disabled: true})
485+
firstBuilder.SetMemberOptions([]MemberOptions{MemberOptions{Votes: &votes, Priority: &priority}})
486+
firstAc, _ := firstBuilder.Build()
487+
firstAc.Version = 2
488+
secondBuilder := NewBuilder().SetName("name0").SetMongoDBVersion("mdbVersion0").SetOptions(Options{DownloadBase: "downloadBase0"}).SetDomain("domain0").SetMembers(2).SetAuth(Auth{Disabled: true})
489+
secondBuilder.SetMemberOptions([]MemberOptions{MemberOptions{Votes: &votes, Priority: nil}})
490+
secondAc, _ := secondBuilder.Build()
491+
secondAc.Version = 2
492+
493+
areEqual, err := AreEqual(firstAc, secondAc)
494+
assert.NoError(t, err)
495+
assert.False(t, areEqual)
496+
})
480497
}
481498

482499
func TestValidateFCV(t *testing.T) {

test/e2e/mongodbtests/mongodbtests.go

+15-9
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"context"
55
"encoding/json"
66
"fmt"
7-
"strconv"
7+
"sort"
88
"strings"
99
"testing"
1010
"time"
@@ -36,11 +36,6 @@ func SkipTestIfLocal(t *testing.T, msg string, f func(t *testing.T)) {
3636
t.Run(msg, f)
3737
}
3838

39-
func strPointer(n float32) *string {
40-
s := strconv.FormatFloat(float64(n), 'f', -1, 64)
41-
return &s
42-
}
43-
4439
// StatefulSetBecomesReady ensures that the underlying stateful set
4540
// reaches the running state.
4641
func StatefulSetBecomesReady(ctx context.Context, mdb *mdbv1.MongoDBCommunity, opts ...wait.Configuration) func(t *testing.T) {
@@ -435,10 +430,13 @@ func AutomationConfigHasVoteTagPriorityConfigured(ctx context.Context, mdb *mdbv
435430

436431
return func(t *testing.T) {
437432
currentAc := getAutomationConfig(ctx, t, mdb)
438-
rsMemebers := currentAc.ReplicaSets
433+
rsMembers := currentAc.ReplicaSets
434+
sort.Slice(rsMembers[0].Members, func(i, j int) bool {
435+
return rsMembers[0].Members[i].Id < rsMembers[0].Members[j].Id
436+
})
439437

440-
for _, m := range rsMemebers[0].Members {
441-
acMemberOptions = append(acMemberOptions, automationconfig.MemberOptions{Votes: m.Votes, Priority: strPointer(m.Priority), Tags: m.Tags})
438+
for _, m := range rsMembers[0].Members {
439+
acMemberOptions = append(acMemberOptions, automationconfig.MemberOptions{Votes: m.Votes, Priority: floatPtrTostringPtr(m.Priority), Tags: m.Tags})
442440
}
443441
assert.ElementsMatch(t, memberOptions, acMemberOptions)
444442
}
@@ -825,3 +823,11 @@ func AddUserToMongoDBCommunity(ctx context.Context, mdb *mdbv1.MongoDBCommunity,
825823
}
826824
}
827825
}
826+
827+
func floatPtrTostringPtr(floatPtr *float32) *string {
828+
if floatPtr != nil {
829+
stringValue := fmt.Sprintf("%.1f", *floatPtr)
830+
return &stringValue
831+
}
832+
return nil
833+
}

test/e2e/replica_set/replica_set_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func TestReplicaSet(t *testing.T) {
7070
{
7171
Votes: intPtr(1),
7272
Tags: map[string]string{"foo2": "bar2"},
73-
Priority: strPtr("1"),
73+
Priority: strPtr("1.0"),
7474
},
7575
{
7676
Votes: intPtr(1),

0 commit comments

Comments
 (0)