From b8e5d7119142166c271aefbb8dc65b0d9b1074d5 Mon Sep 17 00:00:00 2001 From: Valentin Zickner Date: Wed, 25 Mar 2026 09:28:18 +0100 Subject: [PATCH] fix query for suspended external worker jobs --- .../engine/test/api/mgmt/JobQueryTest.java | 41 +++++++++++++++++++ .../service/impl/SuspendedJobQueryImpl.java | 2 +- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/mgmt/JobQueryTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/mgmt/JobQueryTest.java index 08aa7c93f64..e4b7ec76a5a 100755 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/mgmt/JobQueryTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/mgmt/JobQueryTest.java @@ -342,6 +342,35 @@ public void testQueryByHandlerTypes() { managementService.deleteJob(managementService.createJobQuery().handlerType("Type2").singleResult().getId()); } + @Test + public void testSuspendedJobQueryByType() { + String handlerType = "testSuspendedJobType"; + assertThat(managementService.createSuspendedJobQuery().handlerType(handlerType).count()).isEqualTo(0); + + createSuspendedJobWithType(Job.JOB_TYPE_MESSAGE, handlerType); + assertThat(managementService.createSuspendedJobQuery().handlerType(handlerType).count()).isEqualTo(1); + assertThat(managementService.createSuspendedJobQuery().handlerType(handlerType).messages().count()).isEqualTo(1); + assertThat(managementService.createSuspendedJobQuery().handlerType(handlerType).timers().count()).isEqualTo(0); + assertThat(managementService.createSuspendedJobQuery().handlerType(handlerType).externalWorkers().count()).isEqualTo(0); + + createSuspendedJobWithType(Job.JOB_TYPE_TIMER, handlerType); + assertThat(managementService.createSuspendedJobQuery().handlerType(handlerType).count()).isEqualTo(2); + assertThat(managementService.createSuspendedJobQuery().handlerType(handlerType).messages().count()).isEqualTo(1); + assertThat(managementService.createSuspendedJobQuery().handlerType(handlerType).timers().count()).isEqualTo(1); + assertThat(managementService.createSuspendedJobQuery().handlerType(handlerType).externalWorkers().count()).isEqualTo(0); + + createSuspendedJobWithType(Job.JOB_TYPE_EXTERNAL_WORKER, handlerType); + assertThat(managementService.createSuspendedJobQuery().handlerType(handlerType).count()).isEqualTo(3); + assertThat(managementService.createSuspendedJobQuery().handlerType(handlerType).messages().count()).isEqualTo(1); + assertThat(managementService.createSuspendedJobQuery().handlerType(handlerType).timers().count()).isEqualTo(1); + assertThat(managementService.createSuspendedJobQuery().handlerType(handlerType).externalWorkers().count()).isEqualTo(1); + + managementService.deleteSuspendedJob(managementService.createSuspendedJobQuery().handlerType(handlerType).messages().singleResult().getId()); + managementService.deleteSuspendedJob(managementService.createSuspendedJobQuery().handlerType(handlerType).timers().singleResult().getId()); + managementService.deleteSuspendedJob(managementService.createSuspendedJobQuery().handlerType(handlerType).externalWorkers().singleResult().getId()); + assertThat(managementService.createSuspendedJobQuery().handlerType(handlerType).count()).isEqualTo(0); + } + @Test public void testSuspendedJobQueryByHandlerTypes() { @@ -1131,6 +1160,18 @@ public Void execute(CommandContext commandContext) { }); } + private void createSuspendedJobWithType(String type, String handlerType) { + managementService.executeCommand(commandContext -> { + JobServiceConfiguration jobServiceConfiguration = CommandContextUtil.getProcessEngineConfiguration(commandContext).getJobServiceConfiguration(); + SuspendedJobEntityManager suspendedJobEntityManager = jobServiceConfiguration.getSuspendedJobEntityManager(); + SuspendedJobEntity job = suspendedJobEntityManager.create(); + job.setJobType(type); + job.setJobHandlerType(handlerType); + suspendedJobEntityManager.insert(job); + return null; + }); + } + private JobEntity createJobWithHandlerType(String handlerType) { CommandExecutor commandExecutor = processEngineConfiguration.getCommandExecutor(); return commandExecutor.execute(new Command<>() { diff --git a/modules/flowable-job-service/src/main/java/org/flowable/job/service/impl/SuspendedJobQueryImpl.java b/modules/flowable-job-service/src/main/java/org/flowable/job/service/impl/SuspendedJobQueryImpl.java index 14ed776b9ee..f7abfffeb2e 100644 --- a/modules/flowable-job-service/src/main/java/org/flowable/job/service/impl/SuspendedJobQueryImpl.java +++ b/modules/flowable-job-service/src/main/java/org/flowable/job/service/impl/SuspendedJobQueryImpl.java @@ -347,7 +347,7 @@ public SuspendedJobQueryImpl externalWorkers() { throw new FlowableIllegalArgumentException("Cannot combine onlyTimers() with onlyExternalWorkers() in the same query"); } - this.onlyTimers = true; + this.onlyExternalWorkers = true; return this; }