Skip to content

Commit 69e6d0b

Browse files
committed
Update managed reconciler to store observedGeneration on conditions and also update that controllers unit tests
1 parent db9545b commit 69e6d0b

File tree

4 files changed

+261
-182
lines changed

4 files changed

+261
-182
lines changed

apis/common/v1/condition.go

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,8 @@ func (c Condition) Equal(other Condition) bool {
101101
return c.Type == other.Type &&
102102
c.Status == other.Status &&
103103
c.Reason == other.Reason &&
104-
c.Message == other.Message
104+
c.Message == other.Message &&
105+
c.ObservedGeneration == other.ObservedGeneration
105106
}
106107

107108
// WithMessage returns a condition by adding the provided message to existing
@@ -169,26 +170,23 @@ func (s *ConditionedStatus) GetCondition(ct ConditionType) Condition {
169170
// ignoring the last transition time, to those already set.
170171
// Observed generation is updated if higher than the existing one.
171172
func (s *ConditionedStatus) SetConditions(c ...Condition) {
172-
for _, new := range c {
173+
for _, cond := range c {
173174
exists := false
174175
for i, existing := range s.Conditions {
175-
if existing.Type != new.Type {
176+
if existing.Type != cond.Type {
176177
continue
177178
}
178179

179-
if existing.Equal(new) {
180+
if existing.Equal(cond) {
180181
exists = true
181-
if existing.ObservedGeneration < new.ObservedGeneration {
182-
existing.ObservedGeneration = new.ObservedGeneration
183-
}
184182
continue
185183
}
186184

187-
s.Conditions[i] = new
185+
s.Conditions[i] = cond
188186
exists = true
189187
}
190188
if !exists {
191-
s.Conditions = append(s.Conditions, new)
189+
s.Conditions = append(s.Conditions, cond)
192190
}
193191
}
194192
}

apis/common/v1/condition_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,25 @@ func TestConditionEqual(t *testing.T) {
3232
b Condition
3333
want bool
3434
}{
35+
"Identical": {
36+
a: Condition{
37+
Type: TypeReady,
38+
Status: corev1.ConditionTrue,
39+
LastTransitionTime: metav1.Now(),
40+
Reason: ReasonCreating,
41+
Message: "UnitTest",
42+
ObservedGeneration: 1,
43+
},
44+
b: Condition{
45+
Type: TypeReady,
46+
Status: corev1.ConditionTrue,
47+
LastTransitionTime: metav1.Now(),
48+
Reason: ReasonCreating,
49+
Message: "UnitTest",
50+
ObservedGeneration: 1,
51+
},
52+
want: true,
53+
},
3554
"IdenticalIgnoringTimestamp": {
3655
a: Condition{Type: TypeReady, LastTransitionTime: metav1.Now()},
3756
b: Condition{Type: TypeReady, LastTransitionTime: metav1.Now()},
@@ -57,6 +76,11 @@ func TestConditionEqual(t *testing.T) {
5776
b: Condition{Message: "uncool"},
5877
want: false,
5978
},
79+
"DifferentObservedGeneration": {
80+
a: Condition{ObservedGeneration: 1},
81+
b: Condition{},
82+
want: false,
83+
},
6084
"CheckReconcilePaused": {
6185
a: ReconcilePaused(),
6286
b: Condition{
@@ -139,6 +163,11 @@ func TestSetConditions(t *testing.T) {
139163
c: []Condition{Available()},
140164
want: NewConditionedStatus(Available()),
141165
},
166+
"ObservedGenerationIsUpdated": {
167+
cs: NewConditionedStatus(Available().WithObservedGeneration(1)),
168+
c: []Condition{Available().WithObservedGeneration(2)},
169+
want: NewConditionedStatus(Available().WithObservedGeneration(2)),
170+
},
142171
"TypeIsDifferent": {
143172
cs: NewConditionedStatus(Creating()),
144173
c: []Condition{Available()},

pkg/reconciler/managed/reconciler.go

Lines changed: 56 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ type ConnectionDetailsFetcher interface {
180180
FetchConnection(ctx context.Context, so resource.ConnectionSecretOwner) (ConnectionDetails, error)
181181
}
182182

183-
// A Initializer establishes ownership of the supplied Managed resource.
183+
// Initializer establishes ownership of the supplied Managed resource.
184184
// This typically involves the operations that are run before calling any
185185
// ExternalClient methods.
186186
type Initializer interface {
@@ -880,7 +880,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
880880
log.Debug("Reconciliation is paused either through the `spec.managementPolicies` or the pause annotation", "annotation", meta.AnnotationKeyReconciliationPaused)
881881
record.Event(managed, event.Normal(reasonReconciliationPaused, "Reconciliation is paused either through the `spec.managementPolicies` or the pause annotation",
882882
"annotation", meta.AnnotationKeyReconciliationPaused))
883-
managed.SetConditions(xpv1.ReconcilePaused())
883+
managed.SetConditions(xpv1.ReconcilePaused().WithObservedGeneration(managed.GetGeneration()))
884884
// if the pause annotation is removed or the management policies changed, we will have a chance to reconcile
885885
// again and resume and if status update fails, we will reconcile again to retry to update the status
886886
return reconcile.Result{}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
@@ -900,7 +900,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
900900
return reconcile.Result{Requeue: true}, nil
901901
}
902902
record.Event(managed, event.Warning(reasonManagementPolicyInvalid, err))
903-
managed.SetConditions(xpv1.ReconcileError(err))
903+
managed.SetConditions(xpv1.ReconcileError(err).WithObservedGeneration(managed.GetGeneration()))
904904
return reconcile.Result{}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
905905
}
906906

@@ -925,7 +925,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
925925
return reconcile.Result{Requeue: true}, nil
926926
}
927927
record.Event(managed, event.Warning(reasonCannotUnpublish, err))
928-
managed.SetConditions(xpv1.Deleting(), xpv1.ReconcileError(err))
928+
managed.SetConditions(
929+
xpv1.Deleting().WithObservedGeneration(managed.GetGeneration()),
930+
xpv1.ReconcileError(err).WithObservedGeneration(managed.GetGeneration()))
929931
return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
930932
}
931933
if err := r.managed.RemoveFinalizer(ctx, managed); err != nil {
@@ -937,7 +939,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
937939
if kerrors.IsConflict(err) {
938940
return reconcile.Result{Requeue: true}, nil
939941
}
940-
managed.SetConditions(xpv1.Deleting(), xpv1.ReconcileError(err))
942+
managed.SetConditions(
943+
xpv1.Deleting().WithObservedGeneration(managed.GetGeneration()),
944+
xpv1.ReconcileError(err).WithObservedGeneration(managed.GetGeneration()))
941945
return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
942946
}
943947

@@ -959,7 +963,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
959963
return reconcile.Result{Requeue: true}, nil
960964
}
961965
record.Event(managed, event.Warning(reasonCannotInitialize, err))
962-
managed.SetConditions(xpv1.ReconcileError(err))
966+
managed.SetConditions(xpv1.ReconcileError(err).WithObservedGeneration(managed.GetGeneration()))
963967
return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
964968
}
965969

@@ -970,7 +974,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
970974
if meta.ExternalCreateIncomplete(managed) {
971975
log.Debug(errCreateIncomplete)
972976
record.Event(managed, event.Warning(reasonCannotInitialize, errors.New(errCreateIncomplete)))
973-
managed.SetConditions(xpv1.Creating(), xpv1.ReconcileError(errors.New(errCreateIncomplete)))
977+
managed.SetConditions(
978+
xpv1.Creating().WithObservedGeneration(managed.GetGeneration()),
979+
xpv1.ReconcileError(errors.New(errCreateIncomplete)).WithObservedGeneration(managed.GetGeneration()))
974980
return reconcile.Result{Requeue: false}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
975981
}
976982

@@ -995,7 +1001,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
9951001
return reconcile.Result{Requeue: true}, nil
9961002
}
9971003
record.Event(managed, event.Warning(reasonCannotResolveRefs, err))
998-
managed.SetConditions(xpv1.ReconcileError(err))
1004+
managed.SetConditions(xpv1.ReconcileError(err).WithObservedGeneration(managed.GetGeneration()))
9991005
return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
10001006
}
10011007
}
@@ -1012,7 +1018,8 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
10121018
return reconcile.Result{Requeue: true}, nil
10131019
}
10141020
record.Event(managed, event.Warning(reasonCannotConnect, err))
1015-
managed.SetConditions(xpv1.ReconcileError(errors.Wrap(err, errReconcileConnect)))
1021+
managed.SetConditions(
1022+
xpv1.ReconcileError(errors.Wrap(err, errReconcileConnect)).WithObservedGeneration(managed.GetGeneration()))
10161023
return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
10171024
}
10181025
defer func() {
@@ -1040,15 +1047,17 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
10401047
return reconcile.Result{Requeue: true}, nil
10411048
}
10421049
record.Event(managed, event.Warning(reasonCannotObserve, err))
1043-
managed.SetConditions(xpv1.ReconcileError(errors.Wrap(err, errReconcileObserve)))
1050+
managed.SetConditions(
1051+
xpv1.ReconcileError(errors.Wrap(err, errReconcileObserve)).WithObservedGeneration(managed.GetGeneration()))
10441052
return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
10451053
}
10461054

