@@ -19,6 +19,7 @@ import (
19
19
"fmt"
20
20
"reflect"
21
21
"strings"
22
+ "time"
22
23
23
24
spokeClusterV1 "open-cluster-management.io/api/cluster/v1"
24
25
chv1 "open-cluster-management.io/multicloud-operators-channel/pkg/apis/apps/v1"
@@ -72,6 +73,7 @@ const (
72
73
controllerName = "channel"
73
74
controllerSetup = "channel-setup"
74
75
backupLabel = "cluster.open-cluster-management.io/backup"
76
+ requeuAfter = 1 * time .Minute
75
77
)
76
78
77
79
/**
@@ -116,9 +118,9 @@ func add(mgr manager.Manager, r reconcile.Reconciler, logger logr.Logger) error
116
118
}
117
119
118
120
// Watching managed cluster changes has been removed.
119
- // For any managed cluster reconcile events(create, update, delete), don't trigger the automatic role/rolebing update for all channels.
120
121
// It turns out an expensive action if there are > 1000 managed clusters. The OOMKilled issue would hit easiy due to tons of duplicate reconciliations
121
- // In this case, users should manually update channel cr to trigger the role/rolebinding update.
122
+ // To trigger the automatic role/rolebing update for all channels, every channel is enforced to reconcile every 1 minute.
123
+ // So all managed cluster add/removal will be reflected to the channel rolebindings in 1 minute.
122
124
123
125
return err
124
126
}
@@ -157,19 +159,19 @@ func (r *ReconcileChannel) Reconcile(ctx context.Context, request reconcile.Requ
157
159
// For additional cleanup logic use finalizers.
158
160
//sync the channel to the serving-channel annotation in all involved secrets - remove channel
159
161
if err := r .syncReferredObjAnnotationLabel (request , nil , srtGvk , log ); err != nil {
160
- return reconcile.Result {}, err
162
+ return reconcile.Result {RequeueAfter : requeuAfter }, err
161
163
}
162
164
163
165
//remove the channel from the serving-channel annotation in all involved ConfigMaps - remove channel
164
166
if err := r .syncReferredObjAnnotationLabel (request , nil , cmGvk , log ); err != nil {
165
- return reconcile.Result {}, err
167
+ return reconcile.Result {RequeueAfter : requeuAfter }, err
166
168
}
167
169
168
- return reconcile.Result {}, nil
170
+ return reconcile.Result {RequeueAfter : requeuAfter }, nil
169
171
}
170
172
171
173
// Error reading the object - requeue the request.
172
- return reconcile.Result {}, err
174
+ return reconcile.Result {RequeueAfter : requeuAfter }, err
173
175
}
174
176
175
177
if (strings .EqualFold (string (instance .Spec .Type ), chv1 .ChannelTypeNamespace )) && (instance .Spec .Pathname != instance .GetNamespace ()) {
@@ -178,10 +180,10 @@ func (r *ReconcileChannel) Reconcile(ctx context.Context, request reconcile.Requ
178
180
err := r .Update (context .TODO (), instance )
179
181
if err != nil {
180
182
log .Info (fmt .Sprintf ("can't update the pathname field due to %v" , err ))
181
- return reconcile.Result {}, err
183
+ return reconcile.Result {RequeueAfter : requeuAfter }, err
182
184
}
183
185
184
- return reconcile.Result {}, nil
186
+ return reconcile.Result {RequeueAfter : requeuAfter }, nil
185
187
}
186
188
187
189
// find the channel controller pod namespace, it is running in the ACM namespece
@@ -190,20 +192,20 @@ func (r *ReconcileChannel) Reconcile(ctx context.Context, request reconcile.Requ
190
192
err = r .validateClusterRBAC (instance , log , mchNamespace )
191
193
if err != nil {
192
194
log .Error (err , fmt .Sprintf ("failed to validate RBAC for clusters for channel %v" , instance .Name ))
193
- return reconcile.Result {}, err
195
+ return reconcile.Result {RequeueAfter : requeuAfter }, err
194
196
}
195
197
196
198
if err := r .handleReferencedObjects (instance , request , log ); err != nil {
197
- return reconcile.Result {}, err
199
+ return reconcile.Result {RequeueAfter : requeuAfter }, err
198
200
}
199
201
200
202
err = r .cleanRoleFromAcmNS (instance , log , mchNamespace )
201
203
if err != nil {
202
204
log .Error (err , "failed to clean up channel role/rolebinding in the ACM system NameSpace" )
203
- return reconcile.Result {}, err
205
+ return reconcile.Result {RequeueAfter : requeuAfter }, err
204
206
}
205
207
206
- return reconcile.Result {}, nil
208
+ return reconcile.Result {RequeueAfter : requeuAfter }, nil
207
209
}
208
210
209
211
func (r * ReconcileChannel ) handleReferencedObjects (instance * chv1.Channel , req reconcile.Request , log logr.Logger ) error {
0 commit comments