Skip to content

Commit 7e2546f

Browse files
author
Per Goncalves da Silva
committed
remove ResourceEvent
Signed-off-by: Per Goncalves da Silva <[email protected]>
1 parent 9e61c41 commit 7e2546f

File tree

5 files changed

+28
-68
lines changed

5 files changed

+28
-68
lines changed

pkg/controller/operators/catalog/subscription/syncer.go

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
"context"
55
"fmt"
66

7+
"sigs.k8s.io/controller-runtime/pkg/client"
8+
79
"github.com/sirupsen/logrus"
810
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
911
"k8s.io/apimachinery/pkg/runtime"
@@ -47,9 +49,9 @@ func (s *subscriptionSyncer) now() *metav1.Time {
4749

4850
// Sync reconciles Subscription events by invoking a sequence of reconcilers, passing the result of each
4951
// successful reconciliation as an argument to its successor.
50-
func (s *subscriptionSyncer) Sync(ctx context.Context, event kubestate.ResourceEvent) error {
52+
func (s *subscriptionSyncer) Sync(ctx context.Context, obj client.Object) error {
5153
res := &v1alpha1.Subscription{}
52-
if err := scheme.Convert(event.Resource(), res, nil); err != nil {
54+
if err := scheme.Convert(obj, res, nil); err != nil {
5355
return err
5456
}
5557

@@ -58,20 +60,13 @@ func (s *subscriptionSyncer) Sync(ctx context.Context, event kubestate.ResourceE
5860
logger := s.logger.WithFields(logrus.Fields{
5961
"reconciling": fmt.Sprintf("%T", res),
6062
"selflink": res.GetSelfLink(),
61-
"event": event.Type(),
6263
})
6364
logger.Info("syncing")
6465

6566
// Enter initial state based on subscription and event type
6667
// TODO: Consider generalizing initial generic add, update, delete transitions in the kubestate package.
6768
// Possibly make a resource event aware bridge between Sync and reconciler.
68-
initial := NewSubscriptionState(res.DeepCopy())
69-
switch event.Type() {
70-
case kubestate.ResourceAdded:
71-
initial = initial.Add()
72-
case kubestate.ResourceUpdated:
73-
initial = initial.Update()
74-
}
69+
initial := NewSubscriptionState(res.DeepCopy()).Update()
7570

7671
reconciled, err := s.reconcilers.Reconcile(ctx, initial)
7772
if err != nil {

pkg/controller/operators/catalog/subscription/syncer_test.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
"context"
55
"testing"
66

7+
"sigs.k8s.io/controller-runtime/pkg/client"
8+
79
"github.com/sirupsen/logrus"
810
"github.com/stretchr/testify/require"
911

@@ -16,7 +18,7 @@ func TestSync(t *testing.T) {
1618
syncer kubestate.Syncer
1719
}
1820
type args struct {
19-
event kubestate.ResourceEvent
21+
obj client.Object
2022
}
2123
type want struct {
2224
err error
@@ -36,10 +38,7 @@ func TestSync(t *testing.T) {
3638
},
3739
},
3840
args: args{
39-
event: kubestate.NewResourceEvent(
40-
kubestate.ResourceAdded,
41-
&v1alpha1.Subscription{},
42-
),
41+
obj: &v1alpha1.Subscription{},
4342
},
4443
want: want{
4544
err: nil,
@@ -52,7 +51,7 @@ func TestSync(t *testing.T) {
5251
ctx, cancel := context.WithCancel(context.TODO())
5352
defer cancel()
5453

55-
require.Equal(t, tt.want.err, tt.fields.syncer.Sync(ctx, tt.args.event))
54+
require.Equal(t, tt.want.err, tt.fields.syncer.Sync(ctx, tt.args.obj))
5655
})
5756
}
5857
}

pkg/lib/kubestate/kubestate.go

Lines changed: 5 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package kubestate
33
import (
44
"context"
55
"k8s.io/apimachinery/pkg/types"
6+
"sigs.k8s.io/controller-runtime/pkg/client"
67
)
78

89
type State interface {
@@ -134,56 +135,21 @@ func (r ReconcilerChain) Reconcile(ctx context.Context, in State) (out State, er
134135
return
135136
}
136137

137-
// ResourceEventType tells an operator what kind of event has occurred on a given resource.
138-
type ResourceEventType string
139-
140-
const (
141-
// ResourceAdded tells the operator that a given resources has been added.
142-
ResourceAdded ResourceEventType = "add"
143-
// ResourceUpdated tells the operator that a given resources has been updated.
144-
ResourceUpdated ResourceEventType = "update"
145-
)
146-
147-
type ResourceEvent interface {
148-
Type() ResourceEventType
149-
Resource() interface{}
150-
}
151-
152-
type resourceEvent struct {
153-
eventType ResourceEventType
154-
resource interface{}
155-
}
156-
157-
func (r resourceEvent) Type() ResourceEventType {
158-
return r.eventType
159-
}
160-
161-
func (r resourceEvent) Resource() interface{} {
162-
return r.resource
163-
}
164-
165-
func NewResourceEvent(eventType ResourceEventType, resource interface{}) ResourceEvent {
166-
return resourceEvent{
167-
eventType: eventType,
168-
resource: resource,
169-
}
170-
}
171-
172138
type Notifier interface {
173139
Notify(event types.NamespacedName)
174140
}
175141

176142
type NotifyFunc func(event types.NamespacedName)
177143

178144
// SyncFunc syncs resource events.
179-
type SyncFunc func(ctx context.Context, event ResourceEvent) error
145+
type SyncFunc func(ctx context.Context, obj client.Object) error
180146

181147
// Sync lets a sync func implement Syncer.
182-
func (s SyncFunc) Sync(ctx context.Context, event ResourceEvent) error {
183-
return s(ctx, event)
148+
func (s SyncFunc) Sync(ctx context.Context, obj client.Object) error {
149+
return s(ctx, obj)
184150
}
185151

186152
// Syncer describes something that syncs resource events.
187153
type Syncer interface {
188-
Sync(ctx context.Context, event ResourceEvent) error
154+
Sync(ctx context.Context, obj client.Object) error
189155
}

pkg/lib/queueinformer/queueinformer.go

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import (
55
"fmt"
66
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
77
"k8s.io/apimachinery/pkg/types"
8+
"sigs.k8s.io/controller-runtime/pkg/client"
89

9-
"github.com/pkg/errors"
1010
"github.com/sirupsen/logrus"
1111
"k8s.io/client-go/tools/cache"
1212
"k8s.io/client-go/util/workqueue"
@@ -30,8 +30,8 @@ type QueueInformer struct {
3030
}
3131

3232
// Sync invokes all registered sync handlers in the QueueInformer's chain
33-
func (q *QueueInformer) Sync(ctx context.Context, event kubestate.ResourceEvent) error {
34-
return q.syncer.Sync(ctx, event)
33+
func (q *QueueInformer) Sync(ctx context.Context, obj client.Object) error {
34+
return q.syncer.Sync(ctx, obj)
3535
}
3636

3737
// Enqueue adds a key to the queue. If obj is a key already it gets added directly.
@@ -131,12 +131,7 @@ type LegacySyncHandler func(obj interface{}) error
131131

132132
// ToSyncer returns the Syncer equivalent of the sync handler.
133133
func (l LegacySyncHandler) ToSyncer() kubestate.Syncer {
134-
return kubestate.SyncFunc(func(ctx context.Context, event kubestate.ResourceEvent) error {
135-
switch event.Type() {
136-
case kubestate.ResourceAdded, kubestate.ResourceUpdated:
137-
return l(event.Resource())
138-
default:
139-
return errors.Errorf("unexpected resource event type: %s", event.Type())
140-
}
134+
return kubestate.SyncFunc(func(ctx context.Context, obj client.Object) error {
135+
return l(obj)
141136
})
142137
}

pkg/lib/queueinformer/queueinformer_operator.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ package queueinformer
33
import (
44
"context"
55
"fmt"
6+
"sigs.k8s.io/controller-runtime/pkg/client"
67
"sync"
78
"time"
89

9-
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/kubestate"
1010
"github.com/pkg/errors"
1111
"github.com/sirupsen/logrus"
1212
"k8s.io/apimachinery/pkg/types"
@@ -298,10 +298,15 @@ func (o *operator) processNextWorkItem(ctx context.Context, loop *QueueInformer)
298298
queue.Forget(item)
299299
return true
300300
}
301-
event := kubestate.NewResourceEvent(kubestate.ResourceUpdated, resource)
301+
obj, ok := resource.(client.Object)
302+
if !ok {
303+
logger.Warn("cached object is not a kubernetes resource (client.Object)")
304+
queue.Forget(item)
305+
return true
306+
}
302307

303308
// Sync and requeue on error
304-
err = loop.Sync(ctx, event)
309+
err = loop.Sync(ctx, obj)
305310
if requeues := queue.NumRequeues(item); err != nil && requeues < 8 {
306311
logger.WithField("requeues", requeues).Trace("requeuing with rate limiting")
307312
utilruntime.HandleError(errors.Wrap(err, fmt.Sprintf("sync %q failed", item)))

0 commit comments

Comments
 (0)