Skip to content

Commit 267051a

Browse files
ivicacclaude
andcommitted
4756 Delete jobs child-first to avoid double-deleting recursive children
jobFacade.deleteJob recursively deletes child jobs, so iterating a flat jobIds list that contains both parents and children revisits already-deleted rows. Sort by id descending (children have larger ids since they are inserted later) and de-dup before the delete loop. Loosen the ordering assertion in the deployment test accordingly. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 597036f commit 267051a

3 files changed

Lines changed: 19 additions & 4 deletions

File tree

server/ee/libs/embedded/embedded-configuration/embedded-configuration-service/src/main/java/com/bytechef/ee/embedded/configuration/facade/IntegrationInstanceConfigurationFacadeImpl.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
import java.time.Instant;
6363
import java.util.Collection;
6464
import java.util.Collections;
65+
import java.util.Comparator;
6566
import java.util.List;
6667
import java.util.Map;
6768
import java.util.Objects;
@@ -239,7 +240,12 @@ public void deleteIntegrationInstanceConfiguration(long id) {
239240
principalJobService.deletePrincipalJobs(jobId, PlatformType.EMBEDDED);
240241
}
241242

242-
for (long jobId : jobIds) {
243+
List<Long> orderedJobIds = jobIds.stream()
244+
.distinct()
245+
.sorted(Comparator.reverseOrder())
246+
.toList();
247+
248+
for (long jobId : orderedJobIds) {
243249
jobFacade.deleteJob(jobId);
244250
}
245251

server/libs/automation/automation-configuration/automation-configuration-service/src/main/java/com/bytechef/automation/configuration/facade/ProjectDeploymentFacadeImpl.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
import java.time.Instant;
6363
import java.util.Collection;
6464
import java.util.Collections;
65+
import java.util.Comparator;
6566
import java.util.List;
6667
import java.util.Map;
6768
import java.util.Objects;
@@ -224,7 +225,12 @@ public void deleteProjectDeployment(long id) {
224225
principalJobService.deletePrincipalJobs(jobId, PlatformType.AUTOMATION);
225226
}
226227

227-
for (long jobId : jobIds) {
228+
List<Long> orderedJobIds = jobIds.stream()
229+
.distinct()
230+
.sorted(Comparator.reverseOrder())
231+
.toList();
232+
233+
for (long jobId : orderedJobIds) {
228234
jobFacade.deleteJob(jobId);
229235
}
230236

server/libs/automation/automation-configuration/automation-configuration-service/src/test/java/com/bytechef/automation/configuration/facade/ProjectDeploymentFacadeIntTest.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,9 +212,12 @@ public void testDeleteProjectDeploymentRemovesAllPrincipalJobsBeforeAnyJob() {
212212
inOrder.verify(principalJobService)
213213
.deletePrincipalJobs(childJobId, PlatformType.AUTOMATION);
214214
inOrder.verify(jobFacade)
215-
.deleteJob(parentJobId);
215+
.deleteJob(anyLong());
216216
inOrder.verify(jobFacade)
217-
.deleteJob(childJobId);
217+
.deleteJob(anyLong());
218+
219+
verify(jobFacade).deleteJob(parentJobId);
220+
verify(jobFacade).deleteJob(childJobId);
218221
}
219222

220223
@Disabled

0 commit comments

Comments
 (0)