Skip to content

Commit 3e1a16d

Browse files
committed
refractor updateStatusConditions to split calls to api server into it's own task
Signed-off-by: Anik Bhattacharjee <[email protected]>
1 parent af3c683 commit 3e1a16d

File tree

1 file changed

+27
-54
lines changed

1 file changed

+27
-54
lines changed

Diff for: pkg/controller/operators/catalog/operator.go

+27-54
Original file line numberDiff line numberDiff line change
@@ -961,34 +961,28 @@ func (o *Operator) syncResolvingNamespace(obj interface{}) error {
961961
// not-satisfiable error
962962
if _, ok := err.(solver.NotSatisfiable); ok {
963963
logger.WithError(err).Debug("resolution failed")
964-
_, updateErr := o.setSubsCond(subs, v1alpha1.SubscriptionResolutionFailed, "ConstraintsNotSatisfiable", err.Error(), true)
964+
subs = o.setSubsCond(subs, v1alpha1.SubscriptionResolutionFailed, "ConstraintsNotSatisfiable", err.Error(), true)
965+
_, updateErr := o.updateSubscriptionStatuses(subs)
965966
if updateErr != nil {
966967
logger.WithError(updateErr).Debug("failed to update subs conditions")
968+
return updateErr
967969
}
968970
return nil
969971
}
970-
_, updateErr := o.setSubsCond(subs, v1alpha1.SubscriptionResolutionFailed, "ErrorPreventedResolution", err.Error(), true)
972+
subs = o.setSubsCond(subs, v1alpha1.SubscriptionResolutionFailed, "ErrorPreventedResolution", err.Error(), true)
973+
_, updateErr := o.updateSubscriptionStatuses(subs)
971974
if updateErr != nil {
972975
logger.WithError(updateErr).Debug("failed to update subs conditions")
976+
return updateErr
973977
}
974978
return err
975979
} else {
976-
subs, updateErr := o.setSubsCond(updatedSubs, v1alpha1.SubscriptionResolutionFailed, "", "", false)
977-
if updateErr != nil {
978-
logger.WithError(updateErr).Debug("failed to update subs conditions")
979-
}
980-
updatedSubs = subs
981-
982-
// Also clear the condition from the subscriptions there were not included in the list of updatedSubs
983-
allSubs, err := o.listSubscriptions(namespace)
984-
if err != nil {
985-
logger.WithError(err).Debug("couldn't list subscriptions")
986-
return err
987-
}
988-
_, updateErr = o.setSubsCond(allSubs, v1alpha1.SubscriptionResolutionFailed, "", "", false)
980+
subs = o.setSubsCond(subs, v1alpha1.SubscriptionResolutionFailed, "", "", false)
981+
_, updateErr := o.updateSubscriptionStatuses(subs)
989982
if updateErr != nil {
990983
logger.WithError(updateErr).Debug("failed to update subs conditions")
991984
}
985+
updatedSubs = o.setSubsCond(updatedSubs, v1alpha1.SubscriptionResolutionFailed, "", "", false)
992986
}
993987

