Repository navigation
Conversation
|
[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 DetailsNeeds approval from an approver in each of these files:
Approvers can indicate their approval by writing |
950747a to
f67fb79
Compare
| builder.WithPredicates(predicate.GenerationChangedPredicate{})). | ||
| Owns(&novav1.NovaMetadata{}, | ||
| builder.WithPredicates(predicate.GenerationChangedPredicate{})). | ||
| Owns(&rabbitmqv1.TransportURL{}, |
There was a problem hiding this comment.
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"}
There was a problem hiding this comment.
my general understanding is the observed generation only changes when teh spec content changes.
we also need to reconsole when the conditions in status change.
that is how the nova controller is notified that a child has finished reconciling and is now ready.
the spec content of the nova sub CRs is only ever modifed by the nova contoler in normal operations.
Status and condition updates are filtered out by this change. GenerationChangedPredicate only allows updates where .metadata.generation changes:
return e.ObjectNew.GetGeneration() != e.ObjectOld.GetGeneration()Because these CRDs enable the status subresource, updating status.conditions, ReadyCount, ObservedGeneration, or SecretName changes resourceVersion but not generation.
Therefore, the predicates at internal/controller/nova_controller.go:2344-2355 behave as follows:
- Spec update: reconciles.
- Status/condition-only update: does not reconcile.
- Create/delete: reconciles.
- Another watched event may incidentally trigger reconciliation, but that is not guaranteed.
This breaks required propagation:
- Nova waits for cell0 readiness without requeueing: nova_controller.go:652-656.
- Nova depends on NovaCell readiness and ObservedGeneration: nova_controller.go:1335-1338.
- Nova mirrors NovaAPI conditions and ReadyCount: nova_controller.go:1506-1513.
- Nova consumes TransportURL readiness and Status.SecretName: nova_controller.go:1826-1830.
This approach is logically incorrect because the predicate you are using is filtering out the wrogn messages.
If filtering is required, the predicate must accept generation changes
or relevant status changes including conditions, observedGeneration, ready counts, and the consumed TransportURL status fields.
|
Build failed (check pipeline). Post https://softwarefactory-project.io/zuul/t/rdoproject.org/buildset/f8907b21b5794fba929086ad233fc133 ✔️ openstack-meta-content-provider SUCCESS in 1h 25m 18s |
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.
|
Suggest to wait for #1077 |
|
Build failed (check pipeline). Post https://softwarefactory-project.io/zuul/t/rdoproject.org/buildset/bda4985610b14477b469ff06d85ec308 ✔️ openstack-meta-content-provider SUCCESS in 1h 39m 46s |
|
PR needs rebase. DetailsInstructions 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. |
|
reabse and tests need fixing |
|
@auniyal61: The following test failed, say
Full PR test history. Your PR dashboard. DetailsInstructions 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. |
| builder.WithPredicates(predicate.GenerationChangedPredicate{})). | ||
| Owns(&novav1.NovaMetadata{}, | ||
| builder.WithPredicates(predicate.GenerationChangedPredicate{})). | ||
| Owns(&rabbitmqv1.TransportURL{}, |
There was a problem hiding this comment.
my general understanding is the observed generation only changes when teh spec content changes.
we also need to reconsole when the conditions in status change.
that is how the nova controller is notified that a child has finished reconciling and is now ready.
the spec content of the nova sub CRs is only ever modifed by the nova contoler in normal operations.
Status and condition updates are filtered out by this change. GenerationChangedPredicate only allows updates where .metadata.generation changes:
return e.ObjectNew.GetGeneration() != e.ObjectOld.GetGeneration()Because these CRDs enable the status subresource, updating status.conditions, ReadyCount, ObservedGeneration, or SecretName changes resourceVersion but not generation.
Therefore, the predicates at internal/controller/nova_controller.go:2344-2355 behave as follows:
- Spec update: reconciles.
- Status/condition-only update: does not reconcile.
- Create/delete: reconciles.
- Another watched event may incidentally trigger reconciliation, but that is not guaranteed.
This breaks required propagation:
- Nova waits for cell0 readiness without requeueing: nova_controller.go:652-656.
- Nova depends on NovaCell readiness and ObservedGeneration: nova_controller.go:1335-1338.
- Nova mirrors NovaAPI conditions and ReadyCount: nova_controller.go:1506-1513.
- Nova consumes TransportURL readiness and Status.SecretName: nova_controller.go:1826-1830.
This approach is logically incorrect because the predicate you are using is filtering out the wrogn messages.
If filtering is required, the predicate must accept generation changes
or relevant status changes including conditions, observedGeneration, ready counts, and the consumed TransportURL status fields.
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