Skip to content

Commit f7b047d

Browse files
committed
Handlers should pass the Cluster information
1 parent 2530566 commit f7b047d

File tree

3 files changed

+62
-33
lines changed

3 files changed

+62
-33
lines changed

pkg/handler/enqueue.go

Lines changed: 38 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"sigs.k8s.io/controller-runtime/pkg/event"
2525
logf "sigs.k8s.io/controller-runtime/pkg/internal/log"
2626
"sigs.k8s.io/controller-runtime/pkg/reconcile"
27+
"sigs.k8s.io/logical-cluster"
2728
)
2829

2930
var enqueueLog = logf.RuntimeLog.WithName("eventhandler").WithName("EnqueueRequestForObject")
@@ -43,25 +44,36 @@ func (e *EnqueueRequestForObject) Create(ctx context.Context, evt event.CreateEv
4344
enqueueLog.Error(nil, "CreateEvent received with no metadata", "event", evt)
4445
return
4546
}
46-
q.Add(reconcile.Request{NamespacedName: types.NamespacedName{
47-
Name: evt.Object.GetName(),
48-
Namespace: evt.Object.GetNamespace(),
49-
}})
47+
q.Add(reconcile.Request{
48+
Cluster: logical.FromContext(ctx),
49+
NamespacedName: types.NamespacedName{
50+
Name: evt.Object.GetName(),
51+
Namespace: evt.Object.GetNamespace(),
52+
},
53+
})
5054
}
5155

5256
// Update implements EventHandler.
5357
func (e *EnqueueRequestForObject) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) {
58+
logicalName := logical.FromContext(ctx)
59+
5460
switch {
5561
case evt.ObjectNew != nil:
56-
q.Add(reconcile.Request{NamespacedName: types.NamespacedName{
57-
Name: evt.ObjectNew.GetName(),
58-
Namespace: evt.ObjectNew.GetNamespace(),
59-
}})
62+
q.Add(reconcile.Request{
63+
Cluster: logicalName,
64+
NamespacedName: types.NamespacedName{
65+
Name: evt.ObjectNew.GetName(),
66+
Namespace: evt.ObjectNew.GetNamespace(),
67+
},
68+
})
6069
case evt.ObjectOld != nil:
61-
q.Add(reconcile.Request{NamespacedName: types.NamespacedName{
62-
Name: evt.ObjectOld.GetName(),
63-
Namespace: evt.ObjectOld.GetNamespace(),
64-
}})
70+
q.Add(reconcile.Request{
71+
Cluster: logicalName,
72+
NamespacedName: types.NamespacedName{
73+
Name: evt.ObjectOld.GetName(),
74+
Namespace: evt.ObjectOld.GetNamespace(),
75+
},
76+
})
6577
default:
6678
enqueueLog.Error(nil, "UpdateEvent received with no metadata", "event", evt)
6779
}
@@ -73,10 +85,13 @@ func (e *EnqueueRequestForObject) Delete(ctx context.Context, evt event.DeleteEv
7385
enqueueLog.Error(nil, "DeleteEvent received with no metadata", "event", evt)
7486
return
7587
}
76-
q.Add(reconcile.Request{NamespacedName: types.NamespacedName{
77-
Name: evt.Object.GetName(),
78-
Namespace: evt.Object.GetNamespace(),
79-
}})
88+
q.Add(reconcile.Request{
89+
Cluster: logical.FromContext(ctx),
90+
NamespacedName: types.NamespacedName{
91+
Name: evt.Object.GetName(),
92+
Namespace: evt.Object.GetNamespace(),
93+
},
94+
})
8095
}
8196

8297
// Generic implements EventHandler.
@@ -85,8 +100,11 @@ func (e *EnqueueRequestForObject) Generic(ctx context.Context, evt event.Generic
85100
enqueueLog.Error(nil, "GenericEvent received with no metadata", "event", evt)
86101
return
87102
}
88-
q.Add(reconcile.Request{NamespacedName: types.NamespacedName{
89-
Name: evt.Object.GetName(),
90-
Namespace: evt.Object.GetNamespace(),
91-
}})
103+
q.Add(reconcile.Request{
104+
Cluster: logical.FromContext(ctx),
105+
NamespacedName: types.NamespacedName{
106+
Name: evt.Object.GetName(),
107+
Namespace: evt.Object.GetNamespace(),
108+
},
109+
})
92110
}

pkg/handler/enqueue_mapped.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"sigs.k8s.io/controller-runtime/pkg/client"
2424
"sigs.k8s.io/controller-runtime/pkg/event"
2525
"sigs.k8s.io/controller-runtime/pkg/reconcile"
26+
"sigs.k8s.io/logical-cluster"
2627
)
2728