994988
// create installplan if anything updated
@@ -1020,7 +1014,8 @@ func (o *Operator) syncResolvingNamespace(obj interface{}) error {
10201014
logger.WithError(err).Debug("error ensuring installplan")
10211015
return err
10221016
}
1023-
if err := o.updateSubscriptionStatus(namespace, maxGeneration+1, updatedSubs, installPlanReference); err != nil {
1017+
updatedSubs = o.setIPReference(updatedSubs, maxGeneration+1, installPlanReference)
1018+
if _, err := o.updateSubscriptionStatuses(updatedSubs); err != nil {
10241019
logger.WithError(err).Debug("error ensuring subscription installplan state")
10251020
return err
10261021
}
@@ -1140,12 +1135,8 @@ func (o *Operator) ensureSubscriptionCSVState(logger *logrus.Entry, sub *v1alpha
11401135
return updatedSub, true, nil
11411136
}
11421137

1143-
func (o *Operator) updateSubscriptionStatus(namespace string, gen int, subs []*v1alpha1.Subscription, installPlanRef *corev1.ObjectReference) error {
1138+
func (o *Operator) setIPReference(subs []*v1alpha1.Subscription, gen int, installPlanRef *corev1.ObjectReference) []*v1alpha1.Subscription {
11441139
var (
1145-
errs []error
1146-
mu sync.Mutex
1147-
wg sync.WaitGroup
1148-
getOpts = metav1.GetOptions{}
11491140
lastUpdated = o.now()
11501141
)
11511142
for _, sub := range subs {
@@ -1156,33 +1147,8 @@ func (o *Operator) updateSubscriptionStatus(namespace string, gen int, subs []*v
11561147
sub.Status.State = v1alpha1.SubscriptionStateUpgradePending
11571148
sub.Status.InstallPlanGeneration = gen
11581149
}
1159-
1160-
wg.Add(1)
1161-
go func(s v1alpha1.Subscription) {
1162-
defer wg.Done()
1163-
1164-
update := func() error {
1165-
// Update the status of the latest revision
1166-
latest, err := o.client.OperatorsV1alpha1().Subscriptions(s.GetNamespace()).Get(context.TODO(), s.GetName(), getOpts)
1167-
if err != nil {
1168-
return err
1169-
}
1170-
1171-
latest.Status = s.Status
1172-
_, err = o.client.OperatorsV1alpha1().Subscriptions(namespace).UpdateStatus(context.TODO(), latest, metav1.UpdateOptions{})
1173-
1174-
return err
1175-
}
1176-
if err := retry.RetryOnConflict(retry.DefaultRetry, update); err != nil {
1177-
mu.Lock()
1178-
defer mu.Unlock()
1179-
errs = append(errs, err)
1180-
}
1181-
}(*sub)
11821150
}
1183-
wg.Wait()
1184-
1185-
return utilerrors.NewAggregate(errs)
1151+
return subs
11861152
}
11871153

11881154
func (o *Operator) ensureInstallPlan(logger *logrus.Entry, namespace string, gen int, subs []*v1alpha1.Subscription, installPlanApproval v1alpha1.Approval, steps []*v1alpha1.Step, bundleLookups []v1alpha1.BundleLookup) (*corev1.ObjectReference, error) {
@@ -1266,13 +1232,8 @@ func (o *Operator) createInstallPlan(namespace string, gen int, subs []*v1alpha1
12661232
return reference.GetReference(res)
12671233
}
12681234

1269-
func (o *Operator) setSubsCond(subs []*v1alpha1.Subscription, condType v1alpha1.SubscriptionConditionType, reason, message string, setTrue bool) ([]*v1alpha1.Subscription, error) {
1235+
func (o *Operator) setSubsCond(subs []*v1alpha1.Subscription, condType v1alpha1.SubscriptionConditionType, reason, message string, setTrue bool) []*v1alpha1.Subscription {
12701236
var (
1271-
errs []error
1272-
mu sync.Mutex
1273-
wg sync.WaitGroup
1274-
getOpts = metav1.GetOptions{}
1275-
updateOpts = metav1.UpdateOptions{}
12761237
lastUpdated = o.now()
12771238
)
12781239
for _, sub := range subs {
@@ -1292,7 +1253,20 @@ func (o *Operator) setSubsCond(subs []*v1alpha1.Subscription, condType v1alpha1.
12921253
cond.Status = corev1.ConditionFalse
12931254
}
12941255
sub.Status.SetCondition(cond)
1256+
}
1257+
return subs
1258+
}
12951259

1260+
func (o *Operator) updateSubscriptionStatuses(subs []*v1alpha1.Subscription) ([]*v1alpha1.Subscription, error) {
1261+
var (
1262+
errs []error
1263+
mu sync.Mutex
1264+
wg sync.WaitGroup
1265+
getOpts = metav1.GetOptions{}
1266+
updateOpts = metav1.UpdateOptions{}
1267+
)
1268+
1269+
for _, sub := range subs {
12961270
wg.Add(1)
12971271
go func(sub v1alpha1.Subscription) {
12981272
defer wg.Done()
@@ -1316,7 +1290,6 @@ func (o *Operator) setSubsCond(subs []*v1alpha1.Subscription, condType v1alpha1.
13161290
}(*sub)
13171291
}
13181292
wg.Wait()
1319-
13201293
return subs, utilerrors.NewAggregate(errs)
13211294
}
13221295

0 commit comments

Comments
 (0)