Commit a25f7e2
Pass compensation closures to all() instead of pre-resolving them
Workflow::compensate() with parallelCompensation=true called each compensation
closure inside the foreach loop, then passed the resolved scalar results to
all(). AllCall rejects anything that isn't an ActivityCall, ChildWorkflowCall,
or nested AllCall, so the parallel branch threw LogicException on the first
compensation that returned a scalar — killing the workflow before it could
complete.
Pass the closures themselves: all() runs each one through whileInactive() so
activity()/child() inside the closure returns the call object instead of
suspending the fiber, which is what AllCall expects.
Refs #399 (bucket D — parallel saga completion-condition failures)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent 31bfb20 commit a25f7e2
1 file changed
Lines changed: 8 additions & 8 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
144 | 144 | | |
145 | 145 | | |
146 | 146 | | |
147 | | - | |
148 | | - | |
149 | | - | |
150 | | - | |
151 | | - | |
152 | | - | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
153 | 153 | | |
154 | 154 | | |
155 | | - | |
| 155 | + | |
156 | 156 | | |
157 | 157 | | |
158 | 158 | | |
159 | 159 | | |
160 | | - | |
| 160 | + | |
161 | 161 | | |
162 | 162 | | |
163 | 163 | | |
| |||
0 commit comments