Skip to content

Adds predicates to filter Nova reconciliation triggers#1081

Open
auniyal61 wants to merge 2 commits intoopenstack-k8s-operators:mainfrom
auniyal61:OSPRH-26922_2
Open

Adds predicates to filter Nova reconciliation triggers#1081
auniyal61 wants to merge 2 commits intoopenstack-k8s-operators:mainfrom
auniyal61:OSPRH-26922_2

Conversation

@auniyal61
Copy link
Contributor

@auniyal61 auniyal61 commented Mar 5, 2026

When a RabbitMQ notification pod restarts, the operator controller is reconciling lot of times (~40+) due to status-only updates from owned resources without any actual change in Nova CR spec

The issues occured because Nova is watching all resources without predicates. this change adds inbuilt GenerationChangedPredicate to child CRs (Nova services only) to only reconcile on spec changes, not status-only updates.

Related: OSPRH-26922

@openshift-ci openshift-ci bot requested review from ratailor and stuggi March 5, 2026 04:53
@openshift-ci
Copy link
Contributor

openshift-ci bot commented Mar 5, 2026

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: auniyal61

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci openshift-ci bot added the approved label Mar 5, 2026
@auniyal61 auniyal61 force-pushed the OSPRH-26922_2 branch 2 times, most recently from 950747a to f67fb79 Compare March 5, 2026 05:17
builder.WithPredicates(predicate.GenerationChangedPredicate{})).
Owns(&novav1.NovaMetadata{},
builder.WithPredicates(predicate.GenerationChangedPredicate{})).
Owns(&rabbitmqv1.TransportURL{},
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Before: 34 lines

2026-03-04T07:51:17-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "bee8b9ef-1ac6-416c-8a15-0bd15a4af2b4", "generation": 6, "observedGeneration": 6, "resourceVersion": "4696654"}
2026-03-04T07:51:17-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "fd804df5-9fa8-450d-877d-ca7d37710c54", "generation": 6, "observedGeneration": 6, "resourceVersion": "4697890"}
2026-03-04T07:51:17-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "d8a1ae80-af52-4c08-a259-c31ac14c0c0a", "generation": 6, "observedGeneration": 6, "resourceVersion": "4697938"}
2026-03-04T07:51:19-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "daaacff1-c169-429d-9c76-32d5eb5c4ae7", "generation": 6, "observedGeneration": 6, "resourceVersion": "4697938"}
2026-03-04T07:51:19-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "78885cf3-467f-4fea-b1be-4e6782942ec3", "generation": 6, "observedGeneration": 6, "resourceVersion": "4697969"}
2026-03-04T07:51:20-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "880a5e19-89c0-444d-abc6-5c633b4632d3", "generation": 6, "observedGeneration": 6, "resourceVersion": "4697969"}
2026-03-04T07:51:20-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "6b20f745-e3a6-4faa-af08-e8980256e439", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698016"}
2026-03-04T07:51:21-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "6baa1a91-1dae-4a2d-9a5e-0eed95dbf603", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698016"}
2026-03-04T07:51:21-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "b613b4ad-5c84-4225-a252-d999123a2a99", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698016"}
2026-03-04T07:51:27-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "52de0243-36fa-4a46-b4bb-633f1f3a01c2", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698016"}
2026-03-04T07:51:28-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "59428a05-77bc-4f09-8f0e-ecf1a3376736", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698016"}
2026-03-04T07:51:28-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "e319323b-f8c3-4a54-a1ae-891c2168ba1c", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698150"}
2026-03-04T07:51:32-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "4a6fec77-a602-4832-b65d-10f3e8d1419b", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698150"}
2026-03-04T07:51:32-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "bcc9346c-f97f-4791-baab-2940bae7dde9", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698193"}
2026-03-04T07:51:42-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "ae7bbe33-de89-4cca-b2a3-7f0d0cf5e699", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698193"}
2026-03-04T07:51:42-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "1387dc59-ff2e-4cf7-9cdb-8f8b3c4977e8", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698289"}
2026-03-04T07:52:03-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "3b700914-81a0-4043-9c88-2c6144253457", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698289"}
2026-03-04T07:52:03-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "6a343610-1fdd-4db4-8f4f-3353131a3dbc", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698289"}
2026-03-04T07:52:03-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "f80e4562-3083-4dce-b07f-b35d3a3ff9a4", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698492"}
2026-03-04T07:52:05-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "64a37d20-8304-4d7d-8dee-5ba7104450bf", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698492"}
2026-03-04T07:52:05-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "46dbc126-198a-4b7d-b8b3-b0554eef6116", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698546"}
2026-03-04T07:52:05-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "c4d9ff42-9b32-4af5-bf32-f8d754da4bb0", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698546"}
2026-03-04T07:52:06-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "279d2a7e-429d-45a2-9ad0-5e00a34c1bf6", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698546"}
2026-03-04T07:52:07-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "5fbc7b64-cd2a-46c1-9a66-67a531971aab", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698546"}
2026-03-04T07:52:13-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "5ed6e6a2-24e5-4dca-9240-d2bc0e0cf461", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698546"}
2026-03-04T07:52:13-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "e3c016bf-b7a7-40c0-b839-c2c9d6a82076", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698704"}
2026-03-04T07:52:15-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "499e75ee-208d-4a9f-b54c-829b1de7c1f8", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698704"}
2026-03-04T07:52:16-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "ccb12aef-3d6b-434d-99f7-0230900e2c6d", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698704"}
2026-03-04T07:52:16-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "85387647-e91a-4d5e-b5ff-be702a83f364", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698728"}
2026-03-04T07:52:17-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "38c5bda5-bd93-45c5-a813-e9d12c6a4341", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698728"}
2026-03-04T07:52:17-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "004cb587-7573-4ac7-bccf-30845bd7ec81", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698749"}
2026-03-04T07:52:29-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "e23f34b3-ba80-4513-8e94-612dde34b8f4", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698749"}
2026-03-04T07:52:29-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "93034723-be6e-4006-8e29-f01daf7c3318", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698860"}

