fix: evaluate activation conditions outside the workflow executor's monitor - #3626
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
…onitor Signed-off-by: Antonio Fernandez Alhambra <antonio.alhambra@hivemq.com>
542a697 to
6313ad4
Compare
There was a problem hiding this comment.
Warning
Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.
Pull request overview
Aligns reconcile execution with delete/cleanup paths by moving activation/precondition evaluation and event source registration out from under the WorkflowReconcileExecutor monitor to reduce blocking while holding the lock.
Changes:
- Moved activation condition + event source register/deregister into
NodeReconcileExecutor.doRun - Added
unmarkAsExecutinghelper to support the “conditions not met” cascade semantics - Added a test to ensure activation condition isn’t evaluated on the reconciling thread
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutorTest.java | Adds a regression test asserting activation conditions run off the reconciling thread |
| operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutor.java | Moves condition evaluation + event source registration out of the monitor and adjusts “not met” path |
| operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/AbstractWorkflowExecutor.java | Introduces unmarkAsExecuting helper for early execution relinquish |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Moves the activation condition evaluation and the event source register/deregister out of
handleReconcileand intoNodeReconcileExecutor, so the blocking informer sync no longer happens while the executor's monitor is held.Turns out the delete and cleanup paths already do it this way (
NodeDeleteExecutor.doRunandCleanupExecutor.doRun), so this is mostly making the reconcile path consistent with them rather than inventing anything.Two things worth knowing:
unmarkAsExecutingbefore it cascades, because a parentless node is its own bottom node when marked for delete andhandleDeleteskips a node that is executing. The cascade itself is kept under the monitor:markDependentsForDeletewalks the parents and the cascade reads that back, so two of them interleaving see each other's partial state. I had this wrong at first and the workflow tests caught it intermittently, about 2 runs in 5.NodeExecutor's catch.The new test asserts the condition is not evaluated on the reconciling thread, which fails if the evaluation moves back under the monitor.
Fixes #3617