@@ -130,13 +130,16 @@ func (r *OperatorReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
130
130
}
131
131
}
132
132
133
- if ! create {
134
- if rv , ok := r .getLastResourceVersion (req .NamespacedName ); ok && rv == in .ResourceVersion {
135
- log .V (1 ).Info ("Operator is already up-to-date" )
136
- return reconcile.Result {}, nil
137
- }
133
+ rv , ok := r .getLastResourceVersion (req .NamespacedName )
134
+ if ! create && ok && rv == in .ResourceVersion {
135
+ log .V (1 ).Info ("Operator is already up-to-date" )
136
+ return reconcile.Result {}, nil
138
137
}
139
138
139
+ // Set the cached resource version to 0 so we can handle
140
+ // the race with requests enqueuing via mapComponentRequests
141
+ r .setLastResourceVersion (req .NamespacedName , "0" )
142
+
140
143
// Wrap with convenience decorator
141
144
operator , err := r .factory .NewOperator (in )
142
145
if err != nil {
@@ -162,7 +165,10 @@ func (r *OperatorReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
162
165
}
163
166
}
164
167
165
- r .setLastResourceVersion (req .NamespacedName , operator .GetResourceVersion ())
168
+ // Only set the resource version if it already exists.
169
+ // If it does not exist, it means mapComponentRequests was called
170
+ // while we were reconciling and we need to reconcile again
171
+ r .setLastResourceVersionIfExists (req .NamespacedName , operator .GetResourceVersion ())
166
172
167
173
return ctrl.Result {}, nil
168
174
}
@@ -224,6 +230,14 @@ func (r *OperatorReconciler) setLastResourceVersion(name types.NamespacedName, r
224
230
r .lastResourceVersion [name ] = rv
225
231
}
226
232
233
+ func (r * OperatorReconciler ) setLastResourceVersionIfExists (name types.NamespacedName , rv string ) {
234
+ r .mu .Lock ()
235
+ defer r .mu .Unlock ()
236
+ if _ , ok := r .lastResourceVersion [name ]; ok {
237
+ r .lastResourceVersion [name ] = rv
238
+ }
239
+ }
240
+
227
241
func (r * OperatorReconciler ) unsetLastResourceVersion (name types.NamespacedName ) {
228
242
r .mu .Lock ()
229
243
defer r .mu .Unlock ()
0 commit comments