-
Notifications
You must be signed in to change notification settings - Fork 3.2k
improvement(executor): upgraded abort controller to handle aborts for loops and parallels #2880
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
… loops and parallels
6606006 to
fa54d99
Compare
Greptile Summaryupgraded abort controller implementation to handle mid-loop and mid-parallel cancellations by introducing a cached abort promise pattern that enables immediate cancellation without waiting for all executing nodes to complete Key changes:
The implementation properly handles edge cases like pre-aborted signals, preserves partial outputs, and maintains metadata on cancellation. Confidence Score: 4/5
Important Files Changed
Sequence DiagramsequenceDiagram
participant User
participant AbortController
participant Engine
participant AbortPromise
participant ProcessQueue
participant NodeExecution
User->>AbortController: abort()
AbortController->>Engine: abort event
Engine->>Engine: set cancelledFlag = true
Engine->>AbortPromise: resolve()
alt During Queue Processing
ProcessQueue->>Engine: checkCancellation()
Engine-->>ProcessQueue: true (cancelled)
ProcessQueue->>ProcessQueue: break queue loop
end
alt During Parallel Execution
NodeExecution->>NodeExecution: executing parallel branches
Engine->>Engine: waitForAnyExecution()
Engine->>Engine: Promise.race([...executing, abortPromise])
AbortPromise-->>Engine: resolves first
Engine-->>ProcessQueue: returns immediately
Note over NodeExecution: unfinished executions continue<br/>but won't be awaited
end
alt During Loop Iteration
ProcessQueue->>Engine: checkCancellation()
Engine-->>ProcessQueue: true (cancelled)
ProcessQueue->>ProcessQueue: break loop
Engine->>Engine: skip waitForAllExecutions()
end
Engine->>Engine: build result with status='cancelled'
Engine-->>User: ExecutionResult (cancelled)
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
2 files reviewed, 1 comment
* fix(google): wrap primitive tool responses for Gemini API compatibility (#2900) * fix(canonical): copilot path + update parent (#2901) * fix(rss): add top-level title, link, pubDate fields to RSS trigger output (#2902) * fix(rss): add top-level title, link, pubDate fields to RSS trigger output * fix(imap): add top-level fields to IMAP trigger output * improvement(browseruse): add profile id param (#2903) * improvement(browseruse): add profile id param * make request a stub since we have directExec * improvement(executor): upgraded abort controller to handle aborts for loops and parallels (#2880) * improvement(executor): upgraded abort controller to handle aborts for loops and parallels * comments * improvement(files): update execution for passing base64 strings (#2906) * progress * improvement(execution): update execution for passing base64 strings * fix types * cleanup comments * path security vuln * reject promise correctly * fix redirect case * remove proxy routes * fix tests * use ipaddr * feat(tools): added textract, added v2 for mistral, updated tag dropdown (#2904) * feat(tools): added textract * cleanup * ack pr comments * reorder * removed upload for textract async version * fix additional fields dropdown in editor, update parser to leave validation to be done on the server * added mistral v2, files v2, and finalized textract * updated the rest of the old file patterns, updated mistral outputs for v2 * updated tag dropdown to parse non-operation fields as well * updated extension finder * cleanup * added description for inputs to workflow * use helper for internal route check * fix tag dropdown merge conflict change * remove duplicate code --------- Co-authored-by: Vikhyath Mondreti <[email protected]> * fix(ui): change add inputs button to match output selector (#2907) * fix(canvas): removed invite to workspace from canvas popover (#2908) * fix(canvas): removed invite to workspace * removed unused props * fix(copilot): legacy tool display names (#2911) * fix(a2a): canonical merge (#2912) * fix canonical merge * fix empty array case * fix(change-detection): copilot diffs have extra field (#2913) * improvement(logs): improved logs ui bugs, added subflow disable UI (#2910) * improvement(logs): improved logs ui bugs, added subflow disable UI * added duplicate to action bar for subflows * feat(broadcast): email v0.5 (#2905) --------- Co-authored-by: Vikhyath Mondreti <[email protected]> Co-authored-by: Vikhyath Mondreti <[email protected]> Co-authored-by: Emir Karabeg <[email protected]>
Summary
Type of Change
Testing
Tested manually, added unit tests
Checklist