10471055
// In the observe-only mode, !observation.ResourceExists will be an error
10481056
// case, and we will explicitly return this information to the user.
10491057
if !observation.ResourceExists && policy.ShouldOnlyObserve() {
10501058
record.Event(managed, event.Warning(reasonCannotObserve, errors.New(errExternalResourceNotExist)))
1051-
managed.SetConditions(xpv1.ReconcileError(errors.Wrap(errors.New(errExternalResourceNotExist), errReconcileObserve)))
1059+
managed.SetConditions(
1060+
xpv1.ReconcileError(errors.Wrap(errors.New(errExternalResourceNotExist), errReconcileObserve)).WithObservedGeneration(managed.GetGeneration()))
10521061
return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
10531062
}
10541063

@@ -1086,7 +1095,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
10861095
log.Info(errRecordChangeLog, "error", err)
10871096
}
10881097
record.Event(managed, event.Warning(reasonCannotDelete, err))
1089-
managed.SetConditions(xpv1.Deleting(), xpv1.ReconcileError(errors.Wrap(err, errReconcileDelete)))
1098+
managed.SetConditions(
1099+
xpv1.Deleting().WithObservedGeneration(managed.GetGeneration()),
1100+
xpv1.ReconcileError(errors.Wrap(err, errReconcileDelete)).WithObservedGeneration(managed.GetGeneration()))
10901101
return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
10911102
}
10921103