===

After: 8 lines

2026-03-04T07:57:11-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "26bb1975-b6bb-4ede-b53c-e4d2a6b36e9e", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698860"}
2026-03-04T07:57:11-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "d57f16a5-4d34-4c6c-ad01-9febb2dbd2b8", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698860"}
2026-03-04T07:57:32-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "2754d9eb-8e12-4a89-be21-30dc2993e982", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698860"}
2026-03-04T07:57:32-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "ac2210a8-c58c-4a3c-b200-38af0220312e", "generation": 6, "observedGeneration": 6, "resourceVersion": "4698860"}
2026-03-04T07:57:33-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "21378bc5-b425-4162-b9bf-875472e43920", "generation": 6, "observedGeneration": 6, "resourceVersion": "4701492"}
2026-03-04T07:58:20-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "0023fbf7-f822-401f-ba5a-73ed8cd9f489", "generation": 6, "observedGeneration": 6, "resourceVersion": "4701492"}
2026-03-04T07:58:20-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "30fd20f9-b45b-4f43-b42f-bb8b579b1515", "generation": 6, "observedGeneration": 6, "resourceVersion": "4701492"}
2026-03-04T07:58:20-05:00       INFO    Controllers.Nova        XXX - 0 Reconciling Nova        {"controller": "nova", "controllerGroup": "nova.openstack.org", "controllerKind": "Nova", "Nova": {"name":"nova","namespace":"openstack"}, "namespace": "openstack", "name": "nova", "reconcileID": "4dba1154-f269-4015-8d6c-2cfbf1bf93c4", "generation": 6, "observedGeneration": 6, "resourceVersion": "4702068"}

@softwarefactory-project-zuul
Copy link

Build failed (check pipeline). Post recheck (without leading slash)
to rerun all jobs. Make sure the failure cause has been resolved before
you rerun jobs.

https://softwarefactory-project.io/zuul/t/rdoproject.org/buildset/f8907b21b5794fba929086ad233fc133

✔️ openstack-meta-content-provider SUCCESS in 1h 25m 18s
nova-operator-kuttl FAILURE in 1h 03m 29s
nova-operator-tempest-multinode FAILURE in 1h 07m 15s
nova-operator-tempest-multinode-ceph FAILURE in 1h 09m 10s

When a RabbitMQ notification pod restarts, the operator controller is
reconciling lot of times (~40+) due to status-only updates from owned
resources without any actual change in Nova CR spec

The issues occured because Nova is watching all resources without
predicates. this change adds inbuilt GenerationChangedPredicate to
child CRs (Nova services only) to only reconcile on spec changes,
not status-only updates.

Related: #OSPRH-26922
Add tests to verify that GenerationChangedPredicate correctly filters
status-only updates and prevents unnecessary Nova reconciliations.
@auniyal61 auniyal61 requested review from SeanMooney and gibizer and removed request for ratailor March 5, 2026 11:05
@openshift-ci
Copy link
Contributor

openshift-ci bot commented Mar 5, 2026

@auniyal61: The following test failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/functional fb03b85 link true /test functional

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@danpawlik
Copy link
Contributor

Suggest to wait for #1077

@softwarefactory-project-zuul
Copy link

Build failed (check pipeline). Post recheck (without leading slash)
to rerun all jobs. Make sure the failure cause has been resolved before
you rerun jobs.

https://softwarefactory-project.io/zuul/t/rdoproject.org/buildset/bda4985610b14477b469ff06d85ec308

✔️ openstack-meta-content-provider SUCCESS in 1h 39m 46s
nova-operator-kuttl FAILURE in 1h 04m 24s
nova-operator-tempest-multinode FAILURE in 1h 08m 32s
nova-operator-tempest-multinode-ceph FAILURE in 1h 10m 24s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants