Skip to content

Commit 2f01213

Browse files
committed
POC for wrapping handler.EventHandler
1 parent 7f0c6dc commit 2f01213

File tree

3 files changed

+32
-4
lines changed

3 files changed

+32
-4
lines changed

pkg/builder/controller.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,11 @@ func (blder *Builder) For(object client.Object, opts ...ForOption) *Builder {
9797

9898
// OwnsInput represents the information set by Owns method.
9999
type OwnsInput struct {
100-
matchEveryOwner bool
101-
object client.Object
102-
predicates []predicate.Predicate
103-
objectProjection objectProjection
100+
matchEveryOwner bool
101+
object client.Object
102+
predicates []predicate.Predicate
103+
objectProjection objectProjection
104+
eventHandlerWrapper handler.EventHandlerWrapper
104105
}
105106

106107
// Owns defines types of Objects being *generated* by the ControllerManagedBy, and configures the ControllerManagedBy to respond to
@@ -300,6 +301,9 @@ func (blder *Builder) doWatch() error {
300301
blder.forInput.object,
301302
opts...,
302303
)
304+
if own.eventHandlerWrapper != nil {
305+
hdler = own.eventHandlerWrapper.Wrap(hdler)
306+
}
303307
allPredicates := append([]predicate.Predicate(nil), blder.globalPredicates...)
304308
allPredicates = append(allPredicates, own.predicates...)
305309
if err := blder.ctrl.Watch(src, hdler, allPredicates...); err != nil {

pkg/builder/options.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package builder
1818

1919
import (
20+
"sigs.k8s.io/controller-runtime/pkg/handler"
2021
"sigs.k8s.io/controller-runtime/pkg/predicate"
2122
)
2223

@@ -154,3 +155,20 @@ type matchEveryOwner struct{}
154155
func (o matchEveryOwner) ApplyToOwns(opts *OwnsInput) {
155156
opts.matchEveryOwner = true
156157
}
158+
159+
// WithEventHandlerWrapper sets the given wrapper event handler.
160+
func WithEventHandlerWrapper(wrapper handler.EventHandlerWrapper) EventHandlerWrapper {
161+
return EventHandlerWrapper{
162+
wrapper: wrapper,
163+
}
164+
}
165+
166+
// EventHandlerWrapper can act as a decorator for another EventHandler
167+
type EventHandlerWrapper struct {
168+
wrapper handler.EventHandlerWrapper
169+
}
170+
171+
// ApplyToOwns applies this configuration to the given OwnsInput options.
172+
func (e EventHandlerWrapper) ApplyToOwns(opts *OwnsInput) {
173+
opts.eventHandlerWrapper = e.wrapper
174+
}

pkg/handler/eventhandler.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,12 @@ type EventHandler interface {
5656
Generic(context.Context, event.GenericEvent, workqueue.RateLimitingInterface)
5757
}
5858

59+
// EventHandlerWrapper can act as a decorator for another EventHandler
60+
type EventHandlerWrapper interface {
61+
EventHandler
62+
Wrap(wrappee EventHandler) EventHandler
63+
}
64+
5965
var _ EventHandler = Funcs{}
6066

6167
// Funcs implements EventHandler.

0 commit comments

Comments
 (0)