@@ -1102,7 +1113,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
11021113
log.Info(errRecordChangeLog, "error", err)
11031114
}
11041115
record.Event(managed, event.Normal(reasonDeleted, "Successfully requested deletion of external resource"))
1105-
managed.SetConditions(xpv1.Deleting(), xpv1.ReconcileSuccess())
1116+
managed.SetConditions(
1117+
xpv1.Deleting().WithObservedGeneration(managed.GetGeneration()),
1118+
xpv1.ReconcileSuccess().WithObservedGeneration(managed.GetGeneration()))
11061119
return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
11071120
}
11081121
if err := r.managed.UnpublishConnection(ctx, managed, observation.ConnectionDetails); err != nil {
@@ -1115,7 +1128,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
11151128
return reconcile.Result{Requeue: true}, nil
11161129
}
11171130
record.Event(managed, event.Warning(reasonCannotUnpublish, err))
1118-
managed.SetConditions(xpv1.Deleting(), xpv1.ReconcileError(err))
1131+
managed.SetConditions(
1132+
xpv1.Deleting().WithObservedGeneration(managed.GetGeneration()),
1133+
xpv1.ReconcileError(err).WithObservedGeneration(managed.GetGeneration()))
11191134
return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
11201135
}
11211136
if err := r.managed.RemoveFinalizer(ctx, managed); err != nil {
@@ -1127,7 +1142,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
11271142
if kerrors.IsConflict(err) {
11281143
return reconcile.Result{Requeue: true}, nil
11291144
}
1130-
managed.SetConditions(xpv1.Deleting(), xpv1.ReconcileError(err))
1145+
managed.SetConditions(
1146+
xpv1.Deleting().WithObservedGeneration(managed.GetGeneration()),
1147+
xpv1.ReconcileError(err).WithObservedGeneration(managed.GetGeneration()))
11311148
return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
11321149
}
11331150

