Skip to content

Upjet resources do not set observedGeneration in the Synced condition #591

Open

Description

@bobh66

What happened?

upjet resources are not setting the observedGeneration in the Synced condition which causes the lastTransitionTime to be updated on every reconciliation cycle.

See crossplane/crossplane-runtime#902 for more details.

How can we reproduce it?

Create an upjet-based resource and put a watch on it. Observe that the resource is updated on every pollInterval and the only change is the lastTransitionTime in the Synced condition.

WithObservedGeneration() needs to be added to the ReconcileSuccess() conditions (and possibly others?)

Activity

  1. simon-pearson-cl commented on Nov 9, 2026

    @simon-pearson-cl

    I think I've just run into this, with the end symptom being an XR that wouldn't go Ready=True (provider-azure-network v2.8.3):

    1. We changed spec.managementPolicies on an existing PrivateEndpoint MR, which bumped it to generation 9.
    2. Upjet's update path wrote Synced=True, reason=ReconcileSuccess without observedGeneration.
    3. Since crossplane-runtime#906, Condition.Equal treats a missing observedGeneration as equal, so later polls never rewrite the condition with the generation.
    4. The MR stayed Synced=True and Ready=True with no observedGeneration indefinitely. Our composition only marks the MR ready when Synced.observedGeneration == metadata.generation, so the XR stayed Ready=False.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions