Skip to content

Commit 86f0c69

Browse files
Merge pull request #1131 from hongkailiu/no-issues-simple-1
NO-JIRA: Refactor for readability
2 parents d24c400 + bc0688f commit 86f0c69

File tree

4 files changed

+30
-90
lines changed

4 files changed

+30
-90
lines changed

lib/capability/capability.go

Lines changed: 16 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,6 @@ import (
88
configv1 "github.com/openshift/api/config/v1"
99
)
1010

11-
const (
12-
CapabilityAnnotation = "capability.openshift.io/name"
13-
14-
DefaultCapabilitySet = configv1.ClusterVersionCapabilitySetCurrent
15-
)
16-
1711
type ClusterCapabilities struct {
1812
KnownCapabilities map[configv1.ClusterVersionCapability]struct{}
1913
EnabledCapabilities map[configv1.ClusterVersionCapability]struct{}
@@ -34,18 +28,20 @@ func (caps capabilitiesSort) Len() int { return len(caps) }
3428
func (caps capabilitiesSort) Swap(i, j int) { caps[i], caps[j] = caps[j], caps[i] }
3529
func (caps capabilitiesSort) Less(i, j int) bool { return string(caps[i]) < string(caps[j]) }
3630

37-
// SetCapabilities populates and returns cluster capabilities from ClusterVersion capabilities spec. This method also
38-
// ensures that no previously enabled capability is now disabled and returns any such implicitly enabled capabilities.
31+
// SetCapabilities populates and returns cluster capabilities from ClusterVersion's capabilities specification and a
32+
// collection of capabilities that are enabled including implicitly enabled.
33+
// It ensures that each capability in the collection is still enabled in the returned cluster capabilities
34+
// and recognizes all implicitly enabled ones.
3935
func SetCapabilities(config *configv1.ClusterVersion,
40-
existingEnabled, alwaysEnabled map[configv1.ClusterVersionCapability]struct{}) ClusterCapabilities {
36+
capabilities []configv1.ClusterVersionCapability) ClusterCapabilities {
4137

42-
var capabilities ClusterCapabilities
43-
capabilities.KnownCapabilities = setKnownCapabilities()
38+
var clusterCapabilities ClusterCapabilities
39+
clusterCapabilities.KnownCapabilities = GetCapabilitiesAsMap(configv1.KnownClusterVersionCapabilities)
4440

45-
capabilities.EnabledCapabilities, capabilities.ImplicitlyEnabledCapabilities = setEnabledCapabilities(config.Spec.Capabilities,
46-
existingEnabled, alwaysEnabled)
41+
clusterCapabilities.EnabledCapabilities, clusterCapabilities.ImplicitlyEnabledCapabilities =
42+
categorizeEnabledCapabilities(config.Spec.Capabilities, capabilities)
4743

48-
return capabilities
44+
return clusterCapabilities
4945
}
5046

5147
// GetCapabilitiesAsMap returns the slice of capabilities as a map with default values.
@@ -72,17 +68,6 @@ func SetFromImplicitlyEnabledCapabilities(implicitlyEnabled []configv1.ClusterVe
7268
return capabilities
7369
}
7470

75-
// GetKnownCapabilities returns all known capabilities as defined in ClusterVersion.
76-
func GetKnownCapabilities() []configv1.ClusterVersionCapability {
77-
var known []configv1.ClusterVersionCapability
78-
79-
for _, v := range configv1.ClusterVersionCapabilitySets {
80-
known = append(known, v...)
81-
}
82-
sort.Sort(capabilitiesSort(known))
83-
return known
84-
}
85-
8671
// GetCapabilitiesStatus populates and returns ClusterVersion capabilities status from given capabilities.
8772
func GetCapabilitiesStatus(capabilities ClusterCapabilities) configv1.ClusterVersionCapabilitiesStatus {
8873
var status configv1.ClusterVersionCapabilitiesStatus
@@ -131,31 +116,13 @@ func Contains(caps []configv1.ClusterVersionCapability, capability configv1.Clus
131116
return found
132117
}
133118

134-
// setKnownCapabilities populates a map keyed by capability from all known capabilities as defined in ClusterVersion.
135-
func setKnownCapabilities() map[configv1.ClusterVersionCapability]struct{} {
136-
known := make(map[configv1.ClusterVersionCapability]struct{})
137-
138-
for _, v := range configv1.ClusterVersionCapabilitySets {
139-
for _, capability := range v {
140-
if _, ok := known[capability]; ok {
141-
continue
142-
}
143-
known[capability] = struct{}{}
144-
}
145-
}
146-
return known
147-
}
148-
149-
// setEnabledCapabilities populates a map keyed by capability from all enabled capabilities as defined in ClusterVersion.
150-
// DefaultCapabilitySet is used if a baseline capability set is not defined by ClusterVersion. A check is then made to
151-
// ensure that no previously enabled capability is now disabled and if any such capabilities are found each is enabled,
152-
// saved, and returned.
153-
// The required capabilities are added to the implicitly enabled.
154-
func setEnabledCapabilities(capabilitiesSpec *configv1.ClusterVersionCapabilitiesSpec,
155-
priorEnabled, alwaysEnabled map[configv1.ClusterVersionCapability]struct{}) (map[configv1.ClusterVersionCapability]struct{},
119+
// categorizeEnabledCapabilities categorizes enabled capabilities by implicitness from cluster version's
120+
// capabilities specification and a collection of capabilities that are enabled including implicitly enabled.
121+
func categorizeEnabledCapabilities(capabilitiesSpec *configv1.ClusterVersionCapabilitiesSpec,
122+
capabilities []configv1.ClusterVersionCapability) (map[configv1.ClusterVersionCapability]struct{},
156123
[]configv1.ClusterVersionCapability) {
157124

158-
capSet := DefaultCapabilitySet
125+
capSet := configv1.ClusterVersionCapabilitySetCurrent
159126

160127
if capabilitiesSpec != nil && len(capabilitiesSpec.BaselineCapabilitySet) > 0 {
161128
capSet = capabilitiesSpec.BaselineCapabilitySet
@@ -171,13 +138,7 @@ func setEnabledCapabilities(capabilitiesSpec *configv1.ClusterVersionCapabilitie
171138
}
172139
}
173140
var implicitlyEnabled []configv1.ClusterVersionCapability
174-
for k := range priorEnabled {
175-
if _, ok := enabled[k]; !ok {
176-
implicitlyEnabled = append(implicitlyEnabled, k)
177-
enabled[k] = struct{}{}
178-
}
179-
}
180-
for k := range alwaysEnabled {
141+
for _, k := range capabilities {
181142
if _, ok := enabled[k]; !ok {
182143
implicitlyEnabled = append(implicitlyEnabled, k)
183144
enabled[k] = struct{}{}

lib/capability/capability_test.go

Lines changed: 8 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,12 @@ func TestSetCapabilities(t *testing.T) {
101101
}
102102
for _, test := range tests {
103103
t.Run(test.name, func(t *testing.T) {
104-
caps := SetCapabilities(test.config, nil, nil)
104+
caps := SetCapabilities(test.config, nil)
105105
if test.config.Spec.Capabilities == nil || (test.config.Spec.Capabilities != nil &&
106106
len(test.config.Spec.Capabilities.BaselineCapabilitySet) == 0) {
107107

108108
test.wantKnownKeys = configv1.KnownClusterVersionCapabilities
109-
test.wantEnabledKeys = configv1.ClusterVersionCapabilitySets[DefaultCapabilitySet]
109+
test.wantEnabledKeys = configv1.ClusterVersionCapabilitySets[configv1.ClusterVersionCapabilitySetCurrent]
110110
}
111111
if len(caps.KnownCapabilities) != len(test.wantKnownKeys) {
112112
t.Errorf("Incorrect number of KnownCapabilities keys, wanted: %q. KnownCapabilities returned: %v", test.wantKnownKeys, caps.KnownCapabilities)
@@ -130,11 +130,10 @@ func TestSetCapabilities(t *testing.T) {
130130

131131
func TestSetCapabilitiesWithImplicitlyEnabled(t *testing.T) {
132132
tests := []struct {
133-
name string
134-
config *configv1.ClusterVersion
135-
wantImplicit []string
136-
priorEnabled map[configv1.ClusterVersionCapability]struct{}
137-
alwaysEnabled map[configv1.ClusterVersionCapability]struct{}
133+
name string
134+
config *configv1.ClusterVersion
135+
wantImplicit []string
136+
priorEnabled []configv1.ClusterVersionCapability
138137
}{
139138
{name: "set baseline capabilities with additional",
140139
config: &configv1.ClusterVersion{
@@ -144,36 +143,13 @@ func TestSetCapabilitiesWithImplicitlyEnabled(t *testing.T) {
144143
},
145144
},
146145
},
147-
priorEnabled: map[configv1.ClusterVersionCapability]struct{}{"cap1": {}, "cap2": {}, "cap3": {}},
146+
priorEnabled: []configv1.ClusterVersionCapability{"cap1", "cap2", "cap3", "cap2"},
148147
wantImplicit: []string{"cap1", "cap2", "cap3"},
149148
},
150-
{name: "set baseline capabilities with always enabled",
151-
config: &configv1.ClusterVersion{
152-
Spec: configv1.ClusterVersionSpec{
153-
Capabilities: &configv1.ClusterVersionCapabilitiesSpec{
154-
BaselineCapabilitySet: configv1.ClusterVersionCapabilitySetCurrent,
155-
},
156-
},
157-
},
158-
alwaysEnabled: map[configv1.ClusterVersionCapability]struct{}{"cap1": {}, "cap2": {}, "cap3": {}},
159-
wantImplicit: []string{"cap1", "cap2", "cap3"},
160-
},
161-
{name: "set baseline capabilities with additional and always enabled",
162-
config: &configv1.ClusterVersion{
163-
Spec: configv1.ClusterVersionSpec{
164-
Capabilities: &configv1.ClusterVersionCapabilitiesSpec{
165-
BaselineCapabilitySet: configv1.ClusterVersionCapabilitySetCurrent,
166-
},
167-
},
168-
},
169-
priorEnabled: map[configv1.ClusterVersionCapability]struct{}{"cap1": {}, "cap2": {}, "cap3": {}},
170-
alwaysEnabled: map[configv1.ClusterVersionCapability]struct{}{"cap1": {}, "cap2": {}, "cap4": {}},
171-
wantImplicit: []string{"cap1", "cap2", "cap3", "cap4"},
172-
},
173149
}
174150
for _, test := range tests {
175151
t.Run(test.name, func(t *testing.T) {
176-
caps := SetCapabilities(test.config, test.priorEnabled, test.alwaysEnabled)
152+
caps := SetCapabilities(test.config, test.priorEnabled)
177153
if len(caps.ImplicitlyEnabledCapabilities) != len(test.wantImplicit) {
178154
t.Errorf("Incorrect number of implicitly enabled keys, wanted: %q. ImplicitlyEnabledCapabilities returned: %v", test.wantImplicit, caps.ImplicitlyEnabledCapabilities)
179155
}

pkg/cvo/cvo.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ import (
3737
"github.com/openshift/library-go/pkg/verify/store/configmap"
3838
"github.com/openshift/library-go/pkg/verify/store/sigstore"
3939

40-
"github.com/openshift/cluster-version-operator/lib/capability"
4140
"github.com/openshift/cluster-version-operator/lib/resourcebuilder"
4241
"github.com/openshift/cluster-version-operator/lib/validation"
4342
"github.com/openshift/cluster-version-operator/pkg/clusterconditions"
@@ -288,7 +287,7 @@ func (optr *Operator) LoadInitialPayload(ctx context.Context, startingRequiredFe
288287
}
289288

290289
update, err := payload.LoadUpdate(optr.defaultPayloadDir(), optr.release.Image, optr.exclude, string(startingRequiredFeatureSet),
291-
optr.clusterProfile, capability.GetKnownCapabilities())
290+
optr.clusterProfile, configv1.KnownClusterVersionCapabilities)
292291

293292
if err != nil {
294293
return nil, fmt.Errorf("the local release contents are invalid - no current version can be determined from disk: %v", err)

pkg/cvo/sync_worker.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ import (
44
"context"
55
"errors"
66
"fmt"
7+
"maps"
78
"math/rand"
89
"reflect"
10+
"slices"
911
"sort"
1012
"strings"
1113
"sync"
@@ -483,7 +485,9 @@ func (w *SyncWorker) Update(ctx context.Context, generation int64, desired confi
483485
return w.status.DeepCopy()
484486
}
485487

486-
work.Capabilities = capability.SetCapabilities(config, priorCaps, capability.GetCapabilitiesAsMap(w.alwaysEnableCapabilities))
488+
// ensureEnabledCapabilities includes both explicitly and implicitly enabled capabilities
489+
ensureEnabledCapabilities := append(slices.Collect(maps.Keys(priorCaps)), w.alwaysEnableCapabilities...)
490+
work.Capabilities = capability.SetCapabilities(config, ensureEnabledCapabilities)
487491

488492
versionEqual, overridesEqual, capabilitiesEqual :=
489493
equalSyncWork(w.work, work, fmt.Sprintf("considering cluster version generation %d", generation))

0 commit comments

Comments
 (0)