2829
// MapFunc is the signature required for enqueueing requests from a generic function.
@@ -79,10 +80,16 @@ func (e *enqueueRequestsFromMapFunc) Generic(ctx context.Context, evt event.Gene
7980

8081
func (e *enqueueRequestsFromMapFunc) mapAndEnqueue(ctx context.Context, q workqueue.RateLimitingInterface, object client.Object, reqs map[reconcile.Request]empty) {
8182
for _, req := range e.toRequests(ctx, object) {
82-
_, ok := reqs[req]
83-
if !ok {
84-
q.Add(req)
85-
reqs[req] = empty{}
83+
if _, ok := reqs[req]; ok {
84+
// reqs is a map of requests to avoid enqueueing the same request multiple times.
85+
continue
8686
}
87+
// If the request doesn't specify a cluster, use the cluster from the context.
88+
if req.Cluster == "" {
89+
req.Cluster = logical.FromContext(ctx)
90+
}
91+
// Enqueue the request and track it.
92+
q.Add(req)
93+
reqs[req] = empty{}
8794
}
8895
}

pkg/handler/enqueue_owner.go

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"sigs.k8s.io/controller-runtime/pkg/event"
3131
logf "sigs.k8s.io/controller-runtime/pkg/internal/log"
3232
"sigs.k8s.io/controller-runtime/pkg/reconcile"
33+
"sigs.k8s.io/logical-cluster"
3334
)
3435

3536
var _ EventHandler = &enqueueRequestForOwner{}
@@ -85,7 +86,7 @@ type enqueueRequestForOwner struct {
8586
// Create implements EventHandler.
8687
func (e *enqueueRequestForOwner) Create(ctx context.Context, evt event.CreateEvent, q workqueue.RateLimitingInterface) {
8788
reqs := map[reconcile.Request]empty{}
88-
e.getOwnerReconcileRequest(evt.Object, reqs)
89+
e.getOwnerReconcileRequest(ctx, evt.Object, reqs)
8990
for req := range reqs {
9091
q.Add(req)
9192
}
@@ -94,8 +95,8 @@ func (e *enqueueRequestForOwner) Create(ctx context.Context, evt event.CreateEve
9495
// Update implements EventHandler.
9596
func (e *enqueueRequestForOwner) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) {
9697
reqs := map[reconcile.Request]empty{}
97-
e.getOwnerReconcileRequest(evt.ObjectOld, reqs)
98-
e.getOwnerReconcileRequest(evt.ObjectNew, reqs)
98+
e.getOwnerReconcileRequest(ctx, evt.ObjectOld, reqs)
99+
e.getOwnerReconcileRequest(ctx, evt.ObjectNew, reqs)
99100
for req := range reqs {
100101
q.Add(req)
101102
}
@@ -104,7 +105,7 @@ func (e *enqueueRequestForOwner) Update(ctx context.Context, evt event.UpdateEve
104105
// Delete implements EventHandler.
105106
func (e *enqueueRequestForOwner) Delete(ctx context.Context, evt event.DeleteEvent, q workqueue.RateLimitingInterface) {
106107
reqs := map[reconcile.Request]empty{}
107-
e.getOwnerReconcileRequest(evt.Object, reqs)
108+
e.getOwnerReconcileRequest(ctx, evt.Object, reqs)
108109
for req := range reqs {
109110
q.Add(req)
110111
}
@@ -113,7 +114,7 @@ func (e *enqueueRequestForOwner) Delete(ctx context.Context, evt event.DeleteEve
113114
// Generic implements EventHandler.
114115
func (e *enqueueRequestForOwner) Generic(ctx context.Context, evt event.GenericEvent, q workqueue.RateLimitingInterface) {
115116
reqs := map[reconcile.Request]empty{}
116-
e.getOwnerReconcileRequest(evt.Object, reqs)
117+
e.getOwnerReconcileRequest(ctx, evt.Object, reqs)
117118
for req := range reqs {
118119
q.Add(req)
119120
}
@@ -141,7 +142,7 @@ func (e *enqueueRequestForOwner) parseOwnerTypeGroupKind(scheme *runtime.Scheme)
141142

142143
// getOwnerReconcileRequest looks at object and builds a map of reconcile.Request to reconcile
143144
// owners of object that match e.OwnerType.
144-
func (e *enqueueRequestForOwner) getOwnerReconcileRequest(object metav1.Object, result map[reconcile.Request]empty) {
145+
func (e *enqueueRequestForOwner) getOwnerReconcileRequest(ctx context.Context, object metav1.Object, result map[reconcile.Request]empty) {
145146
// Iterate through the OwnerReferences looking for a match on Group and Kind against what was requested
146147
// by the user
147148
for _, ref := range e.getOwnersReferences(object) {
@@ -159,9 +160,12 @@ func (e *enqueueRequestForOwner) getOwnerReconcileRequest(object metav1.Object,
159160
// object in the event.
160161
if ref.Kind == e.groupKind.Kind && refGV.Group == e.groupKind.Group {
161162
// Match found - add a Request for the object referred to in the OwnerReference
162-
request := reconcile.Request{NamespacedName: types.NamespacedName{
163-
Name: ref.Name,
164-
}}
163+
request := reconcile.Request{
164+
Cluster: logical.FromContext(ctx),
165+
NamespacedName: types.NamespacedName{
166+
Name: ref.Name,
167+
},
168+
}
165169

166170
// if owner is not namespaced then we should not set the namespace
167171
mapping, err := e.mapper.RESTMapping(e.groupKind, refGV.Version)

0 commit comments

Comments
 (0)