Skip to content

Commit baca995

Browse files
committed
Add delete handler for copied csv
Signed-off-by: Todd Short <[email protected]>
1 parent 7d53e44 commit baca995

File tree

2 files changed

+45
-25
lines changed

2 files changed

+45
-25
lines changed

pkg/controller/operators/olm/operator.go

Lines changed: 44 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ type Operator struct {
9797
csvQueueSet *queueinformer.ResourceQueueSet
9898
olmConfigQueue workqueue.TypedRateLimitingInterface[types.NamespacedName]
9999
csvCopyQueueSet *queueinformer.ResourceQueueSet
100-
copiedCSVGCQueueSet *queueinformer.ResourceQueueSet
100+
copiedCSVQueueSet *queueinformer.ResourceQueueSet
101101
nsQueueSet workqueue.TypedRateLimitingInterface[types.NamespacedName]
102102
apiServiceQueue workqueue.TypedRateLimitingInterface[types.NamespacedName]
103103
csvIndexers map[string]cache.Indexer
@@ -216,8 +216,8 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat
216216
Name: "olmConfig",
217217
}),
218218

219-
csvCopyQueueSet: queueinformer.NewEmptyResourceQueueSet(),
220-
copiedCSVGCQueueSet: queueinformer.NewEmptyResourceQueueSet(),
219+
csvCopyQueueSet: queueinformer.NewEmptyResourceQueueSet(),
220+
copiedCSVQueueSet: queueinformer.NewEmptyResourceQueueSet(),
221221
apiServiceQueue: workqueue.NewTypedRateLimitingQueueWithConfig[types.NamespacedName](
222222
workqueue.DefaultTypedControllerRateLimiter[types.NamespacedName](),
223223
workqueue.TypedRateLimitingQueueConfig[types.NamespacedName]{
@@ -371,25 +371,26 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat
371371
informersByNamespace[namespace].CopiedCSVInformer = copiedCSVInformer
372372
informersByNamespace[namespace].CopiedCSVLister = op.copiedCSVLister
373373

374-
// Register separate queue for gcing copied csvs
375-
copiedCSVGCQueue := workqueue.NewTypedRateLimitingQueueWithConfig[types.NamespacedName](
374+
// Register separate queue for gcing/syncing/deletion of copied csvs
375+
copiedCSVQueue := workqueue.NewTypedRateLimitingQueueWithConfig[types.NamespacedName](
376376
workqueue.DefaultTypedControllerRateLimiter[types.NamespacedName](),
377377
workqueue.TypedRateLimitingQueueConfig[types.NamespacedName]{
378-
Name: fmt.Sprintf("%s/csv-gc-revert", namespace),
378+
Name: fmt.Sprintf("%s/csv-copied-sync", namespace),
379379
})
380-
op.copiedCSVGCQueueSet.Set(namespace, copiedCSVGCQueue)
381-
copiedCSVGCQueueInformer, err := queueinformer.NewQueueInformer(
380+
op.copiedCSVQueueSet.Set(namespace, copiedCSVQueue)
381+
copiedCSVQueueInformer, err := queueinformer.NewQueueInformer(
382382
ctx,
383383
queueinformer.WithInformer(copiedCSVInformer),
384384
queueinformer.WithLogger(op.logger),
385-
queueinformer.WithQueue(copiedCSVGCQueue),
385+
queueinformer.WithQueue(copiedCSVQueue),
386386
queueinformer.WithIndexer(copiedCSVInformer.GetIndexer()),
387-
queueinformer.WithSyncer(queueinformer.LegacySyncHandler(op.syncResyncCsv).ToSyncer()),
387+
queueinformer.WithSyncer(queueinformer.LegacySyncHandler(op.syncCopiedCsv).ToSyncer()),
388+
queueinformer.WithDeletionHandler(op.deleteCopiedCsv),
388389
)
389390
if err != nil {
390391
return nil, err
391392
}
392-
if err := op.RegisterQueueInformer(copiedCSVGCQueueInformer); err != nil {
393+
if err := op.RegisterQueueInformer(copiedCSVQueueInformer); err != nil {
393394
return nil, err
394395
}
395396

@@ -1266,7 +1267,7 @@ func (a *Operator) handleClusterServiceVersionDeletion(obj interface{}) {
12661267
for _, namespace := range namespaces {
12671268
if namespace != operatorNamespace {
12681269
logger.WithField("targetNamespace", namespace).Debug("requeueing child csv for deletion")
1269-
if err := a.copiedCSVGCQueueSet.Requeue(namespace, clusterServiceVersion.GetName()); err != nil {
1270+
if err := a.copiedCSVQueueSet.Requeue(namespace, clusterServiceVersion.GetName()); err != nil {
12701271
logger.WithError(err).Warn("unable to requeue")
12711272
}
12721273
}
@@ -1929,7 +1930,35 @@ func (a *Operator) createCSVCopyingDisabledEvent(csv *v1alpha1.ClusterServiceVer
19291930
return nil
19301931
}
19311932

1932-
func (a *Operator) syncResyncCsv(obj interface{}) error {
1933+
func (a *Operator) requeueParentCsv(csv *v1alpha1.ClusterServiceVersion) error {
1934+
name := csv.GetName()
1935+
copiedNamespace := csv.GetNamespace()
1936+
a.logger.WithField("csv", fmt.Sprintf("%s/%s", copiedNamespace, name)).Debug("syncing copied CSV")
1937+
1938+
// Requeue parent CSV to deal with any changes to the copied CSV
1939+
copiedFromNamespace, ok := csv.GetLabels()[v1alpha1.CopiedLabelKey]
1940+
if !ok {
1941+
a.logger.Infof("no %q label found in CSV, skipping requeue", v1alpha1.CopiedLabelKey)
1942+
return nil
1943+
}
1944+
return a.csvCopyQueueSet.Requeue(copiedFromNamespace, name)
1945+
}
1946+
1947+
func (a *Operator) deleteCopiedCsv(obj interface{}) {
1948+
csv, ok := obj.(*v1alpha1.ClusterServiceVersion)
1949+
if !ok {
1950+
a.logger.Debugf("casting ClusterServiceVersion failed: wrong type: %#v", obj)
1951+
return
1952+
}
1953+
if !v1alpha1.IsCopied(csv) {
1954+
return
1955+
}
1956+
1957+
// Trigger partent reconciliation
1958+
a.requeueParentCsv(csv)
1959+
}
1960+
1961+
func (a *Operator) syncCopiedCsv(obj interface{}) error {
19331962
csv, ok := obj.(*v1alpha1.ClusterServiceVersion)
19341963
if !ok {
19351964
a.logger.Debugf("wrong type: %#v", obj)
@@ -1939,23 +1968,14 @@ func (a *Operator) syncResyncCsv(obj interface{}) error {
19391968
return nil
19401969
}
19411970

1942-
name := csv.GetName()
1943-
copiedNamespace := csv.GetNamespace()
1944-
a.logger.WithField("csv", fmt.Sprintf("%s/%s", copiedNamespace, name)).Debug("syncing copied CSV")
1945-
19461971
// check for any garbage collection
19471972
err := a.removeDanglingChildCSVs(csv)
19481973
if err != nil {
19491974
return err
19501975
}
19511976

1952-
// Requeue parent CSV to deal with any changes to the copied CSV
1953-
copiedFromNamespace, ok := csv.GetLabels()[v1alpha1.CopiedLabelKey]
1954-
if !ok {
1955-
a.logger.Infof("no %q label found in CSV, skipping requeue", v1alpha1.CopiedLabelKey)
1956-
return nil
1957-
}
1958-
return a.csvCopyQueueSet.Requeue(copiedFromNamespace, name)
1977+
// Trigger partent reconciliation
1978+
return a.requeueParentCsv(csv)
19591979
}
19601980

19611981
// operatorGroupFromAnnotations returns the OperatorGroup for the CSV only if the CSV is active one in the group

pkg/controller/operators/olm/operatorgroup.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -864,7 +864,7 @@ func (a *Operator) pruneFromNamespace(operatorGroupName, namespace string) error
864864
for _, csv := range fetchedCSVs {
865865
if v1alpha1.IsCopied(csv) && csv.GetAnnotations()[operatorsv1.OperatorGroupAnnotationKey] == operatorGroupName {
866866
a.logger.Debugf("Found CSV '%v' in namespace %v to delete", csv.GetName(), namespace)
867-
if err := a.copiedCSVGCQueueSet.Requeue(csv.GetNamespace(), csv.GetName()); err != nil {
867+
if err := a.copiedCSVQueueSet.Requeue(csv.GetNamespace(), csv.GetName()); err != nil {
868868
return err
869869
}
870870
}

0 commit comments

Comments
 (0)