@@ -1149,7 +1166,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
11491166
return reconcile.Result{Requeue: true}, nil
11501167
}
11511168
record.Event(managed, event.Warning(reasonCannotPublish, err))
1152-
managed.SetConditions(xpv1.ReconcileError(err))
1169+
managed.SetConditions(xpv1.ReconcileError(err).WithObservedGeneration(managed.GetGeneration()))
11531170
return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
11541171
}
11551172

@@ -1161,7 +1178,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
11611178
if kerrors.IsConflict(err) {
11621179
return reconcile.Result{Requeue: true}, nil
11631180
}
1164-
managed.SetConditions(xpv1.ReconcileError(err))
1181+
managed.SetConditions(xpv1.ReconcileError(err).WithObservedGeneration(managed.GetGeneration()))
11651182
return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
11661183
}
11671184

@@ -1180,7 +1197,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
11801197
return reconcile.Result{Requeue: true}, nil
11811198
}
11821199
record.Event(managed, event.Warning(reasonCannotUpdateManaged, errors.Wrap(err, errUpdateManaged)))
1183-
managed.SetConditions(xpv1.Creating(), xpv1.ReconcileError(errors.Wrap(err, errUpdateManaged)))
1200+
managed.SetConditions(
1201+
xpv1.Creating().WithObservedGeneration(managed.GetGeneration()),
1202+
xpv1.ReconcileError(errors.Wrap(err, errUpdateManaged)).WithObservedGeneration(managed.GetGeneration()))
11841203
return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
11851204
}
11861205

@@ -1217,7 +1236,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
12171236
if err := r.change.Log(ctx, managedPreOp, v1alpha1.OperationType_OPERATION_TYPE_CREATE, err, creation.AdditionalDetails); err != nil {
12181237
log.Info(errRecordChangeLog, "error", err)
12191238
}
1220-
managed.SetConditions(xpv1.Creating(), xpv1.ReconcileError(errors.Wrap(err, errReconcileCreate)))
1239+
managed.SetConditions(
1240+
xpv1.Creating().WithObservedGeneration(managed.GetGeneration()),
1241+
xpv1.ReconcileError(errors.Wrap(err, errReconcileCreate)).WithObservedGeneration(managed.GetGeneration()))
12211242
return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
12221243
}
12231244

@@ -1246,7 +1267,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
12461267
return reconcile.Result{Requeue: true}, nil
12471268
}
12481269
record.Event(managed, event.Warning(reasonCannotUpdateManaged, errors.Wrap(err, errUpdateManagedAnnotations)))
1249-
managed.SetConditions(xpv1.Creating(), xpv1.ReconcileError(errors.Wrap(err, errUpdateManagedAnnotations)))
1270+
managed.SetConditions(
1271+
xpv1.Creating().WithObservedGeneration(managed.GetGeneration()),
1272+
xpv1.ReconcileError(errors.Wrap(err, errUpdateManagedAnnotations)).WithObservedGeneration(managed.GetGeneration()))
12501273
return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
12511274
}
12521275

@@ -1259,7 +1282,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
12591282
return reconcile.Result{Requeue: true}, nil
12601283
}
12611284
record.Event(managed, event.Warning(reasonCannotPublish, err))
1262-
managed.SetConditions(xpv1.Creating(), xpv1.ReconcileError(err))
1285+
managed.SetConditions(
1286+
xpv1.Creating().WithObservedGeneration(managed.GetGeneration()),
1287+
xpv1.ReconcileError(err).WithObservedGeneration(managed.GetGeneration()))
12631288
return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
12641289
}
12651290

