Skip to content

Commit 9179c03

Browse files
Cleanup and lint fixes
Signed-off-by: Danil Grigorev <[email protected]>
1 parent 8984b30 commit 9179c03

File tree

12 files changed

+73
-67
lines changed

12 files changed

+73
-67
lines changed

example_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ func GenericExample() {
8787

8888
b := ctrl.NewControllerManagedBy(manager) // Create the Controller
8989
// ReplicaSet is the Application API
90-
b.Add(builder.For(manager, &appsv1.ReplicaSet{})).
90+
err = b.Add(builder.For(manager, &appsv1.ReplicaSet{})).
9191
Add(builder.Owns(manager, &appsv1.ReplicaSet{}, &corev1.Pod{})). // ReplicaSet owns Pods created by it
9292
Complete(&ReplicaSetReconciler{Client: manager.GetClient()})
9393
if err != nil {

pkg/builder/controller.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,10 +187,12 @@ func (blder *Builder) WatchesRawSource(src source.PrepareSyncing, eventHandler h
187187
return blder
188188
}
189189

190+
// For defines the type of Object being reconciled and allows to respond to object events inheriting the object type at all cases.
190191
func For[T client.Object](mgr manager.Manager, object T, prct ...predicate.ObjectPredicate[T]) source.Source {
191192
return source.ObjectKind(mgr.GetCache(), object).PrepareObject(&handler.EnqueueRequest[T]{}, prct...)
192193
}
193194

195+
// Owns defines the type of owner and owned objects to watch with predicates inheriting the owned object type applying to owned object.
194196
func Owns[F, T client.Object](mgr manager.Manager, owner F, owned T, prct ...predicate.ObjectPredicate[T]) source.Source {
195197
src := source.ObjectKind(mgr.GetCache(), owned)
196198

@@ -202,10 +204,12 @@ func Owns[F, T client.Object](mgr manager.Manager, owner F, owned T, prct ...pre
202204
return src.PrepareObject(handler.ObjectFuncAdapter[T](hdler), prct...)
203205
}
204206

207+
// Watches defines the type of object to watch with ObjectHandler and predicates inheriting the object type.
205208
func Watches[T client.Object](mgr manager.Manager, object T, eventHandler handler.ObjectHandler[T], prct ...predicate.ObjectPredicate[T]) source.Source {
206209
return source.ObjectKind(mgr.GetCache(), object).PrepareObject(eventHandler, prct...)
207210
}
208211

212+
// Add allows to pass a prepared source object with a fully defined event handler and predicates list.
209213
func (blder *Builder) Add(src source.Source) *Builder {
210214
blder.rawWatches = append(blder.rawWatches, src)
211215
return blder

pkg/cache/cache.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,6 @@ type Informers interface {
9696
client.FieldIndexer
9797
}
9898

99-
type ObjectInformers[T any] interface {
100-
Informer
101-
102-
// GetInformer fetches or constructs an informer for the given object that corresponds to a single
103-
// API kind and resource.
104-
GetInformer(ctx context.Context, obj T, opts ...InformerGetOption) (Informer, error)
105-
}
106-
10799
// Informer allows you to interact with the underlying informer.
108100
type Informer interface {
109101
// AddEventHandler adds an event handler to the shared informer using the shared informer's resync

pkg/controller/controller.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,13 +192,13 @@ func NewUnmanaged(name string, mgr manager.Manager, options Options) (Controller
192192
// ReconcileIDFromContext gets the reconcileID from the current context.
193193
var ReconcileIDFromContext = controller.ReconcileIDFromContext
194194

195-
// ControllerAdapter is an adapter for old controller implementations
196-
type ControllerAdapter struct {
195+
// Adapter is an adapter for old controller implementations
196+
type Adapter struct {
197197
Controller
198198
}
199199

200200
// Watch implements old controller Watch interface
201-
func (c *ControllerAdapter) Watch(src source.Source, handler handler.EventHandler, predicates ...predicate.Predicate) error {
201+
func (c *Adapter) Watch(src source.Source, handler handler.EventHandler, predicates ...predicate.Predicate) error {
202202
source, ok := src.(source.PrepareSource)
203203
if !ok {
204204
return fmt.Errorf("expected source to fulfill SourcePrepare interface")

pkg/handler/enqueue_mapped.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ type MapFunc func(context.Context, client.Object) []reconcile.Request
3838
// For UpdateEvents which contain both a new and old object, the transformation function is run on both
3939
// objects and both sets of Requests are enqueue.
4040
func EnqueueRequestsFromMapFunc(fn MapFunc) EventHandler {
41-
return &enqueueRequestsFromObjectMapFunc[any]{
42-
toRequests: MapFuncAdapter(fn),
41+
return &enqueueRequestsFromObjectMapFunc[client.Object]{
42+
toRequests: func(ctx context.Context, obj client.Object) (reqs []reconcile.Request) {
43+
return fn(ctx, obj)
44+
},
4345
}
4446
}

pkg/handler/enqueue_mapped_typed.go

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
"context"
2121

2222
"k8s.io/client-go/util/workqueue"
23-
"sigs.k8s.io/controller-runtime/pkg/client"
2423
"sigs.k8s.io/controller-runtime/pkg/event"
2524
"sigs.k8s.io/controller-runtime/pkg/reconcile"
2625
)
@@ -30,17 +29,6 @@ import (
3029
// Unlike MapFunc, a specific object type can be used to process and create mapping requests.
3130
type ObjectMapFunc[T any] func(context.Context, T) []reconcile.Request
3231

33-
func MapFuncAdapter(m MapFunc) ObjectMapFunc[any] {
34-
return func(ctx context.Context, a any) (reqs []reconcile.Request) {
35-
obj, ok := a.(client.Object)
36-
if ok {
37-
return m(ctx, obj)
38-
}
39-
40-
return []reconcile.Request{}
41-
}
42-
}
43-
4432
// EnqueueRequestsFromObjectMapFunc enqueues Requests by running a transformation function that outputs a collection
4533
// of reconcile.Requests on each Event. The reconcile.Requests may be for an arbitrary set of objects
4634
// defined by some user specified transformation of the source Event. (e.g. trigger Reconciler for a set of objects
@@ -116,10 +104,10 @@ func (e *enqueueRequestsFromObjectMapFunc[T]) Create(ctx context.Context, evt ev
116104

117105
// Update implements EventHandler.
118106
func (e *enqueueRequestsFromObjectMapFunc[T]) Update(ctx context.Context, evt event.UpdateEvent, q workqueue.RateLimitingInterface) {
119-
old, okOld := evt.ObjectOld.(T)
120-
new, okNew := evt.ObjectNew.(T)
107+
oldObj, okOld := evt.ObjectOld.(T)
108+
newObj, okNew := evt.ObjectNew.(T)
121109
if okOld && okNew {
122-
e.OnUpdate(ctx, old, new, q)
110+
e.OnUpdate(ctx, oldObj, newObj, q)
123111
}
124112
}
125113

pkg/handler/enqueue_typed.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
var _ EventHandler = &EnqueueRequest[metav1.Object]{}
3030
var _ ObjectHandler[metav1.Object] = &EnqueueRequest[metav1.Object]{}
3131

32+
// Request is a minimal subset of a client.Object interface, allowing to enact on non kubernetes resources.
3233
type Request interface {
3334
GetName() string
3435
GetNamespace() string

pkg/handler/eventhandler.go

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ var _ EventHandler = Funcs{}
125125
var _ EventHandler = ObjectFuncs[any]{}
126126
var _ ObjectHandler[any] = ObjectFuncs[any]{}
127127

128-
// Funcs is a function that implements Predicate.
128+
// ObjectFuncs is a function that implements ObjectPredicate.
129129
type ObjectFuncs[T any] struct {
130130
// Create is called in response to an add event. Defaults to no-op.
131131
// RateLimitingInterface is used to enqueue reconcile.Requests.
@@ -146,10 +146,10 @@ type ObjectFuncs[T any] struct {
146146

147147
// Update implements Predicate.
148148
func (p ObjectFuncs[T]) Update(ctx context.Context, e event.UpdateEvent, q workqueue.RateLimitingInterface) {
149-
new, ok := e.ObjectNew.(T)
150-
old, oldOk := e.ObjectOld.(T)
151-
if ok && oldOk {
152-
p.OnUpdate(ctx, old, new, q)
149+
objNew, newOk := e.ObjectNew.(T)
150+
objOld, oldOk := e.ObjectOld.(T)
151+
if newOk && oldOk {
152+
p.OnUpdate(ctx, objOld, objNew, q)
153153
}
154154
}
155155

@@ -177,34 +177,35 @@ func (p ObjectFuncs[T]) Delete(ctx context.Context, e event.DeleteEvent, q workq
177177
}
178178
}
179179

180-
// Update implements Predicate.
180+
// OnUpdate implements ObjectPredicate.
181181
func (p ObjectFuncs[T]) OnUpdate(ctx context.Context, old, new T, q workqueue.RateLimitingInterface) {
182182
if p.UpdateFunc != nil {
183183
p.UpdateFunc(ctx, old, new, q)
184184
}
185185
}
186186

187-
// Generic implements Predicate.
187+
// OnGeneric implements ObjectPredicate.
188188
func (p ObjectFuncs[T]) OnGeneric(ctx context.Context, obj T, q workqueue.RateLimitingInterface) {
189189
if p.GenericFunc != nil {
190190
p.GenericFunc(ctx, obj, q)
191191
}
192192
}
193193

194-
// Create implements Predicate.
194+
// OnCreate implements ObjectPredicate.
195195
func (p ObjectFuncs[T]) OnCreate(ctx context.Context, obj T, q workqueue.RateLimitingInterface) {
196196
if p.CreateFunc != nil {
197197
p.CreateFunc(ctx, obj, q)
198198
}
199199
}
200200

201-
// Delete implements Predicate.
201+
// OnDelete implements ObjectPredicate.
202202
func (p ObjectFuncs[T]) OnDelete(ctx context.Context, obj T, q workqueue.RateLimitingInterface) {
203203
if p.DeleteFunc != nil {
204204
p.DeleteFunc(ctx, obj, q)
205205
}
206206
}
207207

208+
// ObjectFuncAdapter allows to reuse existing EventHandler for a typed ObjectHandler
208209
func ObjectFuncAdapter[T client.Object](h EventHandler) ObjectHandler[T] {
209210
return ObjectFuncs[T]{
210211
CreateFunc: func(ctx context.Context, obj T, queue workqueue.RateLimitingInterface) {
@@ -222,6 +223,7 @@ func ObjectFuncAdapter[T client.Object](h EventHandler) ObjectHandler[T] {
222223
}
223224
}
224225

226+
// EventHandlerAdapter allows to reuse existing typed event handler as EventHandler
225227
func EventHandlerAdapter[T client.Object](h ObjectHandler[T]) EventHandler {
226228
return Funcs{
227229
CreateFunc: func(ctx context.Context, e event.CreateEvent, queue workqueue.RateLimitingInterface) {
@@ -243,10 +245,10 @@ func EventHandlerAdapter[T client.Object](h ObjectHandler[T]) EventHandler {
243245
}
244246
},
245247
UpdateFunc: func(ctx context.Context, e event.UpdateEvent, queue workqueue.RateLimitingInterface) {
246-
new, ok := e.ObjectNew.(T)
247-
old, oldOk := e.ObjectOld.(T)
248-
if ok && oldOk {
249-
h.OnUpdate(ctx, old, new, queue)
248+
objNew, newOk := e.ObjectNew.(T)
249+
objOld, oldOk := e.ObjectOld.(T)
250+
if newOk && oldOk {
251+
h.OnUpdate(ctx, objOld, objNew, queue)
250252
}
251253
},
252254
}

pkg/interfaces/source.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1313
See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
16+
1617
package interfaces
1718

1819
import (
@@ -37,12 +38,12 @@ type Source interface {
3738
Start(context.Context, workqueue.RateLimitingInterface) error
3839
}
3940

40-
// PrepareSource: Prepares a Source to be used with EventHandler and predicates
41+
// PrepareSource - Prepares a Source to be used with EventHandler and predicates
4142
type PrepareSource interface {
4243
Prepare(handler.EventHandler, ...predicate.Predicate) SyncingSource
4344
}
4445

45-
// PrepareSourceObject[T]: Prepares a Source preserving the object type
46+
// PrepareSourceObject - Prepares a Source preserving the object type
4647
type PrepareSourceObject[T any] interface {
4748
PrepareObject(handler.ObjectHandler[T], ...predicate.ObjectPredicate[T]) SyncingSource
4849
}
@@ -59,13 +60,13 @@ type SyncingSource interface {
5960
Syncing
6061
}
6162

62-
// PrepareSyncing: A SyncingSource that also implements SourcePrepare and has WaitForSync method
63+
// PrepareSyncing - a SyncingSource that also implements SourcePrepare and has WaitForSync method
6364
type PrepareSyncing interface {
6465
SyncingSource
6566
PrepareSource
6667
}
6768

68-
// PrepareSyncingObject[T]: A SyncingSource that also implements PrepareSourceObject[T] and has WaitForSync method
69+
// PrepareSyncingObject - a SyncingSource that also implements PrepareSourceObject[T] and has WaitForSync method
6970
type PrepareSyncingObject[T any] interface {
7071
SyncingSource
7172
PrepareSourceObject[T]

pkg/internal/source/kind.go

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,15 @@ type Kind[T client.Object] struct {
3535
handler handler.ObjectHandler[T]
3636
}
3737

38-
// SetPredicates implements source.SyncingSource.
39-
func (ks *Kind[T]) SetPredicates(...predicate.PredicateConstraint) {
40-
panic("unimplemented")
41-
}
42-
38+
// PrepareObject implements PrepareSyncingObject preparation and should only be called when handler and predicates are available.
4339
func (ks *Kind[T]) PrepareObject(h handler.ObjectHandler[T], prct ...predicate.ObjectPredicate[T]) interfaces.SyncingSource {
4440
ks.handler = h
4541
ks.predicates = prct
4642

4743
return ks
4844
}
4945

46+
// Prepare implements Source preparation and should only be called when handler and predicates are available.
5047
func (ks *Kind[T]) Prepare(h handler.EventHandler, prct ...predicate.Predicate) interfaces.SyncingSource {
5148
ks.handler = handler.ObjectFuncAdapter[T](h)
5249
ks.predicates = predicate.ObjectPredicatesAdapter[T](prct...)
@@ -59,10 +56,10 @@ func (ks *Kind[T]) Start(
5956
ctx context.Context,
6057
queue workqueue.RateLimitingInterface,
6158
) error {
62-
return ks.Run(ctx, ks.handler, queue, ks.predicates...)
59+
return ks.run(ctx, ks.handler, queue, ks.predicates...)
6360
}
6461

65-
func (ks *Kind[T]) Run(ctx context.Context, handler handler.ObjectHandler[T], queue workqueue.RateLimitingInterface,
62+
func (ks *Kind[T]) run(ctx context.Context, handler handler.ObjectHandler[T], queue workqueue.RateLimitingInterface,
6663
prct ...predicate.ObjectPredicate[T]) error {
6764
if reflect.DeepEqual(ks.Type, *new(T)) {
6865
return fmt.Errorf("must create Kind with a non-nil object")

pkg/predicate/predicate.go

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,6 @@ import (
2828

2929
var log = logf.RuntimeLog.WithName("predicate").WithName("eventFilters")
3030

31-
type PredicateConstraint interface {
32-
Register()
33-
}
34-
3531
// Predicate filters events before enqueuing the keys.
3632
type Predicate interface {
3733
// Create returns true if the Create event should be processed
@@ -120,7 +116,7 @@ func (p Funcs) Generic(e event.GenericEvent) bool {
120116
return true
121117
}
122118

123-
// Funcs is a function that implements Predicate.
119+
// ObjectFuncs is a function that implements Predicate and ObjectPrediace.
124120
type ObjectFuncs[T any] struct {
125121
// Create returns true if the Create event should be processed
126122
CreateFunc func(obj T) bool
@@ -137,9 +133,9 @@ type ObjectFuncs[T any] struct {
137133

138134
// Update implements Predicate.
139135
func (p ObjectFuncs[T]) Update(e event.UpdateEvent) bool {
140-
new, ok := e.ObjectNew.(T)
141-
old, oldOk := e.ObjectOld.(T)
142-
return ok && oldOk && p.OnUpdate(old, new)
136+
newObj, newOk := e.ObjectNew.(T)
137+
oldObj, oldOk := e.ObjectOld.(T)
138+
return newOk && oldOk && p.OnUpdate(oldObj, newObj)
143139
}
144140

145141
// Generic implements Predicate.
@@ -160,22 +156,22 @@ func (p ObjectFuncs[T]) Delete(e event.DeleteEvent) bool {
160156
return ok && p.OnDelete(obj)
161157
}
162158

163-
// Update implements Predicate.
159+
// OnUpdate implements ObjectPredicate.
164160
func (p ObjectFuncs[T]) OnUpdate(old, new T) bool {
165161
return p.UpdateFunc == nil || p.UpdateFunc(old, new)
166162
}
167163

168-
// Generic implements Predicate.
164+
// OnGeneric implements ObjectPredicate.
169165
func (p ObjectFuncs[T]) OnGeneric(obj T) bool {
170166
return p.GenericFunc == nil || p.GenericFunc(obj)
171167
}
172168

173-
// Create implements Predicate.
169+
// OnCreate implements ObjectPredicate.
174170
func (p ObjectFuncs[T]) OnCreate(obj T) bool {
175171
return p.CreateFunc == nil || p.CreateFunc(obj)
176172
}
177173

178-
// Delete implements Predicate.
174+
// OnDelete implements ObjectPredicate.
179175
func (p ObjectFuncs[T]) OnDelete(obj T) bool {
180176
return p.DeleteFunc == nil || p.DeleteFunc(obj)
181177
}
@@ -200,7 +196,7 @@ func NewPredicateFuncs(filter func(object client.Object) bool) Funcs {
200196
}
201197
}
202198

203-
// NewPredicateFuncs returns a predicate funcs that applies the given filter function
199+
// NewObjectPredicateFuncs returns a typed predicate funcs that applies the given filter function
204200
// on CREATE, UPDATE, DELETE and GENERIC events. For UPDATE events, the filter is applied
205201
// to the new object.
206202
func NewObjectPredicateFuncs[T any](filter func(object T) bool) ObjectFuncs[T] {
@@ -590,6 +586,7 @@ func LabelSelectorPredicate(s metav1.LabelSelector) (Predicate, error) {
590586
}), nil
591587
}
592588

589+
// ObjectPredicateAdapter allows to reuse existing predicate as a typed ObjectPredicate
593590
func ObjectPredicateAdapter[T client.Object](h Predicate) ObjectPredicate[T] {
594591
return ObjectFuncs[T]{
595592
CreateFunc: func(obj T) bool {
@@ -607,6 +604,7 @@ func ObjectPredicateAdapter[T client.Object](h Predicate) ObjectPredicate[T] {
607604
}
608605
}
609606

607+
// ObjectPredicatesAdapter allows to reuse existing set of predicates as ObjectPredicates
610608
func ObjectPredicatesAdapter[T client.Object](predicates ...Predicate) (prdt []ObjectPredicate[T]) {
611609
for _, p := range predicates {
612610
prdt = append(prdt, ObjectPredicateAdapter[T](p))

0 commit comments

Comments
 (0)