Skip to content

Commit 563f188

Browse files
committed
pkg/reconciler: fix dependent watches
1 parent 87812b5 commit 563f188

File tree

3 files changed

+27
-25
lines changed

3 files changed

+27
-25
lines changed

pkg/reconciler/internal/hook/hook.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import (
2424
"helm.sh/helm/v3/pkg/releaseutil"
2525
"k8s.io/apimachinery/pkg/api/meta"
2626
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
27-
"k8s.io/apimachinery/pkg/runtime"
2827
"k8s.io/apimachinery/pkg/runtime/schema"
2928
"sigs.k8s.io/controller-runtime/pkg/controller"
3029
"sigs.k8s.io/controller-runtime/pkg/handler"
@@ -37,10 +36,9 @@ import (
3736
"github.com/joelanford/helm-operator/pkg/internal/sdk/predicate"
3837
)
3938

40-
func NewDependentResourceWatcher(c controller.Controller, rm meta.RESTMapper, owner runtime.Object) hook.PostHook {
39+
func NewDependentResourceWatcher(c controller.Controller, rm meta.RESTMapper) hook.PostHook {
4140
return &dependentResourceWatcher{
4241
controller: c,
43-
owner: owner,
4442
restMapper: rm,
4543
m: sync.Mutex{},
4644
watches: make(map[schema.GroupVersionKind]struct{}),
@@ -49,14 +47,13 @@ func NewDependentResourceWatcher(c controller.Controller, rm meta.RESTMapper, ow
4947

5048
type dependentResourceWatcher struct {
5149
controller controller.Controller
52-
owner runtime.Object
5350
restMapper meta.RESTMapper
5451

5552
m sync.Mutex
5653
watches map[schema.GroupVersionKind]struct{}
5754
}
5855

59-
func (d *dependentResourceWatcher) Exec(_ *unstructured.Unstructured, rel release.Release, log logr.Logger) error {
56+
func (d *dependentResourceWatcher) Exec(owner *unstructured.Unstructured, rel release.Release, log logr.Logger) error {
6057
// using predefined functions for filtering events
6158
dependentPredicate := predicate.DependentPredicateFuncs()
6259

@@ -75,17 +72,22 @@ func (d *dependentResourceWatcher) Exec(_ *unstructured.Unstructured, rel releas
7572
continue
7673
}
7774

78-
useOwnerRef, err := controllerutil.SupportsOwnerReference(d.restMapper, d.owner, &obj)
75+
useOwnerRef, err := controllerutil.SupportsOwnerReference(d.restMapper, owner, &obj)
7976
if err != nil {
8077
return err
8178
}
8279

8380
if useOwnerRef {
84-
if err := d.controller.Watch(&source.Kind{Type: &obj}, &handler.EnqueueRequestForOwner{OwnerType: d.owner}, dependentPredicate); err != nil {
81+
if err := d.controller.Watch(&source.Kind{Type: &obj}, &handler.EnqueueRequestForOwner{
82+
OwnerType: owner,
83+
IsController: true,
84+
}, dependentPredicate); err != nil {
8585
return err
8686
}
8787
} else {
88-
if err := d.controller.Watch(&source.Kind{Type: &obj}, &sdkhandler.EnqueueRequestForAnnotation{Type: d.owner.GetObjectKind().GroupVersionKind().GroupKind().String()}, dependentPredicate); err != nil {
88+
if err := d.controller.Watch(&source.Kind{Type: &obj}, &sdkhandler.EnqueueRequestForAnnotation{
89+
Type: owner.GetObjectKind().GroupVersionKind().GroupKind().String(),
90+
}, dependentPredicate); err != nil {
8991
return err
9092
}
9193
}

pkg/reconciler/internal/hook/hook_test.go

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -66,22 +66,22 @@ var _ = Describe("Hook", func() {
6666
rel = &release.Release{
6767
Manifest: strings.Join([]string{rsOwnerNamespace}, "---\n"),
6868
}
69-
drw = internalhook.NewDependentResourceWatcher(c, rm, owner)
69+
drw = internalhook.NewDependentResourceWatcher(c, rm)
7070
})
7171
It("should fail with an invalid release manifest", func() {
7272
rel.Manifest = "---\nfoobar"
73-
err := drw.Exec(nil, *rel, log)
73+
err := drw.Exec(owner, *rel, log)
7474
Expect(err).NotTo(BeNil())
7575
})
7676
It("should fail with unknown owner kind", func() {
77-
Expect(drw.Exec(nil, *rel, log)).To(MatchError(&meta.NoKindMatchError{
77+
Expect(drw.Exec(owner, *rel, log)).To(MatchError(&meta.NoKindMatchError{
7878
GroupKind: schema.GroupKind{Group: "apps", Kind: "Deployment"},
7979
SearchedVersions: []string{"v1"},
8080
}))
8181
})
8282
It("should fail with unknown dependent kind", func() {
8383
rm.Add(schema.GroupVersionKind{Group: "apps", Version: "v1", Kind: "Deployment"}, meta.RESTScopeNamespace)
84-
Expect(drw.Exec(nil, *rel, log)).To(MatchError(&meta.NoKindMatchError{
84+
Expect(drw.Exec(owner, *rel, log)).To(MatchError(&meta.NoKindMatchError{
8585
GroupKind: schema.GroupKind{Group: "apps", Kind: "ReplicaSet"},
8686
SearchedVersions: []string{"v1"},
8787
}))
@@ -110,8 +110,8 @@ var _ = Describe("Hook", func() {
110110
rel = &release.Release{
111111
Manifest: strings.Join([]string{clusterRole, clusterRole, rsOwnerNamespace, rsOwnerNamespace}, "---\n"),
112112
}
113-
drw = internalhook.NewDependentResourceWatcher(c, rm, owner)
114-
Expect(drw.Exec(nil, *rel, log)).To(Succeed())
113+
drw = internalhook.NewDependentResourceWatcher(c, rm)
114+
Expect(drw.Exec(owner, *rel, log)).To(Succeed())
115115
Expect(c.WatchCalls).To(HaveLen(2))
116116
Expect(c.WatchCalls[0].Handler).To(BeAssignableToTypeOf(&handler.EnqueueRequestForOwner{}))
117117
Expect(c.WatchCalls[1].Handler).To(BeAssignableToTypeOf(&handler.EnqueueRequestForOwner{}))
@@ -133,8 +133,8 @@ var _ = Describe("Hook", func() {
133133
rel = &release.Release{
134134
Manifest: strings.Join([]string{rsOwnerNamespace, ssOtherNamespace}, "---\n"),
135135
}
136-
drw = internalhook.NewDependentResourceWatcher(c, rm, owner)
137-
Expect(drw.Exec(nil, *rel, log)).To(Succeed())
136+
drw = internalhook.NewDependentResourceWatcher(c, rm)
137+
Expect(drw.Exec(owner, *rel, log)).To(Succeed())
138138
Expect(c.WatchCalls).To(HaveLen(2))
139139
Expect(c.WatchCalls[0].Handler).To(BeAssignableToTypeOf(&handler.EnqueueRequestForOwner{}))
140140
Expect(c.WatchCalls[1].Handler).To(BeAssignableToTypeOf(&handler.EnqueueRequestForOwner{}))
@@ -144,8 +144,8 @@ var _ = Describe("Hook", func() {
144144
rel = &release.Release{
145145
Manifest: strings.Join([]string{clusterRole, clusterRoleBinding}, "---\n"),
146146
}
147-
drw = internalhook.NewDependentResourceWatcher(c, rm, owner)
148-
Expect(drw.Exec(nil, *rel, log)).To(Succeed())
147+
drw = internalhook.NewDependentResourceWatcher(c, rm)
148+
Expect(drw.Exec(owner, *rel, log)).To(Succeed())
149149
Expect(c.WatchCalls).To(HaveLen(2))
150150
Expect(c.WatchCalls[0].Handler).To(BeAssignableToTypeOf(&handler.EnqueueRequestForOwner{}))
151151
Expect(c.WatchCalls[1].Handler).To(BeAssignableToTypeOf(&handler.EnqueueRequestForOwner{}))
@@ -170,8 +170,8 @@ var _ = Describe("Hook", func() {
170170
rel = &release.Release{
171171
Manifest: strings.Join([]string{rsOwnerNamespace}, "---\n"),
172172
}
173-
drw = internalhook.NewDependentResourceWatcher(c, rm, owner)
174-
Expect(drw.Exec(nil, *rel, log)).To(Succeed())
173+
drw = internalhook.NewDependentResourceWatcher(c, rm)
174+
Expect(drw.Exec(owner, *rel, log)).To(Succeed())
175175
Expect(c.WatchCalls).To(HaveLen(1))
176176
Expect(c.WatchCalls[0].Handler).To(BeAssignableToTypeOf(&handler.EnqueueRequestForOwner{}))
177177
})
@@ -180,8 +180,8 @@ var _ = Describe("Hook", func() {
180180
rel = &release.Release{
181181
Manifest: strings.Join([]string{clusterRole}, "---\n"),
182182
}
183-
drw = internalhook.NewDependentResourceWatcher(c, rm, owner)
184-
Expect(drw.Exec(nil, *rel, log)).To(Succeed())
183+
drw = internalhook.NewDependentResourceWatcher(c, rm)
184+
Expect(drw.Exec(owner, *rel, log)).To(Succeed())
185185
Expect(c.WatchCalls).To(HaveLen(1))
186186
Expect(c.WatchCalls[0].Handler).To(BeAssignableToTypeOf(&sdkhandler.EnqueueRequestForAnnotation{}))
187187
})
@@ -190,8 +190,8 @@ var _ = Describe("Hook", func() {
190190
rel = &release.Release{
191191
Manifest: strings.Join([]string{ssOtherNamespace}, "---\n"),
192192
}
193-
drw = internalhook.NewDependentResourceWatcher(c, rm, owner)
194-
Expect(drw.Exec(nil, *rel, log)).To(Succeed())
193+
drw = internalhook.NewDependentResourceWatcher(c, rm)
194+
Expect(drw.Exec(owner, *rel, log)).To(Succeed())
195195
Expect(c.WatchCalls).To(HaveLen(1))
196196
Expect(c.WatchCalls[0].Handler).To(BeAssignableToTypeOf(&sdkhandler.EnqueueRequestForAnnotation{}))
197197
})

pkg/reconciler/reconciler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -770,7 +770,7 @@ func (r *Reconciler) setupWatches(mgr ctrl.Manager, c controller.Controller) err
770770
}
771771

772772
if !r.skipDependentWatches {
773-
r.postHooks = append([]hook.PostHook{internalhook.NewDependentResourceWatcher(c, mgr.GetRESTMapper(), obj)}, r.postHooks...)
773+
r.postHooks = append([]hook.PostHook{internalhook.NewDependentResourceWatcher(c, mgr.GetRESTMapper())}, r.postHooks...)
774774
}
775775
return nil
776776
}

0 commit comments

Comments
 (0)