Skip to content

Commit 2cd20d2

Browse files
committed
Do not modify object from the lister cache (#2562)
Problem: Objects retrieved from the lister should not be modified. Solution: In locations where an object originating from the lister cache must be modified, modify a copy of the object instead. Signed-off-by: Alexander Greene <[email protected]> Upstream-repository: operator-lifecycle-manager Upstream-commit: 5a7f8033dfc04150d1c21ef4e86fd7bc00bbfa39
1 parent 79c7825 commit 2cd20d2

File tree

10 files changed

+30
-16
lines changed

10 files changed

+30
-16
lines changed

staging/operator-lifecycle-manager/pkg/controller/bundle/bundle_unpacker.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -647,6 +647,7 @@ func (c *ConfigMapUnpacker) ensureRole(cmRef *corev1.ObjectReference) (role *rba
647647
return
648648
}
649649
}
650+
role = role.DeepCopy()
650651
role.Rules = append(role.Rules, rule)
651652

652653
role, err = c.client.RbacV1().Roles(role.GetNamespace()).Update(context.TODO(), role, metav1.UpdateOptions{})

staging/operator-lifecycle-manager/pkg/controller/install/apiservice.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ func (i *StrategyDeploymentInstaller) createOrUpdateAPIService(caPEM []byte, des
4141
}
4242
apiService.SetName(apiServiceName)
4343
} else {
44+
apiService = apiService.DeepCopy()
4445
csv, ok := i.owner.(*v1alpha1.ClusterServiceVersion)
4546
if !ok {
4647
return fmt.Errorf("APIServices require a CSV Owner.")

staging/operator-lifecycle-manager/pkg/controller/install/webhook.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ func (i *StrategyDeploymentInstaller) createOrUpdateMutatingWebhook(ogNamespacel
106106
}
107107
}
108108
for _, webhook := range existingWebhooks.Items {
109+
webhook = *webhook.DeepCopy()
109110
// Update the list of webhooks
110111
webhook.Webhooks = []admissionregistrationv1.MutatingWebhook{
111112
desc.GetMutatingWebhook(i.owner.GetNamespace(), ogNamespacelabelSelector, caPEM),
@@ -154,6 +155,7 @@ func (i *StrategyDeploymentInstaller) createOrUpdateValidatingWebhook(ogNamespac
154155
return nil
155156
}
156157
for _, webhook := range existingWebhooks.Items {
158+
webhook = *webhook.DeepCopy()
157159
// Update the list of webhooks
158160
webhook.Webhooks = []admissionregistrationv1.ValidatingWebhook{
159161
desc.GetValidatingWebhook(i.owner.GetNamespace(), ogNamespacelabelSelector, caPEM),

staging/operator-lifecycle-manager/pkg/controller/operators/olm/operator.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -846,6 +846,7 @@ func (a *Operator) syncObject(obj interface{}) (syncError error) {
846846
if related {
847847
csvList := a.csvSet(metaObj.GetNamespace(), v1alpha1.CSVPhaseFailed)
848848
for _, csv := range csvList {
849+
csv = csv.DeepCopy()
849850
if csv.Status.Reason != v1alpha1.CSVReasonComponentFailedNoRetry {
850851
continue
851852
}
@@ -1244,7 +1245,7 @@ func (a *Operator) allNamespaceOperatorGroups() ([]*v1.OperatorGroup, error) {
12441245
result := []*v1.OperatorGroup{}
12451246
for _, operatorGroup := range operatorGroups {
12461247
if NewNamespaceSet(operatorGroup.Status.Namespaces).IsAllNamespaces() {
1247-
result = append(result, operatorGroup)
1248+
result = append(result, operatorGroup.DeepCopy())
12481249
}
12491250
}
12501251
return result, nil
@@ -1483,7 +1484,7 @@ func (a *Operator) getCopiedCSVDisabledEventsForCSV(csv *v1alpha1.ClusterService
14831484
event.InvolvedObject.Name == csv.GetName() &&
14841485
event.InvolvedObject.UID == csv.GetUID() &&
14851486
event.Reason == v1.DisabledCopiedCSVsConditionType {
1486-
result = append(result, event)
1487+
result = append(result, *event.DeepCopy())
14871488
}
14881489
}
14891490

@@ -1592,7 +1593,7 @@ func (a *Operator) operatorGroupFromAnnotations(logger *logrus.Entry, csv *v1alp
15921593
return nil
15931594
}
15941595

1595-
return operatorGroup
1596+
return operatorGroup.DeepCopy()
15961597
}
15971598

15981599
func (a *Operator) operatorGroupForCSV(csv *v1alpha1.ClusterServiceVersion, logger *logrus.Entry) (*v1.OperatorGroup, error) {
@@ -1633,7 +1634,7 @@ func (a *Operator) operatorGroupForCSV(csv *v1alpha1.ClusterServiceVersion, logg
16331634
return nil, nil
16341635
}
16351636
logger.Debug("csv in operatorgroup")
1636-
return operatorGroup, nil
1637+
return operatorGroup.DeepCopy(), nil
16371638
default:
16381639
err = fmt.Errorf("csv created in namespace with multiple operatorgroups, can't pick one automatically")
16391640
logger.WithError(err).Warn("csv failed to become an operatorgroup member")

staging/operator-lifecycle-manager/pkg/controller/operators/olm/operatorgroup.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func (a *Operator) syncOperatorGroups(obj interface{}) error {
7373

7474
// Check if there is a stale multiple OG condition and clear it if existed.
7575
if len(groups) == 1 {
76-
og := groups[0]
76+
og := groups[0].DeepCopy()
7777
if c := meta.FindStatusCondition(og.Status.Conditions, v1.MutlipleOperatorGroupCondition); c != nil {
7878
meta.RemoveStatusCondition(&og.Status.Conditions, v1.MutlipleOperatorGroupCondition)
7979
if og.GetName() == op.GetName() {
@@ -93,7 +93,8 @@ func (a *Operator) syncOperatorGroups(obj interface{}) error {
9393
Reason: v1.MultipleOperatorGroupsReason,
9494
Message: "Multiple OperatorGroup found in the same namespace",
9595
}
96-
for _, og := range groups {
96+
for i := range groups {
97+
og := groups[i].DeepCopy()
9798
if c := meta.FindStatusCondition(og.Status.Conditions, v1.MutlipleOperatorGroupCondition); c != nil {
9899
continue
99100
}
@@ -115,11 +116,12 @@ func (a *Operator) syncOperatorGroups(obj interface{}) error {
115116
return err
116117
}
117118
if op.Status.ServiceAccountRef != previousRef {
118-
crdList, err := a.lister.OperatorsV1alpha1().ClusterServiceVersionLister().List(labels.Everything())
119+
csvList, err := a.lister.OperatorsV1alpha1().ClusterServiceVersionLister().List(labels.Everything())
119120
if err != nil {
120121
return err
121122
}
122-
for _, csv := range crdList {
123+
for i := range csvList {
124+
csv := csvList[i].DeepCopy()
123125
if group, ok := csv.GetAnnotations()[v1.OperatorGroupAnnotationKey]; !ok || group != op.GetName() {
124126
continue
125127
}

vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/controller/bundle/bundle_unpacker.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/controller/install/apiservice.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/controller/install/webhook.go

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/olm/operator.go

Lines changed: 5 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/olm/operatorgroup.go

Lines changed: 6 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)