Skip to content

Commit 06e192f

Browse files
Merge pull request #1513 from njhale/fix-qset
Bug 1834136: fix(queues): use a single gc queue
2 parents 34d6563 + 3f6d1ad commit 06e192f

File tree

2 files changed

+23
-11
lines changed

2 files changed

+23
-11
lines changed

pkg/controller/operators/olm/operator.go

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -702,13 +702,14 @@ func (a *Operator) syncObject(obj interface{}) (syncError error) {
702702
a.requeueOwnerCSVs(metaObj)
703703
} else {
704704
switch metaObj.(type) {
705-
case *rbacv1.ClusterRole, *rbacv1.ClusterRoleBinding:
705+
case *rbacv1.ClusterRole, *rbacv1.ClusterRoleBinding, *admissionregistrationv1.MutatingWebhookConfiguration, *admissionregistrationv1.ValidatingWebhookConfiguration:
706706
resourceEvent := kubestate.NewResourceEvent(
707707
kubestate.ResourceUpdated,
708708
metaObj,
709709
)
710-
syncError = a.objGCQueueSet.RequeueEvent(ns, resourceEvent)
711-
logger.Debugf("syncObject - requeued update event for %v, res=%v", resourceEvent, syncError)
710+
if syncError = a.objGCQueueSet.RequeueEvent("", resourceEvent); syncError != nil {
711+
logger.WithError(syncError).Warnf("failed to requeue gc event: %v", resourceEvent)
712+
}
712713
return
713714
}
714715
}
@@ -950,17 +951,19 @@ func (a *Operator) handleClusterServiceVersionDeletion(obj interface{}) {
950951
logger.WithError(err).Warn("cannot list cluster role bindings")
951952
}
952953
for _, crb := range crbs {
953-
syncError := a.objGCQueueSet.RequeueEvent("", kubestate.NewResourceEvent(kubestate.ResourceUpdated, crb))
954-
logger.Debugf("handleCSVdeletion - requeued update event for %v, res=%v", crb, syncError)
954+
if err := a.objGCQueueSet.RequeueEvent("", kubestate.NewResourceEvent(kubestate.ResourceUpdated, crb)); err != nil {
955+
logger.WithError(err).Warnf("failed to requeue gc event: %v", crb)
956+
}
955957
}
956958

957959
crs, err := a.lister.RbacV1().ClusterRoleLister().List(ownerSelector)
958960
if err != nil {
959961
logger.WithError(err).Warn("cannot list cluster roles")
960962
}
961963
for _, cr := range crs {
962-
syncError := a.objGCQueueSet.RequeueEvent("", kubestate.NewResourceEvent(kubestate.ResourceUpdated, cr))
963-
logger.Debugf("handleCSVdeletion - requeued update event for %v, res=%v", cr, syncError)
964+
if err := a.objGCQueueSet.RequeueEvent("", kubestate.NewResourceEvent(kubestate.ResourceUpdated, cr)); err != nil {
965+
logger.WithError(err).Warnf("failed to requeue gc event: %v", cr)
966+
}
964967
}
965968

966969
webhookSelector := labels.SelectorFromSet(ownerutil.OwnerLabel(clusterServiceVersion, v1alpha1.ClusterServiceVersionKind)).String()
@@ -969,17 +972,21 @@ func (a *Operator) handleClusterServiceVersionDeletion(obj interface{}) {
969972
logger.WithError(err).Warn("cannot list MutatingWebhookConfigurations")
970973
}
971974
for _, webhook := range mWebhooks.Items {
972-
syncError := a.objGCQueueSet.RequeueEvent("", kubestate.NewResourceEvent(kubestate.ResourceUpdated, &webhook))
973-
logger.Debugf("handleCSVdeletion - requeued update event for %v, res=%v", webhook, syncError)
975+
w := webhook
976+
if err := a.objGCQueueSet.RequeueEvent("", kubestate.NewResourceEvent(kubestate.ResourceUpdated, &w)); err != nil {
977+
logger.WithError(err).Warnf("failed to requeue gc event: %v", webhook)
978+
}
974979
}
975980

976981
vWebhooks, err := a.opClient.KubernetesInterface().AdmissionregistrationV1().ValidatingWebhookConfigurations().List(context.TODO(), metav1.ListOptions{LabelSelector: webhookSelector})
977982
if err != nil {
978983
logger.WithError(err).Warn("cannot list ValidatingWebhookConfigurations")
979984
}
980985
for _, webhook := range vWebhooks.Items {
981-
syncError := a.objGCQueueSet.RequeueEvent("", kubestate.NewResourceEvent(kubestate.ResourceUpdated, &webhook))
982-
logger.Debugf("handleCSVdeletion - requeued update event for %v, res=%v", webhook, syncError)
986+
w := webhook
987+
if err := a.objGCQueueSet.RequeueEvent("", kubestate.NewResourceEvent(kubestate.ResourceUpdated, &w)); err != nil {
988+
logger.WithError(err).Warnf("failed to requeue gc event: %v", webhook)
989+
}
983990
}
984991
}
985992

pkg/lib/queueinformer/resourcequeue.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ func (r *ResourceQueueSet) RequeueEvent(namespace string, resourceEvent kubestat
3939
r.mutex.RLock()
4040
defer r.mutex.RUnlock()
4141

42+
if queue, ok := r.queueSet[metav1.NamespaceAll]; len(r.queueSet) == 1 && ok {
43+
queue.AddRateLimited(resourceEvent)
44+
return nil
45+
}
46+
4247
if queue, ok := r.queueSet[namespace]; ok {
4348
queue.AddRateLimited(resourceEvent)
4449
return nil

0 commit comments

Comments
 (0)