Title: Support SSA in InformerEventSource, listen to specific status updates · Issue #3413 · operator-framework/java-operator-sdk · GitHub
Open Graph Title: Support SSA in InformerEventSource, listen to specific status updates · Issue #3413 · operator-framework/java-operator-sdk
X Title: Support SSA in InformerEventSource, listen to specific status updates · Issue #3413 · operator-framework/java-operator-sdk
Description: Is your feature request related to a problem? Please describe. I am working on a multi-reconciler setup (Main and Secondary) managing the same Custom Resource. The Secondary reconciler updates a specific field within the resource's .stat...
Open Graph Description: Is your feature request related to a problem? Please describe. I am working on a multi-reconciler setup (Main and Secondary) managing the same Custom Resource. The Secondary reconciler updates a sp...
X Description: Is your feature request related to a problem? Please describe. I am working on a multi-reconciler setup (Main and Secondary) managing the same Custom Resource. The Secondary reconciler updates a sp...
Opengraph URL: https://github.com/operator-framework/java-operator-sdk/issues/3413
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Support SSA in InformerEventSource, listen to specific status updates","articleBody":"**Is your feature request related to a problem? Please describe.**\nI am working on a multi-reconciler setup (Main and Secondary) managing the same Custom Resource. The Secondary reconciler updates a specific field within the resource's .status using Server-Side Apply (SSA). The Main reconciler needs to be notified and triggered only when the resource's generation changes OR when this specific status field is updated by the Secondary reconciler.\n\nCurrently, achieving this cleanly is not possible:\n\n- If `generationAwareEventProcessing` is set to `true`, the Main reconciler completely misses the status updates.\n- If `generationAwareEventProcessing` is set to `false`, the Main reconciler is triggered far too often by unrelated status updates.\n- Attempting to pass a custom `OnUpdateFilter` via the `ControllerConfiguration` fails because custom filters are combined with JOSDK's internal filters using a strict AND operation. This prevents implementing a logical OR condition (e.g., `DefaultFiltering OR SpecificStatusFieldChanged`).\n\n**Describe the solution you'd like**\nI would like a way to configure the controller's event filtering behavior to allow logical OR operations between the internal filters (like generation-aware filtering) and user-defined custom filters.\n\nAlternatively, a feature allowing developers to keep `generationAwareEventProcessing = true` but explicitly define a list of observed status paths (e.g., `status.mySpecificField`) that should bypass the generation-aware restriction and still trigger an event would elegantly solve this use case. Or another way to achieve this.\n\n**Describe alternatives you've considered**\n\n1. Setting `generationAwareEventProcessing` to `false`: This causes performance degradation due to a flood of redundant reconciliation loops from other status updates.\n2. Creating a separate `EventSource` on our own resource with an `OnUpdateFilter`: While this successfully isolates the specific status change, it introduces two major downsides:\n- It forces the creation and maintenance of an unnecessary secondary cache.\n- In JOSDK `v5.2.0`, it introduces read-after-write inconsistencies where the resource instance passed to the Main reconciler is outdated at the moment the event source triggers it.\n\n**Additional context**\n- Environment: Java, Micronaut, JOSDK `v5.2.0`.\n- This issue is particularly relevant in advanced operator patterns where responsibilities are split across a Main and a Secondary controller for the same CRD, relying on status fields to pass state back to the primary loop.\n","author":{"url":"https://github.com/bertdw-1985","@type":"Person","name":"bertdw-1985"},"datePublished":"2026-06-11T08:11:11.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":1},"url":"https://github.com/3413/java-operator-sdk/issues/3413"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:8748d6c4-0dfc-f087-a93b-b43fedcbe3c2 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | C600:30CB25:63747F:888F8B:6A55259B |
| html-safe-nonce | c903faaf8714c901832297e581d4f548fffe147781102dc23a004d47d0de03ba |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDNjAwOjMwQ0IyNTo2Mzc0N0Y6ODg4RjhCOjZBNTUyNTlCIiwidmlzaXRvcl9pZCI6IjU0NjE3ODYyMDg0NTkxMDU2OTEiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | b8b259d22c13988d1405d1e4e6b8afc877e7420bf7fcbb82e61d883a765de559 |
| hovercard-subject-tag | issue:4638535899 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/operator-framework/java-operator-sdk/3413/issue_layout |
| twitter:image | https://opengraph.githubassets.com/dab67524f0f31eb3e53d098c50c95cdd68c7891d6cfa5a5bb22b734601f40ab6/operator-framework/java-operator-sdk/issues/3413 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/dab67524f0f31eb3e53d098c50c95cdd68c7891d6cfa5a5bb22b734601f40ab6/operator-framework/java-operator-sdk/issues/3413 |
| og:image:alt | Is your feature request related to a problem? Please describe. I am working on a multi-reconciler setup (Main and Secondary) managing the same Custom Resource. The Secondary reconciler updates a sp... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | bertdw-1985 |
| hostname | github.com |
| expected-hostname | github.com |
| None | 682d273eacb2ac51680c6eb9c0b270f029f7ce74c32090f319083c34497e28a5 |
| turbo-cache-control | no-preview |
| go-import | github.com/operator-framework/java-operator-sdk git https://github.com/operator-framework/java-operator-sdk.git |
| octolytics-dimension-user_id | 38202270 |
| octolytics-dimension-user_login | operator-framework |
| octolytics-dimension-repository_id | 188592933 |
| octolytics-dimension-repository_nwo | operator-framework/java-operator-sdk |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 188592933 |
| octolytics-dimension-repository_network_root_nwo | operator-framework/java-operator-sdk |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 358dd24ad7465d20e3fae729b5b169d35b0dd7f8 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width