@@ -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,7 @@ func (r *OperatorReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
162
165
}
163
166
}
164
167
165
- r .setLastResourceVersion (req .NamespacedName , operator .GetResourceVersion ())
168
+ r .setLastResourceVersionIfExists (req .NamespacedName , operator .GetResourceVersion ())
166
169
167
170
return ctrl.Result {}, nil
168
171
}
@@ -224,6 +227,14 @@ func (r *OperatorReconciler) setLastResourceVersion(name types.NamespacedName, r
224
227
r .lastResourceVersion [name ] = rv
225
228
}
226
229
230
+ func (r * OperatorReconciler ) setLastResourceVersionIfExists (name types.NamespacedName , rv string ) {
231
+ r .mu .Lock ()
232
+ defer r .mu .Unlock ()
233
+ if _ , ok := r .lastResourceVersion [name ]; ok {
234
+ r .lastResourceVersion [name ] = rv
235
+ }
236
+ }
237
+
227
238
func (r * OperatorReconciler ) unsetLastResourceVersion (name types.NamespacedName ) {
228
239
r .mu .Lock ()
229
240
defer r .mu .Unlock ()
0 commit comments