Conversation
…ion) Fixed regression from PR #703 where workflows could hang indefinitely: 1. WorkflowExecutorOps.decide() - Removed buggy conditional that only rescheduled workflows if postpone != timeout. Now always reschedules non-terminal workflows. 2. ExecutorUtils.computePostpone() - Added missing logic from old sweeper: - HUMAN task handling (use default timeout) - Max postpone duration capping - Jitter (±1/3 of duration) to prevent thundering herd These changes restore the behavior from the old sweeper that was lost when PR #703 introduced the new sweeper implementation.
Moved WorkflowSweeper and related classes from org.conductoross.conductor to com.netflix.conductor package to make them available as common implementation for both OSS and Orkes Conductor. Changes: - Deleted old disabled WorkflowSweeper from com.netflix.conductor.core.reconciliation - Moved WorkflowSweeper: org.conductoross...execution -> com.netflix...reconciliation - Moved ExecutorUtils: org.conductoross...execution -> com.netflix...execution - Moved SweeperProperties: org.conductoross...execution -> com.netflix...reconciliation - Added sweepAsync() method to WorkflowSweeper for compatibility - Updated imports in WorkflowExecutorOps
- Add TestExecutorUtils.java with 15 unit tests for postpone logic - Tests validate HUMAN task handling, max postpone capping, and jitter - Remove broken TestWorkflowSweeper.java (incompatible with new sweeper API)
- Add TestExecutorUtils.java with 15 unit tests for postpone logic - Tests validate HUMAN task handling, max postpone capping, and jitter
- Rewrite tests to use new WorkflowSweeper constructor signature - Update tests to test sweep() method instead of removed unack() method - Tests now verify workflow sweep behavior: terminal workflow removal, lock handling, task repair, subworkflow handling
…ctor OSS - Replaced complex OSS WorkflowSweeper with simple Orkes version from org.conductoross - Added SweeperProperties to OSS reconciliation package - Removed ExecutorUtils with complex computePostpone() logic - Simplified WorkflowExecutorOps.decide() to use basic workflowOffsetTimeout - Updated WorkflowReconciler to use sweep() instead of sweepAsync() - Simplified TestWorkflowSweeper (removed tests for removed methods) - Deleted TestExecutorUtils The Orkes WorkflowSweeper now in OSS has: ✅ Simple pollAndSweep() with continuous loop ✅ Task repair logic (verifyAndRepairTask) ✅ Subworkflow repair logic ✅ Parent workflow queue management ✅ NO @async annotation ✅ NO sweepAsync() method ✅ NO complex postpone calculations
Changed import from: org.conductoross.conductor.core.execution.WorkflowSweeper to: com.netflix.conductor.core.reconciliation.WorkflowSweeper This completes the package migration after moving WorkflowSweeper from org.conductoross to com.netflix.conductor OSS package. Fixes compilation error in test-harness module. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Inline task repair with detailed warning logs - Fixed queueDAO.push to use 3-parameter version - Added subworkflow repair logic for terminal subworkflow states - Handles COMPLETED, FAILED, TERMINATED, TIMED_OUT states - All tests pass
…ix.conductor OSS" This reverts commit 7a710b5.
- Restored org.conductoross.conductor.core.execution.WorkflowSweeper - Restored org.conductoross.conductor.core.execution.SweeperProperties - Keep both old and new sweeper implementations - Old sweeper (org.conductoross): original simple implementation - New sweeper (com.netflix): has simplified improvements without Orkes-specific code
- Restored org.conductoross.conductor.core.execution.ExecutorUtils.java - Now both old (org.conductoross) and new (com.netflix) packages have ExecutorUtils - No files moved, both versions exist
… revert WorkflowExecutorOps and TestWorkflowSweeper
- Added ExecutionLockService with explicit acquireLock/releaseLock - Changed from decideWithLock() to decide() after acquiring lock - Lock is now acquired at start of sweep() and released in finally block - Aligns OSS WorkflowSweeper locking pattern with OrkesWorkflowSweeper - Makes OSS the common base implementation for both OSS and Orkes This fix ensures workflows are properly locked before running decide, preventing race conditions and concurrent modifications. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add @Autowired annotation to setEnvironment() method to ensure Spring properly injects Environment instance. This enables legacy property fallback logic in @PostConstruct init() method during integration tests. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Update AbstractSpecification in both test-harness and test-util to import WorkflowSweeper from new package location org.conductoross.conductor.core.execution instead of deprecated com.netflix.conductor.core.reconciliation package. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…-from-old-sweeper Make WorkflowSweeper simpler and robust.
Keep legacy sweeper
Annotation support for system task workers
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull Request type
NOTE: Please remember to run
./gradlew spotlessApplyto fix any format violations.Changes in this PR
Describe the new behavior from this PR, and why it's needed
Issue #
Alternatives considered
Describe alternative implementation you have considered