Skip to content

Commit b542651

Browse files
committed
Make the backup repository controller doesn't invalidate the BSL on restart.
Signed-off-by: Xun Jiang <xun.jiang@broadcom.com>
1 parent b7ffcf6 commit b542651

4 files changed

Lines changed: 49 additions & 7 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Make the backup repository controller doesn't invalidate the BSL on restart

pkg/controller/backup_repository_controller.go

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"github.com/petar/GoLLRB/llrb"
2929
"github.com/pkg/errors"
3030
"github.com/sirupsen/logrus"
31+
corev1api "k8s.io/api/core/v1"
3132
apierrors "k8s.io/apimachinery/pkg/api/errors"
3233
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3334
"k8s.io/apimachinery/pkg/labels"
@@ -38,8 +39,6 @@ import (
3839
"sigs.k8s.io/controller-runtime/pkg/client"
3940
"sigs.k8s.io/controller-runtime/pkg/reconcile"
4041

41-
corev1api "k8s.io/api/core/v1"
42-
4342
velerov1api "github.com/vmware-tanzu/velero/pkg/apis/velero/v1"
4443
"github.com/vmware-tanzu/velero/pkg/constant"
4544
"github.com/vmware-tanzu/velero/pkg/label"
@@ -119,7 +118,22 @@ func (r *BackupRepoReconciler) SetupWithManager(mgr ctrl.Manager) error {
119118
// BSL may be recreated after deleting, so also include the create event
120119
&velerov1api.BackupStorageLocation{},
121120
kube.EnqueueRequestsFromMapUpdateFunc(r.invalidateBackupReposForBSL),
122-
builder.WithPredicates(kube.NewUpdateEventPredicate(r.needInvalidBackupRepo)),
121+
builder.WithPredicates(
122+
// Combine three predicates together to guarantee
123+
// only BSL's Delete Event and Update Event can enqueue.
124+
// We don't care about BSL's Generic Event and Create Event,
125+
// because BSL's periodical enqueue triggers Generic Event,
126+
// and the BackupRepository controller restart will triggers BSL create event.
127+
kube.NewUpdateEventPredicate(
128+
r.needInvalidBackupRepo,
129+
),
130+
kube.NewGenericEventPredicate(
131+
func(client.Object) bool { return false },
132+
),
133+
kube.NewCreateEventPredicate(
134+
func(client.Object) bool { return false },
135+
),
136+
),
123137
).
124138
Complete(r)
125139
}

pkg/util/kube/predicate.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,22 @@ func NewGenericEventPredicate(f func(object client.Object) bool) predicate.Predi
9898
}
9999

100100
// NewUpdateEventPredicate creates a new Predicate that checks the Update event with the provided func
101-
func NewUpdateEventPredicate(f func(objectOld client.Object, objectNew client.Object) bool) predicate.Predicate {
101+
func NewUpdateEventPredicate(
102+
f func(objectOld client.Object, objectNew client.Object) bool,
103+
) predicate.Predicate {
102104
return predicate.Funcs{
103105
UpdateFunc: func(event event.UpdateEvent) bool {
104106
return f(event.ObjectOld, event.ObjectNew)
105107
},
106108
}
107109
}
110+
111+
func NewCreateEventPredicate(
112+
f func(object client.Object) bool,
113+
) predicate.Predicate {
114+
return predicate.Funcs{
115+
CreateFunc: func(event event.CreateEvent) bool {
116+
return f(event.Object)
117+
},
118+
}
119+
}

pkg/util/kube/predicate_test.go

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -202,12 +202,27 @@ func TestNewGenericEventPredicate(t *testing.T) {
202202
}
203203

204204
func TestNewUpdateEventPredicate(t *testing.T) {
205-
predicate := NewUpdateEventPredicate(func(client.Object, client.Object) bool {
206-
return false
207-
})
205+
predicate := NewUpdateEventPredicate(
206+
func(client.Object, client.Object) bool {
207+
return false
208+
},
209+
)
208210

209211
assert.False(t, predicate.Update(event.UpdateEvent{}))
210212
assert.True(t, predicate.Create(event.CreateEvent{}))
211213
assert.True(t, predicate.Delete(event.DeleteEvent{}))
212214
assert.True(t, predicate.Generic(event.GenericEvent{}))
213215
}
216+
217+
func TestNewCreateEventPredicate(t *testing.T) {
218+
predicate := NewCreateEventPredicate(
219+
func(client.Object) bool {
220+
return false
221+
},
222+
)
223+
224+
assert.False(t, predicate.Create(event.CreateEvent{}))
225+
assert.True(t, predicate.Update(event.UpdateEvent{}))
226+
assert.True(t, predicate.Generic(event.GenericEvent{}))
227+
assert.True(t, predicate.Delete(event.DeleteEvent{}))
228+
}

0 commit comments

Comments
 (0)