spring-projects / spring-batch

Spring Batch is a framework for writing batch applications using Java and Spring
http://projects.spring.io/spring-batch/
Apache License 2.0
2.74k stars 2.36k forks source link

Different behavior when interrupting a job, depending on the parallel flow order #3939

Open kkmikhaylova opened 3 years ago

kkmikhaylova commented 3 years ago

Bug description Different behavior when interrupting a job, depending on the parallel flow order. I am creating a parallel flow and trying to interrupt a job from one of them. Further behavior depends on the order of the flow inside the add() function. In one case, the job is finished immediately, in the other, all steps from another parallel flow are executed.

Flow parallelFlow = new FlowBuilder<SimpleFlow>("parallelFlow") .split(new SimpleAsyncTaskExecutor()) .add(nonInterruptingFlow, interruptingFlow) .build();

Environment Spring Batch: 4.3.1

Steps to reproduce

  1. Create a job with two parallel flows, where the last flow in the list interrupts the job.
  2. Make sure that the job has finished after the interruption.
  3. Change flow order (now the first flow in the list interrupts the job).
  4. Make sure that all the steps of the job have been executed after the interruption.

Expected behavior Same behavior after interruption.

Minimal Complete Reproducible example springbatchdemo.zip

fmbenhassine commented 1 year ago

Thank you for opening this issue and for providing a minimal sample. Nicely done!

Both jobs complete as expected with a STOPPED status, but indeed the finishedJob proceeds to the nonExecutableStep even though the flow was interrupted in the previous step. That should not be the case. Since those flows are running in parallel, the interruption order should not matter.

Edit: Attached original sample updated to v5

gh3939.zip

doontagi commented 8 months ago

Hi @fmbenhassine, I checked this issue. And I've made a fix PR https://github.com/spring-projects/spring-batch/pull/4567. PTAL 🙏