@@ -1269,7 +1294,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
12691294
// ready for use.
12701295
log.Debug("Successfully requested creation of external resource")
12711296
record.Event(managed, event.Normal(reasonCreated, "Successfully requested creation of external resource"))
1272-
managed.SetConditions(xpv1.Creating(), xpv1.ReconcileSuccess())
1297+
managed.SetConditions(
1298+
xpv1.Creating().WithObservedGeneration(managed.GetGeneration()),
1299+
xpv1.ReconcileSuccess().WithObservedGeneration(managed.GetGeneration()))
12731300
return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
12741301
}
12751302

@@ -1284,7 +1311,8 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
12841311
if err := r.client.Update(ctx, managed); err != nil {
12851312
log.Debug(errUpdateManaged, "error", err)
12861313
record.Event(managed, event.Warning(reasonCannotUpdateManaged, err))
1287-
managed.SetConditions(xpv1.ReconcileError(errors.Wrap(err, errUpdateManaged)))
1314+
managed.SetConditions(
1315+
xpv1.ReconcileError(errors.Wrap(err, errUpdateManaged)).WithObservedGeneration(managed.GetGeneration()))
12881316
return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
12891317
}
12901318
}
@@ -1298,7 +1326,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
12981326
// https://github.com/crossplane/crossplane/issues/289
12991327
reconcileAfter := r.pollIntervalHook(managed, r.pollInterval)
13001328
log.Debug("External resource is up to date", "requeue-after", time.Now().Add(reconcileAfter))
1301-
managed.SetConditions(xpv1.ReconcileSuccess())
1329+
managed.SetConditions(xpv1.ReconcileSuccess().WithObservedGeneration(managed.GetGeneration()))
13021330
r.metricRecorder.recordFirstTimeReady(managed)
13031331

13041332
// record that we intentionally did not update the managed resource
@@ -1318,7 +1346,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
13181346
if !policy.ShouldUpdate() {
13191347
reconcileAfter := r.pollIntervalHook(managed, r.pollInterval)
13201348
log.Debug("Skipping update due to managementPolicies. Reconciliation succeeded", "requeue-after", time.Now().Add(reconcileAfter))
1321-
managed.SetConditions(xpv1.ReconcileSuccess())
1349+
managed.SetConditions(xpv1.ReconcileSuccess().WithObservedGeneration(managed.GetGeneration()))
13221350
return reconcile.Result{RequeueAfter: reconcileAfter}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
13231351
}
13241352

@@ -1334,7 +1362,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
13341362
log.Info(errRecordChangeLog, "error", err)
13351363
}
13361364
record.Event(managed, event.Warning(reasonCannotUpdate, err))
1337-
managed.SetConditions(xpv1.ReconcileError(errors.Wrap(err, errReconcileUpdate)))
1365+
managed.SetConditions(xpv1.ReconcileError(errors.Wrap(err, errReconcileUpdate)).WithObservedGeneration(managed.GetGeneration()))
13381366
return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
13391367
}
13401368

@@ -1350,7 +1378,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
13501378
// not, we requeue explicitly, which will trigger backoff.
13511379
log.Debug("Cannot publish connection details", "error", err)
13521380
record.Event(managed, event.Warning(reasonCannotPublish, err))
1353-
managed.SetConditions(xpv1.ReconcileError(err))
1381+
managed.SetConditions(xpv1.ReconcileError(err).WithObservedGeneration(managed.GetGeneration()))
13541382
return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
13551383
}
13561384

@@ -1362,6 +1390,6 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
13621390
reconcileAfter := r.pollIntervalHook(managed, r.pollInterval)
13631391
log.Debug("Successfully requested update of external resource", "requeue-after", time.Now().Add(reconcileAfter))
13641392
record.Event(managed, event.Normal(reasonUpdated, "Successfully requested update of external resource"))
1365-
managed.SetConditions(xpv1.ReconcileSuccess())
1393+
managed.SetConditions(xpv1.ReconcileSuccess().WithObservedGeneration(managed.GetGeneration()))
13661394
return reconcile.Result{RequeueAfter: reconcileAfter}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus)
13671395
}

0 commit comments

Comments
 (0)