Skip to content

JobRepositoryTestUtils#removeJobExecutions() Fails with Foreign Key Constraint Violation if Job Executions have Step Executions #4242

@kzander91

Description

@kzander91

Related to #4229.

Bug description
Running a Job and then using JobRepositoryTestUtils#removeJobExecutions() fails, because the method does not delete the StepExecutions.
The method selects the executions to delete with this code:

List<JobExecution> jobExecutions = this.jobRepository.findJobExecutions(jobInstance);
if (jobExecutions != null && !jobExecutions.isEmpty()) {
removeJobExecutions(jobExecutions);
}

But findJobExecutions(JobInstance) does not populate the execution's stepExecutions attribute (we are missing a call to stepExecutionDao#addStepExecutions(JobExecution)):
@Override
public List<JobExecution> findJobExecutions(JobInstance jobInstance) {
return this.jobExecutionDao.findJobExecutions(jobInstance);
}

The subsequent call to removeJobExecutions(jobExecutions) then won't delete the StepExecutions, due to getStepExecutions() being empty:

public void removeJobExecution(JobExecution jobExecution) {
for (StepExecution stepExecution : jobExecution.getStepExecutions()) {
this.jobRepository.deleteStepExecution(stepExecution);
}

This causes FK constraint violations when the job executions themselves are then deleted afterwards.

Environment
Spring Batch 5.0.0-SNAPSHOT (this commit)

Steps to reproduce

  1. Run a Job.
  2. Call JobRepositoryTestUtils#removeJobExecutions()

Expected behavior
Method call succeeds, all executions are deleted.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions