From 33c475432d94219b2f7d3444f24de4a3f3d40258 Mon Sep 17 00:00:00 2001 From: Ponfee Date: Sun, 19 May 2024 15:06:41 +0800 Subject: [PATCH 01/19] 2.1.1-SNAPSHOT --- disjob-admin/pom.xml | 2 +- .../src/main/java/cn/ponfee/disjob/core/base/JobConstants.java | 2 +- disjob-samples/pom.xml | 2 +- pom.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/disjob-admin/pom.xml b/disjob-admin/pom.xml index 1632c424..b46f6e5b 100644 --- a/disjob-admin/pom.xml +++ b/disjob-admin/pom.xml @@ -24,7 +24,7 @@ 1.0.0-SNAPSHOT - 2.1.0 + 2.1.1-SNAPSHOT UTF-8 1.8 diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/base/JobConstants.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/base/JobConstants.java index ca145667..56af34dc 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/base/JobConstants.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/base/JobConstants.java @@ -30,7 +30,7 @@ public final class JobConstants { /** * Version */ - public static final String VERSION = "2.1.0"; + public static final String VERSION = "2.1.1-SNAPSHOT"; /** * Process batch size diff --git a/disjob-samples/pom.xml b/disjob-samples/pom.xml index ae11dc97..c72497de 100644 --- a/disjob-samples/pom.xml +++ b/disjob-samples/pom.xml @@ -23,7 +23,7 @@ 1.0.0-SNAPSHOT - 2.1.0 + 2.1.1-SNAPSHOT UTF-8 1.8 diff --git a/pom.xml b/pom.xml index 2ea27472..21cea47c 100644 --- a/pom.xml +++ b/pom.xml @@ -61,7 +61,7 @@ - 2.1.0 + 2.1.1-SNAPSHOT UTF-8 1.8 -- Gitee From 6a89fc8e56d5290c8aa3a75325d7f512e262f590 Mon Sep 17 00:00:00 2001 From: Ponfee Date: Sun, 19 May 2024 16:19:43 +0800 Subject: [PATCH 02/19] fix build.bat --- build.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.bat b/build.bat index ad72ed03..1b250ae1 100644 --- a/build.bat +++ b/build.bat @@ -3,7 +3,7 @@ @REM build disjob : .\build.bat @REM build disjob-samples: .\build.bat disjob-samples @REM build disjob-admin : .\build.bat disjob-admin -@REM build all : .\build.bat && .\build.bat disjob-samples && .\build.bat disjob-admin +@REM build all : .\build.bat ; .\build.bat disjob-samples ; .\build.bat disjob-admin @REM -------------------------------------------------- @echo off -- Gitee From 3198c0bec11e8f6f48eba1335f86daf9a39cff4e Mon Sep 17 00:00:00 2001 From: Ponfee Date: Mon, 20 May 2024 22:15:31 +0800 Subject: [PATCH 03/19] repackage dto --- .../core/base/SupervisorRpcService.java | 2 +- .../cn/ponfee/disjob/core/base/Worker.java | 2 +- .../disjob/core/base/WorkerRpcService.java | 6 +- .../{param => dto}/supervisor/EventParam.java | 2 +- .../supervisor/StartTaskParam.java | 2 +- .../supervisor/StartTaskResult.java | 2 +- .../supervisor/TerminateTaskParam.java | 2 +- .../supervisor/UpdateTaskWorkerParam.java | 2 +- .../worker/AuthenticationParam.java | 2 +- .../worker/ConfigureWorkerParam.java | 2 +- .../worker/ExistsTaskParam.java | 2 +- .../worker/GetMetricsParam.java | 2 +- .../worker/SplitJobParam.java} | 16 ++--- .../worker/SplitTaskResult.java} | 8 +-- .../core/dto/worker/VerifyJobParam.java | 66 +++++++++++++++++++ .../disjob/dispatch/ExecuteTaskParam.java | 2 +- .../samples/worker/vertx/VertxWebServer.java | 9 +-- .../application/EventSubscribeService.java | 4 +- .../application/SchedGroupService.java | 4 +- .../application/ServerInvokeService.java | 8 +-- .../request/ConfigureAllWorkerRequest.java | 2 +- .../component/AbstractJobManager.java | 17 ++--- .../component/DistributedJobManager.java | 14 ++-- .../dao/mapper/SchedTaskMapper.java | 2 +- .../instance/GeneralInstanceCreator.java | 4 +- .../instance/WorkflowInstanceCreator.java | 6 +- .../provider/SupervisorRpcProvider.java | 2 +- .../supervisor/base/WorkerRpcServiceTest.java | 8 +-- .../config/AuthenticationCallWorker.java | 4 +- .../model/DistributedJobManagerTest.java | 2 +- .../worker/base/TimingWheelRotator.java | 2 +- .../disjob/worker/base/WorkerThreadPool.java | 8 +-- .../disjob/worker/handle/ExecutingTask.java | 2 +- .../disjob/worker/handle/JobHandlerUtils.java | 15 +++-- .../disjob/worker/handle/SplitTask.java | 5 -- .../worker/provider/WorkerRpcProvider.java | 13 ++-- 36 files changed, 155 insertions(+), 96 deletions(-) rename disjob-core/src/main/java/cn/ponfee/disjob/core/{param => dto}/supervisor/EventParam.java (97%) rename disjob-core/src/main/java/cn/ponfee/disjob/core/{param => dto}/supervisor/StartTaskParam.java (97%) rename disjob-core/src/main/java/cn/ponfee/disjob/core/{param => dto}/supervisor/StartTaskResult.java (98%) rename disjob-core/src/main/java/cn/ponfee/disjob/core/{param => dto}/supervisor/TerminateTaskParam.java (97%) rename disjob-core/src/main/java/cn/ponfee/disjob/core/{param => dto}/supervisor/UpdateTaskWorkerParam.java (96%) rename disjob-core/src/main/java/cn/ponfee/disjob/core/{param => dto}/worker/AuthenticationParam.java (96%) rename disjob-core/src/main/java/cn/ponfee/disjob/core/{param => dto}/worker/ConfigureWorkerParam.java (98%) rename disjob-core/src/main/java/cn/ponfee/disjob/core/{param => dto}/worker/ExistsTaskParam.java (96%) rename disjob-core/src/main/java/cn/ponfee/disjob/core/{param => dto}/worker/GetMetricsParam.java (96%) rename disjob-core/src/main/java/cn/ponfee/disjob/core/{param/worker/JobHandlerParam.java => dto/worker/SplitJobParam.java} (78%) rename disjob-core/src/main/java/cn/ponfee/disjob/core/{param/worker/SplitTaskParam.java => dto/worker/SplitTaskResult.java} (84%) create mode 100644 disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/VerifyJobParam.java diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/base/SupervisorRpcService.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/base/SupervisorRpcService.java index 37b589c6..667ab176 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/base/SupervisorRpcService.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/base/SupervisorRpcService.java @@ -16,8 +16,8 @@ package cn.ponfee.disjob.core.base; +import cn.ponfee.disjob.core.dto.supervisor.*; import cn.ponfee.disjob.core.enums.Operation; -import cn.ponfee.disjob.core.param.supervisor.*; import io.swagger.v3.oas.annotations.Hidden; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/base/Worker.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/base/Worker.java index b60e7b05..7585fbc2 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/base/Worker.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/base/Worker.java @@ -18,10 +18,10 @@ package cn.ponfee.disjob.core.base; import cn.ponfee.disjob.common.base.SingletonClassConstraint; import cn.ponfee.disjob.common.util.Numbers; +import cn.ponfee.disjob.core.dto.worker.AuthenticationParam; import cn.ponfee.disjob.core.exception.AuthenticationException; import cn.ponfee.disjob.core.model.SchedJob; import cn.ponfee.disjob.core.model.TokenType; -import cn.ponfee.disjob.core.param.worker.AuthenticationParam; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/base/WorkerRpcService.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/base/WorkerRpcService.java index 98b451f3..795e55f7 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/base/WorkerRpcService.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/base/WorkerRpcService.java @@ -16,8 +16,8 @@ package cn.ponfee.disjob.core.base; +import cn.ponfee.disjob.core.dto.worker.*; import cn.ponfee.disjob.core.exception.JobException; -import cn.ponfee.disjob.core.param.worker.*; import io.swagger.v3.oas.annotations.Hidden; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -37,10 +37,10 @@ public interface WorkerRpcService { String PREFIX_PATH = "/worker/rpc"; @PostMapping("/job/verify") - void verify(JobHandlerParam param) throws JobException; + void verify(VerifyJobParam param) throws JobException; @PostMapping("/job/split") - List split(JobHandlerParam param) throws JobException; + List split(SplitJobParam param) throws JobException; @GetMapping("/task/exists") boolean existsTask(ExistsTaskParam param); diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/param/supervisor/EventParam.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/supervisor/EventParam.java similarity index 97% rename from disjob-core/src/main/java/cn/ponfee/disjob/core/param/supervisor/EventParam.java rename to disjob-core/src/main/java/cn/ponfee/disjob/core/dto/supervisor/EventParam.java index 1ff607d1..5a9b4d97 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/param/supervisor/EventParam.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/supervisor/EventParam.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package cn.ponfee.disjob.core.param.supervisor; +package cn.ponfee.disjob.core.dto.supervisor; import cn.ponfee.disjob.common.base.ToJsonString; import lombok.Getter; diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/param/supervisor/StartTaskParam.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/supervisor/StartTaskParam.java similarity index 97% rename from disjob-core/src/main/java/cn/ponfee/disjob/core/param/supervisor/StartTaskParam.java rename to disjob-core/src/main/java/cn/ponfee/disjob/core/dto/supervisor/StartTaskParam.java index d78fc6a0..a225e1c5 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/param/supervisor/StartTaskParam.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/supervisor/StartTaskParam.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package cn.ponfee.disjob.core.param.supervisor; +package cn.ponfee.disjob.core.dto.supervisor; import cn.ponfee.disjob.common.base.ToJsonString; import cn.ponfee.disjob.core.base.Worker; diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/param/supervisor/StartTaskResult.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/supervisor/StartTaskResult.java similarity index 98% rename from disjob-core/src/main/java/cn/ponfee/disjob/core/param/supervisor/StartTaskResult.java rename to disjob-core/src/main/java/cn/ponfee/disjob/core/dto/supervisor/StartTaskResult.java index 85ceea7e..010a2174 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/param/supervisor/StartTaskResult.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/supervisor/StartTaskResult.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package cn.ponfee.disjob.core.param.supervisor; +package cn.ponfee.disjob.core.dto.supervisor; import cn.ponfee.disjob.core.model.AbstractExecutionTask; import cn.ponfee.disjob.core.model.SchedTask; diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/param/supervisor/TerminateTaskParam.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/supervisor/TerminateTaskParam.java similarity index 97% rename from disjob-core/src/main/java/cn/ponfee/disjob/core/param/supervisor/TerminateTaskParam.java rename to disjob-core/src/main/java/cn/ponfee/disjob/core/dto/supervisor/TerminateTaskParam.java index e0afab72..e410eabc 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/param/supervisor/TerminateTaskParam.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/supervisor/TerminateTaskParam.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package cn.ponfee.disjob.core.param.supervisor; +package cn.ponfee.disjob.core.dto.supervisor; import cn.ponfee.disjob.common.base.ToJsonString; import cn.ponfee.disjob.core.enums.ExecuteState; diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/param/supervisor/UpdateTaskWorkerParam.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/supervisor/UpdateTaskWorkerParam.java similarity index 96% rename from disjob-core/src/main/java/cn/ponfee/disjob/core/param/supervisor/UpdateTaskWorkerParam.java rename to disjob-core/src/main/java/cn/ponfee/disjob/core/dto/supervisor/UpdateTaskWorkerParam.java index 47ee95b1..836a7a1f 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/param/supervisor/UpdateTaskWorkerParam.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/supervisor/UpdateTaskWorkerParam.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package cn.ponfee.disjob.core.param.supervisor; +package cn.ponfee.disjob.core.dto.supervisor; import cn.ponfee.disjob.common.base.ToJsonString; import cn.ponfee.disjob.core.base.Worker; diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/param/worker/AuthenticationParam.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/AuthenticationParam.java similarity index 96% rename from disjob-core/src/main/java/cn/ponfee/disjob/core/param/worker/AuthenticationParam.java rename to disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/AuthenticationParam.java index 55d88a40..96ca189a 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/param/worker/AuthenticationParam.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/AuthenticationParam.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package cn.ponfee.disjob.core.param.worker; +package cn.ponfee.disjob.core.dto.worker; import cn.ponfee.disjob.common.base.ToJsonString; import lombok.Getter; diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/param/worker/ConfigureWorkerParam.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/ConfigureWorkerParam.java similarity index 98% rename from disjob-core/src/main/java/cn/ponfee/disjob/core/param/worker/ConfigureWorkerParam.java rename to disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/ConfigureWorkerParam.java index 793b847d..049de65e 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/param/worker/ConfigureWorkerParam.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/ConfigureWorkerParam.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package cn.ponfee.disjob.core.param.worker; +package cn.ponfee.disjob.core.dto.worker; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/param/worker/ExistsTaskParam.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/ExistsTaskParam.java similarity index 96% rename from disjob-core/src/main/java/cn/ponfee/disjob/core/param/worker/ExistsTaskParam.java rename to disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/ExistsTaskParam.java index 2ec6f7e6..bfc1dd7d 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/param/worker/ExistsTaskParam.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/ExistsTaskParam.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package cn.ponfee.disjob.core.param.worker; +package cn.ponfee.disjob.core.dto.worker; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/param/worker/GetMetricsParam.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/GetMetricsParam.java similarity index 96% rename from disjob-core/src/main/java/cn/ponfee/disjob/core/param/worker/GetMetricsParam.java rename to disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/GetMetricsParam.java index 53ff9b69..d683a96a 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/param/worker/GetMetricsParam.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/GetMetricsParam.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package cn.ponfee.disjob.core.param.worker; +package cn.ponfee.disjob.core.dto.worker; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/param/worker/JobHandlerParam.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/SplitJobParam.java similarity index 78% rename from disjob-core/src/main/java/cn/ponfee/disjob/core/param/worker/JobHandlerParam.java rename to disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/SplitJobParam.java index 5d327488..14517633 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/param/worker/JobHandlerParam.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/SplitJobParam.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package cn.ponfee.disjob.core.param.worker; +package cn.ponfee.disjob.core.dto.worker; import cn.ponfee.disjob.core.enums.JobType; import cn.ponfee.disjob.core.enums.RouteStrategy; @@ -24,14 +24,14 @@ import lombok.NoArgsConstructor; import lombok.Setter; /** - * Job handler param + * Split job parameter. * * @author Ponfee */ @Getter @Setter @NoArgsConstructor -public class JobHandlerParam extends AuthenticationParam { +public class SplitJobParam extends AuthenticationParam { private static final long serialVersionUID = -216622646271234535L; private String group; @@ -40,8 +40,8 @@ public class JobHandlerParam extends AuthenticationParam { private JobType jobType; private RouteStrategy routeStrategy; - public JobHandlerParam(String group, String jobHandler, String jobParam, - JobType jobType, RouteStrategy routeStrategy) { + public SplitJobParam(String group, String jobHandler, String jobParam, + JobType jobType, RouteStrategy routeStrategy) { this.group = group; this.jobHandler = jobHandler; this.jobParam = jobParam; @@ -49,12 +49,12 @@ public class JobHandlerParam extends AuthenticationParam { this.routeStrategy = routeStrategy; } - public static JobHandlerParam from(SchedJob job) { + public static SplitJobParam from(SchedJob job) { return from(job, job.getJobHandler()); } - public static JobHandlerParam from(SchedJob job, String jobHandler) { - return new JobHandlerParam( + public static SplitJobParam from(SchedJob job, String jobHandler) { + return new SplitJobParam( job.getGroup(), jobHandler, job.getJobParam(), diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/param/worker/SplitTaskParam.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/SplitTaskResult.java similarity index 84% rename from disjob-core/src/main/java/cn/ponfee/disjob/core/param/worker/SplitTaskParam.java rename to disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/SplitTaskResult.java index 3870c870..e536face 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/param/worker/SplitTaskParam.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/SplitTaskResult.java @@ -14,26 +14,26 @@ * limitations under the License. */ -package cn.ponfee.disjob.core.param.worker; +package cn.ponfee.disjob.core.dto.worker; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; /** - * Split task parameter. + * Split task result. * * @author Ponfee */ @Getter @Setter @NoArgsConstructor -public class SplitTaskParam implements java.io.Serializable { +public class SplitTaskResult implements java.io.Serializable { private static final long serialVersionUID = -7020990825612520665L; private String taskParam; - public SplitTaskParam(String taskParam) { + public SplitTaskResult(String taskParam) { this.taskParam = taskParam; } diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/VerifyJobParam.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/VerifyJobParam.java new file mode 100644 index 00000000..f05ad5e5 --- /dev/null +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/VerifyJobParam.java @@ -0,0 +1,66 @@ +/* + * Copyright 2022-2024 Ponfee (http://www.ponfee.cn/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.ponfee.disjob.core.dto.worker; + +import cn.ponfee.disjob.core.enums.JobType; +import cn.ponfee.disjob.core.enums.RouteStrategy; +import cn.ponfee.disjob.core.model.SchedJob; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * Verify job parameter. + * + * @author Ponfee + */ +@Getter +@Setter +@NoArgsConstructor +public class VerifyJobParam extends AuthenticationParam { + private static final long serialVersionUID = -216622646271234535L; + + private String group; + private String jobHandler; + private String jobParam; + private JobType jobType; + private RouteStrategy routeStrategy; + + public VerifyJobParam(String group, String jobHandler, String jobParam, + JobType jobType, RouteStrategy routeStrategy) { + this.group = group; + this.jobHandler = jobHandler; + this.jobParam = jobParam; + this.jobType = jobType; + this.routeStrategy = routeStrategy; + } + + public static VerifyJobParam from(SchedJob job) { + return from(job, job.getJobHandler()); + } + + public static VerifyJobParam from(SchedJob job, String jobHandler) { + return new VerifyJobParam( + job.getGroup(), + jobHandler, + job.getJobParam(), + JobType.of(job.getJobType()), + RouteStrategy.of(job.getRouteStrategy()) + ); + } + +} diff --git a/disjob-dispatch/disjob-dispatch-api/src/main/java/cn/ponfee/disjob/dispatch/ExecuteTaskParam.java b/disjob-dispatch/disjob-dispatch-api/src/main/java/cn/ponfee/disjob/dispatch/ExecuteTaskParam.java index 345e6d77..507afee2 100644 --- a/disjob-dispatch/disjob-dispatch-api/src/main/java/cn/ponfee/disjob/dispatch/ExecuteTaskParam.java +++ b/disjob-dispatch/disjob-dispatch-api/src/main/java/cn/ponfee/disjob/dispatch/ExecuteTaskParam.java @@ -22,13 +22,13 @@ import cn.ponfee.disjob.common.util.Bytes; import cn.ponfee.disjob.common.util.Jsons; import cn.ponfee.disjob.common.util.Strings; import cn.ponfee.disjob.core.base.Worker; +import cn.ponfee.disjob.core.dto.worker.AuthenticationParam; import cn.ponfee.disjob.core.enums.JobType; import cn.ponfee.disjob.core.enums.Operation; import cn.ponfee.disjob.core.enums.RouteStrategy; import cn.ponfee.disjob.core.model.InstanceAttach; import cn.ponfee.disjob.core.model.SchedInstance; import cn.ponfee.disjob.core.model.SchedJob; -import cn.ponfee.disjob.core.param.worker.AuthenticationParam; import lombok.Getter; import lombok.Setter; import org.springframework.util.Assert; diff --git a/disjob-samples/disjob-samples-frameless-worker/src/main/java/cn/ponfee/disjob/samples/worker/vertx/VertxWebServer.java b/disjob-samples/disjob-samples-frameless-worker/src/main/java/cn/ponfee/disjob/samples/worker/vertx/VertxWebServer.java index 908cff49..76a426fd 100644 --- a/disjob-samples/disjob-samples-frameless-worker/src/main/java/cn/ponfee/disjob/samples/worker/vertx/VertxWebServer.java +++ b/disjob-samples/disjob-samples-frameless-worker/src/main/java/cn/ponfee/disjob/samples/worker/vertx/VertxWebServer.java @@ -23,10 +23,7 @@ import cn.ponfee.disjob.common.exception.Throwables.ThrowingSupplier; import cn.ponfee.disjob.common.spring.RpcControllerUtils; import cn.ponfee.disjob.common.util.Jsons; import cn.ponfee.disjob.core.base.WorkerRpcService; -import cn.ponfee.disjob.core.param.worker.ConfigureWorkerParam; -import cn.ponfee.disjob.core.param.worker.ExistsTaskParam; -import cn.ponfee.disjob.core.param.worker.GetMetricsParam; -import cn.ponfee.disjob.core.param.worker.JobHandlerParam; +import cn.ponfee.disjob.core.dto.worker.*; import cn.ponfee.disjob.dispatch.ExecuteTaskParam; import cn.ponfee.disjob.dispatch.TaskReceiver; import cn.ponfee.disjob.samples.worker.util.JobHandlerParser; @@ -107,12 +104,12 @@ public class VertxWebServer extends AbstractVerticle { //String[] args = ctx.body().asPojo(String[].class); router.post(PREFIX_PATH + "/job/verify").handler(ctx -> handle(() -> { - JobHandlerParam param = parseBodyArg(ctx, JobHandlerParam.class); + VerifyJobParam param = parseBodyArg(ctx, VerifyJobParam.class); workerRpcService.verify(param); }, ctx, BAD_REQUEST)); router.post(PREFIX_PATH + "/job/split").handler(ctx -> handle(() -> { - JobHandlerParam param = parseBodyArg(ctx, JobHandlerParam.class); + SplitJobParam param = parseBodyArg(ctx, SplitJobParam.class); JobHandlerParser.parse(param, "jobHandler"); return workerRpcService.split(param); }, ctx, INTERNAL_SERVER_ERROR)); diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/EventSubscribeService.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/EventSubscribeService.java index a0bb4f71..811cbbf6 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/EventSubscribeService.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/EventSubscribeService.java @@ -19,8 +19,8 @@ package cn.ponfee.disjob.supervisor.application; import cn.ponfee.disjob.common.base.SingletonClassConstraint; import cn.ponfee.disjob.common.concurrent.ThreadPoolExecutors; import cn.ponfee.disjob.common.exception.Throwables.ThrowingRunnable; -import cn.ponfee.disjob.core.param.supervisor.EventParam; -import cn.ponfee.disjob.core.param.supervisor.EventParam.Type; +import cn.ponfee.disjob.core.dto.supervisor.EventParam; +import cn.ponfee.disjob.core.dto.supervisor.EventParam.Type; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/SchedGroupService.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/SchedGroupService.java index fe79cf36..c1de6fff 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/SchedGroupService.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/SchedGroupService.java @@ -23,10 +23,10 @@ import cn.ponfee.disjob.common.model.PageResponse; import cn.ponfee.disjob.common.util.Functions; import cn.ponfee.disjob.core.base.Tokens; import cn.ponfee.disjob.core.base.Worker; +import cn.ponfee.disjob.core.dto.supervisor.EventParam; +import cn.ponfee.disjob.core.dto.worker.AuthenticationParam; import cn.ponfee.disjob.core.model.SchedGroup; import cn.ponfee.disjob.core.model.TokenType; -import cn.ponfee.disjob.core.param.supervisor.EventParam; -import cn.ponfee.disjob.core.param.worker.AuthenticationParam; import cn.ponfee.disjob.registry.SupervisorRegistry; import cn.ponfee.disjob.supervisor.application.converter.SchedGroupConverter; import cn.ponfee.disjob.supervisor.application.request.SchedGroupAddRequest; diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/ServerInvokeService.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/ServerInvokeService.java index 59e5420d..45c07cbd 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/ServerInvokeService.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/ServerInvokeService.java @@ -24,11 +24,11 @@ import cn.ponfee.disjob.common.concurrent.ThreadPoolExecutors; import cn.ponfee.disjob.common.spring.SpringUtils; import cn.ponfee.disjob.common.util.Numbers; import cn.ponfee.disjob.core.base.*; +import cn.ponfee.disjob.core.dto.supervisor.EventParam; +import cn.ponfee.disjob.core.dto.worker.ConfigureWorkerParam; +import cn.ponfee.disjob.core.dto.worker.ConfigureWorkerParam.Action; +import cn.ponfee.disjob.core.dto.worker.GetMetricsParam; import cn.ponfee.disjob.core.exception.AuthenticationException; -import cn.ponfee.disjob.core.param.supervisor.EventParam; -import cn.ponfee.disjob.core.param.worker.ConfigureWorkerParam; -import cn.ponfee.disjob.core.param.worker.ConfigureWorkerParam.Action; -import cn.ponfee.disjob.core.param.worker.GetMetricsParam; import cn.ponfee.disjob.registry.SupervisorRegistry; import cn.ponfee.disjob.registry.rpc.DestinationServerRestProxy; import cn.ponfee.disjob.registry.rpc.DestinationServerRestProxy.DestinationServerInvoker; diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/request/ConfigureAllWorkerRequest.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/request/ConfigureAllWorkerRequest.java index 40acc83a..b816b72f 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/request/ConfigureAllWorkerRequest.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/request/ConfigureAllWorkerRequest.java @@ -17,7 +17,7 @@ package cn.ponfee.disjob.supervisor.application.request; import cn.ponfee.disjob.common.base.ToJsonString; -import cn.ponfee.disjob.core.param.worker.ConfigureWorkerParam.Action; +import cn.ponfee.disjob.core.dto.worker.ConfigureWorkerParam.Action; import lombok.Getter; import lombok.Setter; diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/AbstractJobManager.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/AbstractJobManager.java index d4c6c886..5ca25f58 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/AbstractJobManager.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/AbstractJobManager.java @@ -24,15 +24,16 @@ import cn.ponfee.disjob.core.base.JobCodeMsg; import cn.ponfee.disjob.core.base.JobConstants; import cn.ponfee.disjob.core.base.Worker; import cn.ponfee.disjob.core.base.WorkerRpcService; +import cn.ponfee.disjob.core.dto.worker.ExistsTaskParam; +import cn.ponfee.disjob.core.dto.worker.SplitJobParam; +import cn.ponfee.disjob.core.dto.worker.SplitTaskResult; +import cn.ponfee.disjob.core.dto.worker.VerifyJobParam; import cn.ponfee.disjob.core.enums.*; import cn.ponfee.disjob.core.exception.JobException; import cn.ponfee.disjob.core.model.SchedDepend; import cn.ponfee.disjob.core.model.SchedInstance; import cn.ponfee.disjob.core.model.SchedJob; import cn.ponfee.disjob.core.model.SchedTask; -import cn.ponfee.disjob.core.param.worker.ExistsTaskParam; -import cn.ponfee.disjob.core.param.worker.JobHandlerParam; -import cn.ponfee.disjob.core.param.worker.SplitTaskParam; import cn.ponfee.disjob.dispatch.ExecuteTaskParam; import cn.ponfee.disjob.dispatch.TaskDispatcher; import cn.ponfee.disjob.registry.SupervisorRegistry; @@ -198,7 +199,7 @@ public abstract class AbstractJobManager { return idGenerator.generateId(); } - public List splitTasks(JobHandlerParam param, long instanceId, Date date) throws JobException { + public List splitJob(SplitJobParam param, long instanceId, Date date) throws JobException { if (RouteStrategy.BROADCAST == param.getRouteStrategy()) { List discoveredServers = workerDiscover.getDiscoveredServers(param.getGroup()); if (discoveredServers.isEmpty()) { @@ -209,12 +210,12 @@ public abstract class AbstractJobManager { .mapToObj(i -> SchedTask.create(param.getJobParam(), generateId(), instanceId, i + 1, count, date, discoveredServers.get(i).serialize())) .collect(Collectors.toList()); } else { - List split = splitJob(param); + List split = splitJob(param); Assert.notEmpty(split, () -> "Not split any task: " + param); Assert.isTrue(split.size() <= maximumSplitTaskSize, () -> "Split task size must less than " + maximumSplitTaskSize + ", job=" + param); int count = split.size(); return IntStream.range(0, count) - .mapToObj(i -> SchedTask.create(Optional.ofNullable(split.get(i)).map(SplitTaskParam::getTaskParam).orElse(null), generateId(), instanceId, i + 1, count, date, null)) + .mapToObj(i -> SchedTask.create(split.get(i).getTaskParam(), generateId(), instanceId, i + 1, count, date, null)) .collect(Collectors.toList()); } } @@ -318,12 +319,12 @@ public abstract class AbstractJobManager { // ------------------------------------------------------------------private methods private void verifyJob(SchedJob job) throws JobException { - JobHandlerParam param = JobHandlerParam.from(job); + VerifyJobParam param = VerifyJobParam.from(job); SchedGroupService.fillSupervisorAuthenticationToken(job.getGroup(), param); groupedWorkerRpcClient.invoke(job.getGroup(), client -> client.verify(param)); } - private List splitJob(JobHandlerParam param) throws JobException { + private List splitJob(SplitJobParam param) throws JobException { SchedGroupService.fillSupervisorAuthenticationToken(param.getGroup(), param); return groupedWorkerRpcClient.call(param.getGroup(), client -> client.split(param)); } diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/DistributedJobManager.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/DistributedJobManager.java index be10703c..789adb5d 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/DistributedJobManager.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/DistributedJobManager.java @@ -30,14 +30,14 @@ import cn.ponfee.disjob.common.util.Strings; import cn.ponfee.disjob.core.base.JobConstants; import cn.ponfee.disjob.core.base.Worker; import cn.ponfee.disjob.core.base.WorkerRpcService; +import cn.ponfee.disjob.core.dto.supervisor.StartTaskParam; +import cn.ponfee.disjob.core.dto.supervisor.StartTaskResult; +import cn.ponfee.disjob.core.dto.supervisor.TerminateTaskParam; +import cn.ponfee.disjob.core.dto.supervisor.UpdateTaskWorkerParam; +import cn.ponfee.disjob.core.dto.worker.SplitJobParam; import cn.ponfee.disjob.core.enums.*; import cn.ponfee.disjob.core.exception.JobException; import cn.ponfee.disjob.core.model.*; -import cn.ponfee.disjob.core.param.supervisor.StartTaskParam; -import cn.ponfee.disjob.core.param.supervisor.StartTaskResult; -import cn.ponfee.disjob.core.param.supervisor.TerminateTaskParam; -import cn.ponfee.disjob.core.param.supervisor.UpdateTaskWorkerParam; -import cn.ponfee.disjob.core.param.worker.JobHandlerParam; import cn.ponfee.disjob.dispatch.ExecuteTaskParam; import cn.ponfee.disjob.dispatch.TaskDispatcher; import cn.ponfee.disjob.dispatch.event.TaskDispatchFailedEvent; @@ -748,7 +748,7 @@ public class DistributedJobManager extends AbstractJobManager { try { long nextInstanceId = generateId(); - List tasks = splitTasks(JobHandlerParam.from(job, target.getName()), nextInstanceId, new Date()); + List tasks = splitJob(SplitJobParam.from(job, target.getName()), nextInstanceId, new Date()); long triggerTime = leadInstance.getTriggerTime() + workflow.getSequence(); SchedInstance nextInstance = SchedInstance.create(nextInstanceId, job.getJobId(), RunType.of(leadInstance.getRunType()), triggerTime, 0, now); nextInstance.setRnstanceId(wnstanceId); @@ -903,7 +903,7 @@ public class DistributedJobManager extends AbstractJobManager { if (retryType == RetryType.ALL) { try { // re-split tasks - tasks = splitTasks(JobHandlerParam.from(schedJob), retryInstance.getInstanceId(), now); + tasks = splitJob(SplitJobParam.from(schedJob), retryInstance.getInstanceId(), now); } catch (Throwable t) { log.error("Split retry job error: " + schedJob + ", " + prev, t); processWorkflow(prev); diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/dao/mapper/SchedTaskMapper.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/dao/mapper/SchedTaskMapper.java index 05470685..547be543 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/dao/mapper/SchedTaskMapper.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/dao/mapper/SchedTaskMapper.java @@ -16,8 +16,8 @@ package cn.ponfee.disjob.supervisor.dao.mapper; +import cn.ponfee.disjob.core.dto.supervisor.UpdateTaskWorkerParam; import cn.ponfee.disjob.core.model.SchedTask; -import cn.ponfee.disjob.core.param.supervisor.UpdateTaskWorkerParam; import org.apache.ibatis.annotations.Param; import java.util.Date; diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/instance/GeneralInstanceCreator.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/instance/GeneralInstanceCreator.java index e03d729a..334907f0 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/instance/GeneralInstanceCreator.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/instance/GeneralInstanceCreator.java @@ -16,12 +16,12 @@ package cn.ponfee.disjob.supervisor.instance; +import cn.ponfee.disjob.core.dto.worker.SplitJobParam; import cn.ponfee.disjob.core.enums.RunType; import cn.ponfee.disjob.core.exception.JobException; import cn.ponfee.disjob.core.model.SchedInstance; import cn.ponfee.disjob.core.model.SchedJob; import cn.ponfee.disjob.core.model.SchedTask; -import cn.ponfee.disjob.core.param.worker.JobHandlerParam; import cn.ponfee.disjob.supervisor.component.DistributedJobManager; import lombok.Getter; @@ -44,7 +44,7 @@ public class GeneralInstanceCreator extends TriggerInstanceCreator tasks = jobManager.splitTasks(JobHandlerParam.from(job), instanceId, now); + List tasks = jobManager.splitJob(SplitJobParam.from(job), instanceId, now); return new GeneralInstance(instance, tasks); } diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/instance/WorkflowInstanceCreator.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/instance/WorkflowInstanceCreator.java index 909232e3..e19e30ed 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/instance/WorkflowInstanceCreator.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/instance/WorkflowInstanceCreator.java @@ -22,11 +22,11 @@ import cn.ponfee.disjob.common.dag.DAGNode; import cn.ponfee.disjob.common.date.Dates; import cn.ponfee.disjob.common.tuple.Tuple2; import cn.ponfee.disjob.common.util.Jsons; +import cn.ponfee.disjob.core.dto.worker.SplitJobParam; import cn.ponfee.disjob.core.enums.RunState; import cn.ponfee.disjob.core.enums.RunType; import cn.ponfee.disjob.core.exception.JobException; import cn.ponfee.disjob.core.model.*; -import cn.ponfee.disjob.core.param.worker.JobHandlerParam; import cn.ponfee.disjob.supervisor.component.DistributedJobManager; import cn.ponfee.disjob.supervisor.dag.WorkflowGraph; import lombok.Getter; @@ -85,8 +85,8 @@ public class WorkflowInstanceCreator extends TriggerInstanceCreator tasks = jobManager.splitTasks(param, nodeInstance.getInstanceId(), now); + SplitJobParam param = SplitJobParam.from(job, node.getName()); + List tasks = jobManager.splitJob(param, nodeInstance.getInstanceId(), now); nodeInstances.add(Tuple2.of(nodeInstance, tasks)); } diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/provider/SupervisorRpcProvider.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/provider/SupervisorRpcProvider.java index de08ff0a..77658941 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/provider/SupervisorRpcProvider.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/provider/SupervisorRpcProvider.java @@ -19,8 +19,8 @@ package cn.ponfee.disjob.supervisor.provider; import cn.ponfee.disjob.common.date.Dates; import cn.ponfee.disjob.common.spring.RpcController; import cn.ponfee.disjob.core.base.*; +import cn.ponfee.disjob.core.dto.supervisor.*; import cn.ponfee.disjob.core.enums.Operation; -import cn.ponfee.disjob.core.param.supervisor.*; import cn.ponfee.disjob.supervisor.application.EventSubscribeService; import cn.ponfee.disjob.supervisor.auth.SupervisorAuthentication; import cn.ponfee.disjob.supervisor.component.DistributedJobManager; diff --git a/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/base/WorkerRpcServiceTest.java b/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/base/WorkerRpcServiceTest.java index f6e16d0d..cac4fccf 100644 --- a/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/base/WorkerRpcServiceTest.java +++ b/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/base/WorkerRpcServiceTest.java @@ -16,9 +16,9 @@ package cn.ponfee.disjob.supervisor.base; +import cn.ponfee.disjob.core.dto.worker.SplitJobParam; +import cn.ponfee.disjob.core.dto.worker.SplitTaskResult; import cn.ponfee.disjob.core.exception.JobException; -import cn.ponfee.disjob.core.param.worker.JobHandlerParam; -import cn.ponfee.disjob.core.param.worker.SplitTaskParam; import cn.ponfee.disjob.supervisor.SpringBootTestBase; import org.junit.jupiter.api.Test; @@ -46,9 +46,9 @@ public class WorkerRpcServiceTest extends SpringBootTestBase { public void testSplit() throws JobException { String taskParam = "taskParam"; //doReturn(Collections.singletonList(new SplitTask(taskParam))).when(workerRpcService).split(any()); - when(workerRpcService.split(any())).thenReturn(Collections.singletonList(new SplitTaskParam(taskParam))); + when(workerRpcService.split(any())).thenReturn(Collections.singletonList(new SplitTaskResult(taskParam))); - List result = workerRpcService.split(new JobHandlerParam("group", null, null, null, null)); + List result = workerRpcService.split(new SplitJobParam("group", null, null, null, null)); assertNotNull(result); assertEquals(1, result.size()); assertEquals(taskParam, result.get(0).getTaskParam()); diff --git a/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/config/AuthenticationCallWorker.java b/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/config/AuthenticationCallWorker.java index 1260a122..ec21535e 100644 --- a/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/config/AuthenticationCallWorker.java +++ b/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/config/AuthenticationCallWorker.java @@ -17,7 +17,7 @@ // //package cn.ponfee.disjob.supervisor.config; // -//import cn.ponfee.disjob.core.param.worker.AuthenticationParam; +//import cn.ponfee.disjob.core.dto.worker.AuthenticationParam; //import org.apache.commons.lang3.ArrayUtils; //import org.aspectj.lang.JoinPoint; //import org.aspectj.lang.annotation.Aspect; @@ -33,7 +33,7 @@ //@Component //public class AuthenticationCallWorker { // -// @Before("execution(* cn.ponfee.disjob..*.*(..,cn.ponfee.disjob.core.param.worker.AuthenticationParam+,..))") +// @Before("execution(* cn.ponfee.disjob..*.*(..,cn.ponfee.disjob.core.dto.worker.AuthenticationParam+,..))") // public void doBefore(JoinPoint point) { // Object[] args = point.getArgs(); // if (ArrayUtils.isEmpty(args)) { diff --git a/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/model/DistributedJobManagerTest.java b/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/model/DistributedJobManagerTest.java index 0fca68cf..8f27b8f7 100644 --- a/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/model/DistributedJobManagerTest.java +++ b/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/model/DistributedJobManagerTest.java @@ -19,9 +19,9 @@ package cn.ponfee.disjob.supervisor.model; import cn.ponfee.disjob.common.base.IdGenerator; import cn.ponfee.disjob.common.util.UuidUtils; import cn.ponfee.disjob.core.base.Worker; +import cn.ponfee.disjob.core.dto.supervisor.UpdateTaskWorkerParam; import cn.ponfee.disjob.core.enums.ExecuteState; import cn.ponfee.disjob.core.model.SchedTask; -import cn.ponfee.disjob.core.param.supervisor.UpdateTaskWorkerParam; import cn.ponfee.disjob.supervisor.SpringBootTestBase; import cn.ponfee.disjob.supervisor.component.DistributedJobManager; import cn.ponfee.disjob.supervisor.dao.mapper.SchedJobMapper; diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/TimingWheelRotator.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/TimingWheelRotator.java index 21da20d4..6163d340 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/TimingWheelRotator.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/TimingWheelRotator.java @@ -27,8 +27,8 @@ import cn.ponfee.disjob.common.exception.Throwables.ThrowingRunnable; import cn.ponfee.disjob.common.util.Jsons; import cn.ponfee.disjob.core.base.Supervisor; import cn.ponfee.disjob.core.base.SupervisorRpcService; +import cn.ponfee.disjob.core.dto.supervisor.UpdateTaskWorkerParam; import cn.ponfee.disjob.core.enums.RouteStrategy; -import cn.ponfee.disjob.core.param.supervisor.UpdateTaskWorkerParam; import cn.ponfee.disjob.dispatch.ExecuteTaskParam; import cn.ponfee.disjob.registry.Discovery; import com.google.common.collect.Lists; diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/WorkerThreadPool.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/WorkerThreadPool.java index 5fbd36e5..294fbe00 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/WorkerThreadPool.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/WorkerThreadPool.java @@ -27,13 +27,13 @@ import cn.ponfee.disjob.common.util.Jsons; import cn.ponfee.disjob.core.base.JobConstants; import cn.ponfee.disjob.core.base.SupervisorRpcService; import cn.ponfee.disjob.core.base.WorkerMetrics; +import cn.ponfee.disjob.core.dto.supervisor.StartTaskParam; +import cn.ponfee.disjob.core.dto.supervisor.StartTaskResult; +import cn.ponfee.disjob.core.dto.supervisor.TerminateTaskParam; +import cn.ponfee.disjob.core.dto.supervisor.UpdateTaskWorkerParam; import cn.ponfee.disjob.core.enums.ExecuteState; import cn.ponfee.disjob.core.enums.Operation; import cn.ponfee.disjob.core.enums.RouteStrategy; -import cn.ponfee.disjob.core.param.supervisor.StartTaskParam; -import cn.ponfee.disjob.core.param.supervisor.StartTaskResult; -import cn.ponfee.disjob.core.param.supervisor.TerminateTaskParam; -import cn.ponfee.disjob.core.param.supervisor.UpdateTaskWorkerParam; import cn.ponfee.disjob.worker.exception.CancelTaskException; import cn.ponfee.disjob.worker.exception.PauseTaskException; import cn.ponfee.disjob.worker.exception.SavepointFailedException; diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/ExecutingTask.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/ExecutingTask.java index 8ae79e23..15747a9a 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/ExecutingTask.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/ExecutingTask.java @@ -16,9 +16,9 @@ package cn.ponfee.disjob.worker.handle; +import cn.ponfee.disjob.core.dto.supervisor.StartTaskResult; import cn.ponfee.disjob.core.model.AbstractExecutionTask; import cn.ponfee.disjob.core.model.WorkflowPredecessorNode; -import cn.ponfee.disjob.core.param.supervisor.StartTaskResult; import lombok.Getter; import lombok.Setter; diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/JobHandlerUtils.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/JobHandlerUtils.java index b7b32c1b..7c29abbb 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/JobHandlerUtils.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/JobHandlerUtils.java @@ -25,11 +25,11 @@ import cn.ponfee.disjob.common.util.ClassUtils; import cn.ponfee.disjob.common.util.Predicates; import cn.ponfee.disjob.common.util.ProcessUtils; import cn.ponfee.disjob.core.base.JobCodeMsg; +import cn.ponfee.disjob.core.dto.worker.VerifyJobParam; import cn.ponfee.disjob.core.enums.JobType; import cn.ponfee.disjob.core.enums.RouteStrategy; import cn.ponfee.disjob.core.exception.JobException; import cn.ponfee.disjob.core.exception.JobRuntimeException; -import cn.ponfee.disjob.core.param.worker.JobHandlerParam; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; @@ -54,7 +54,7 @@ import static cn.ponfee.disjob.core.base.JobCodeMsg.SPLIT_JOB_FAILED; */ public class JobHandlerUtils { - public static void verify(JobHandlerParam param) throws JobException { + public static void verify(VerifyJobParam param) throws JobException { Assert.hasText(param.getJobHandler(), "Job handler cannot be blank."); Set jobHandlers; if (param.getJobType() == JobType.WORKFLOW) { @@ -77,7 +77,7 @@ public class JobHandlerUtils { Assert.isTrue(handler instanceof BroadcastJobHandler, () -> "Not a broadcast job handler: " + jobHandler); } else { param.setJobHandler(jobHandler); - Assert.notEmpty(split(param), () -> "Not split any task: " + jobHandler); + Assert.notEmpty(split(param.getJobHandler(), param.getJobParam()), () -> "Not split any task: " + jobHandler); } } } catch (JobException | JobRuntimeException e) { @@ -90,14 +90,15 @@ public class JobHandlerUtils { /** * Splits job to many sched task. * - * @param param the job handler parameter + * @param jobHandler the job handler + * @param jobParam the job param * @return list of SplitTask * @throws JobException if split failed */ - public static List split(JobHandlerParam param) throws JobException { + public static List split(String jobHandler, String jobParam) throws JobException { try { - JobSplitter jobSplitter = load(param.getJobHandler()); - List splitTasks = jobSplitter.split(param.getJobParam()); + JobSplitter jobSplitter = load(jobHandler); + List splitTasks = jobSplitter.split(jobParam); if (CollectionUtils.isEmpty(splitTasks)) { throw new JobException(SPLIT_JOB_FAILED, "Job split none tasks."); } diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/SplitTask.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/SplitTask.java index c09e644e..dbc8d6a2 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/SplitTask.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/SplitTask.java @@ -16,7 +16,6 @@ package cn.ponfee.disjob.worker.handle; -import cn.ponfee.disjob.core.param.worker.SplitTaskParam; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -43,8 +42,4 @@ public class SplitTask implements java.io.Serializable { return taskParam; } - public SplitTaskParam convert() { - return new SplitTaskParam(taskParam); - } - } diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/provider/WorkerRpcProvider.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/provider/WorkerRpcProvider.java index d20b8bd8..acbd05b8 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/provider/WorkerRpcProvider.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/provider/WorkerRpcProvider.java @@ -20,13 +20,12 @@ import cn.ponfee.disjob.common.spring.RpcController; import cn.ponfee.disjob.core.base.Worker; import cn.ponfee.disjob.core.base.WorkerMetrics; import cn.ponfee.disjob.core.base.WorkerRpcService; +import cn.ponfee.disjob.core.dto.worker.*; +import cn.ponfee.disjob.core.dto.worker.ConfigureWorkerParam.Action; import cn.ponfee.disjob.core.exception.JobException; -import cn.ponfee.disjob.core.param.worker.*; -import cn.ponfee.disjob.core.param.worker.ConfigureWorkerParam.Action; import cn.ponfee.disjob.registry.WorkerRegistry; import cn.ponfee.disjob.worker.base.WorkerConfigurator; import cn.ponfee.disjob.worker.handle.JobHandlerUtils; -import cn.ponfee.disjob.worker.handle.SplitTask; import java.util.List; import java.util.stream.Collectors; @@ -49,17 +48,17 @@ public class WorkerRpcProvider implements WorkerRpcService { } @Override - public void verify(JobHandlerParam param) throws JobException { + public void verify(VerifyJobParam param) throws JobException { currentWork.verifySupervisorAuthenticationToken(param); JobHandlerUtils.verify(param); } @Override - public List split(JobHandlerParam param) throws JobException { + public List split(SplitJobParam param) throws JobException { currentWork.verifySupervisorAuthenticationToken(param); - return JobHandlerUtils.split(param) + return JobHandlerUtils.split(param.getJobHandler(), param.getJobParam()) .stream() - .map(SplitTask::convert) + .map(e -> new SplitTaskResult(e.getTaskParam())) .collect(Collectors.toList()); } -- Gitee From b767ec2a137e46c624e3087142acd3d05ceae409 Mon Sep 17 00:00:00 2001 From: Ponfee Date: Tue, 21 May 2024 23:11:54 +0800 Subject: [PATCH 04/19] delete SplitTask --- .../controller/DisjobMgGroupController.java | 2 +- .../cn/ponfee/disjob/core/base/Tokens.java | 2 +- .../cn/ponfee/disjob/core/base/Worker.java | 2 +- .../disjob/core/base/WorkerRpcService.java | 4 +- ...litTaskResult.java => SplitJobResult.java} | 21 ++++---- .../core/{model => enums}/TokenType.java | 2 +- .../ponfee/disjob/core/base/TokensTest.java | 2 +- .../rpc/DestinationServerRestTemplate.java | 51 ++++++++++++++++++- .../rpc/DiscoveryServerRestTemplate.java | 49 +----------------- .../application/SchedGroupService.java | 2 +- .../component/AbstractJobManager.java | 17 ++++--- .../dao/mapper/SchedGroupMapper.java | 2 +- .../supervisor/base/WorkerRpcServiceTest.java | 13 +++-- .../disjob/test/handler/AJobHandler.java | 8 +-- .../disjob/test/handler/BJobHandler.java | 8 +-- .../disjob/test/handler/CJobHandler.java | 8 +-- .../disjob/test/handler/DJobHandler.java | 8 +-- .../disjob/test/handler/EJobHandler.java | 8 +-- .../disjob/test/handler/NoopJobHandler.java | 8 +-- .../handler/PrimeAccumulateJobHandler.java | 9 ++-- .../test/handler/PrimeCountJobHandler.java | 11 ++-- .../test/util/PrimeCountJobHandlerTest.java | 9 ++-- .../worker/handle/BroadcastJobHandler.java | 2 +- .../disjob/worker/handle/JobHandlerUtils.java | 16 +++--- .../disjob/worker/handle/JobSplitter.java | 6 +-- .../disjob/worker/handle/SplitTask.java | 45 ---------------- .../disjob/worker/handle/TaskExecutor.java | 10 ++-- .../worker/provider/WorkerRpcProvider.java | 9 ++-- 28 files changed, 150 insertions(+), 184 deletions(-) rename disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/{SplitTaskResult.java => SplitJobResult.java} (71%) rename disjob-core/src/main/java/cn/ponfee/disjob/core/{model => enums}/TokenType.java (96%) delete mode 100644 disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/SplitTask.java diff --git a/disjob-admin/ruoyi-disjob/src/main/java/cn/ponfee/disjob/admin/controller/DisjobMgGroupController.java b/disjob-admin/ruoyi-disjob/src/main/java/cn/ponfee/disjob/admin/controller/DisjobMgGroupController.java index ea299152..f0482f87 100644 --- a/disjob-admin/ruoyi-disjob/src/main/java/cn/ponfee/disjob/admin/controller/DisjobMgGroupController.java +++ b/disjob-admin/ruoyi-disjob/src/main/java/cn/ponfee/disjob/admin/controller/DisjobMgGroupController.java @@ -19,7 +19,7 @@ package cn.ponfee.disjob.admin.controller; import cn.ponfee.disjob.admin.util.PageUtils; import cn.ponfee.disjob.common.util.Strings; import cn.ponfee.disjob.common.util.UuidUtils; -import cn.ponfee.disjob.core.model.TokenType; +import cn.ponfee.disjob.core.enums.TokenType; import cn.ponfee.disjob.supervisor.application.SchedGroupService; import cn.ponfee.disjob.supervisor.application.ServerInvokeService; import cn.ponfee.disjob.supervisor.application.request.SchedGroupAddRequest; diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/base/Tokens.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/base/Tokens.java index bf0bf891..918eb157 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/base/Tokens.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/base/Tokens.java @@ -16,7 +16,7 @@ package cn.ponfee.disjob.core.base; -import cn.ponfee.disjob.core.model.TokenType; +import cn.ponfee.disjob.core.enums.TokenType; import org.apache.commons.codec.digest.HmacAlgorithms; import org.apache.commons.codec.digest.HmacUtils; import org.apache.commons.lang3.StringUtils; diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/base/Worker.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/base/Worker.java index 7585fbc2..664a88ef 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/base/Worker.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/base/Worker.java @@ -19,9 +19,9 @@ package cn.ponfee.disjob.core.base; import cn.ponfee.disjob.common.base.SingletonClassConstraint; import cn.ponfee.disjob.common.util.Numbers; import cn.ponfee.disjob.core.dto.worker.AuthenticationParam; +import cn.ponfee.disjob.core.enums.TokenType; import cn.ponfee.disjob.core.exception.AuthenticationException; import cn.ponfee.disjob.core.model.SchedJob; -import cn.ponfee.disjob.core.model.TokenType; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/base/WorkerRpcService.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/base/WorkerRpcService.java index 795e55f7..b56ad816 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/base/WorkerRpcService.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/base/WorkerRpcService.java @@ -23,8 +23,6 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; -import java.util.List; - /** * Worker rpc service, provides for supervisor communication. * @@ -40,7 +38,7 @@ public interface WorkerRpcService { void verify(VerifyJobParam param) throws JobException; @PostMapping("/job/split") - List split(SplitJobParam param) throws JobException; + SplitJobResult split(SplitJobParam param) throws JobException; @GetMapping("/task/exists") boolean existsTask(ExistsTaskParam param); diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/SplitTaskResult.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/SplitJobResult.java similarity index 71% rename from disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/SplitTaskResult.java rename to disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/SplitJobResult.java index e536face..d5a7aa8f 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/SplitTaskResult.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/worker/SplitJobResult.java @@ -16,30 +16,31 @@ package cn.ponfee.disjob.core.dto.worker; +import cn.ponfee.disjob.common.base.ToJsonString; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import java.util.List; + /** - * Split task result. + * Split job result. * * @author Ponfee */ @Getter @Setter @NoArgsConstructor -public class SplitTaskResult implements java.io.Serializable { +public class SplitJobResult extends ToJsonString implements java.io.Serializable { private static final long serialVersionUID = -7020990825612520665L; - private String taskParam; - - public SplitTaskResult(String taskParam) { - this.taskParam = taskParam; - } + /** + * List of task param + */ + private List taskParams; - @Override - public String toString() { - return taskParam; + public SplitJobResult(List taskParams) { + this.taskParams = taskParams; } } diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/model/TokenType.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/enums/TokenType.java similarity index 96% rename from disjob-core/src/main/java/cn/ponfee/disjob/core/model/TokenType.java rename to disjob-core/src/main/java/cn/ponfee/disjob/core/enums/TokenType.java index 00cca34f..2495056d 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/model/TokenType.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/enums/TokenType.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package cn.ponfee.disjob.core.model; +package cn.ponfee.disjob.core.enums; /** * Token type diff --git a/disjob-core/src/test/java/cn/ponfee/disjob/core/base/TokensTest.java b/disjob-core/src/test/java/cn/ponfee/disjob/core/base/TokensTest.java index 4ad5eb01..aa766b50 100644 --- a/disjob-core/src/test/java/cn/ponfee/disjob/core/base/TokensTest.java +++ b/disjob-core/src/test/java/cn/ponfee/disjob/core/base/TokensTest.java @@ -16,7 +16,7 @@ package cn.ponfee.disjob.core.base; -import cn.ponfee.disjob.core.model.TokenType; +import cn.ponfee.disjob.core.enums.TokenType; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; diff --git a/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/DestinationServerRestTemplate.java b/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/DestinationServerRestTemplate.java index 70d4106d..b2c65f79 100644 --- a/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/DestinationServerRestTemplate.java +++ b/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/DestinationServerRestTemplate.java @@ -22,15 +22,19 @@ import cn.ponfee.disjob.core.base.RetryProperties; import cn.ponfee.disjob.core.base.Server; import cn.ponfee.disjob.core.base.Supervisor; import cn.ponfee.disjob.core.base.Worker; +import com.google.common.collect.ImmutableSet; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.web.client.HttpStatusCodeException; import org.springframework.web.client.RestTemplate; import java.lang.reflect.Type; import java.util.Map; import java.util.Objects; +import java.util.Set; /** * Destination server rest template(Method pattern) @@ -40,6 +44,25 @@ import java.util.Objects; final class DestinationServerRestTemplate { private static final Logger LOG = LoggerFactory.getLogger(DestinationServerRestTemplate.class); + private static final Set RETRIABLE_HTTP_STATUS = ImmutableSet.of( + // 4xx + HttpStatus.REQUEST_TIMEOUT, + //HttpStatus.CONFLICT, + //HttpStatus.LOCKED, + //HttpStatus.FAILED_DEPENDENCY, + HttpStatus.TOO_EARLY, + //HttpStatus.PRECONDITION_REQUIRED, + HttpStatus.TOO_MANY_REQUESTS, + + // 5xx + // 500:Supervisor内部组件超时(如数据库超时)等场景 + //HttpStatus.INTERNAL_SERVER_ERROR, + HttpStatus.BAD_GATEWAY, + HttpStatus.SERVICE_UNAVAILABLE, + HttpStatus.GATEWAY_TIMEOUT, + HttpStatus.BANDWIDTH_LIMIT_EXCEEDED + ); + private final RestTemplate restTemplate; private final int retryMaxCount; private final long retryBackoffPeriod; @@ -79,7 +102,7 @@ final class DestinationServerRestTemplate { } catch (Throwable e) { ex = e; LOG.error("Invoke server rpc failed [{}]: {}, {}, {}", i, url, Jsons.toJson(args), e.getMessage()); - if (DiscoveryServerRestTemplate.isNotRetry(e)) { + if (isNotRetry(e)) { break; } if (i < retryMaxCount) { @@ -95,4 +118,30 @@ final class DestinationServerRestTemplate { throw new RpcInvokeException(msg, ex); } + // ----------------------------------------------------------------------------------------static methods + + static boolean isNotRetry(Throwable e) { + if (e == null) { + return true; + } + if (isTimeoutException(e) || isTimeoutException(e.getCause())) { + // org.springframework.web.client.ResourceAccessException#getCause may be timeout + return false; + } + if (!(e instanceof HttpStatusCodeException)) { + return true; + } + return !RETRIABLE_HTTP_STATUS.contains(((HttpStatusCodeException) e).getStatusCode()); + } + + private static boolean isTimeoutException(Throwable e) { + if (e == null) { + return false; + } + return (e instanceof java.net.SocketTimeoutException) + || (e instanceof java.net.ConnectException) + || (e instanceof org.apache.http.conn.ConnectTimeoutException) + || (e instanceof java.rmi.ConnectException); + } + } diff --git a/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/DiscoveryServerRestTemplate.java b/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/DiscoveryServerRestTemplate.java index 83726ec3..3a4b17e2 100644 --- a/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/DiscoveryServerRestTemplate.java +++ b/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/DiscoveryServerRestTemplate.java @@ -25,21 +25,17 @@ import cn.ponfee.disjob.core.base.Supervisor; import cn.ponfee.disjob.core.base.Worker; import cn.ponfee.disjob.registry.Discovery; import cn.ponfee.disjob.registry.ServerRole; -import com.google.common.collect.ImmutableSet; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; -import org.springframework.web.client.HttpStatusCodeException; import org.springframework.web.client.RestTemplate; import java.lang.reflect.Type; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.Set; import java.util.concurrent.ThreadLocalRandom; /** @@ -51,24 +47,7 @@ import java.util.concurrent.ThreadLocalRandom; final class DiscoveryServerRestTemplate { private static final Logger LOG = LoggerFactory.getLogger(DiscoveryServerRestTemplate.class); - private static final Set RETRIABLE_HTTP_STATUS = ImmutableSet.of( - // 4xx - HttpStatus.REQUEST_TIMEOUT, - HttpStatus.CONFLICT, - HttpStatus.LOCKED, - HttpStatus.FAILED_DEPENDENCY, - HttpStatus.TOO_EARLY, - HttpStatus.PRECONDITION_REQUIRED, - HttpStatus.TOO_MANY_REQUESTS, - // 5xx - // 500:Supervisor内部组件超时(如数据库超时)等场景 - HttpStatus.INTERNAL_SERVER_ERROR, - HttpStatus.BAD_GATEWAY, - HttpStatus.SERVICE_UNAVAILABLE, - HttpStatus.GATEWAY_TIMEOUT, - HttpStatus.BANDWIDTH_LIMIT_EXCEEDED - ); private final Discovery discoveryServer; private final RestTemplate restTemplate; @@ -127,7 +106,7 @@ final class DiscoveryServerRestTemplate { } catch (Throwable e) { ex = e; LOG.error("Invoke server rpc failed [{}]: {}, {}, {}", i, url, Jsons.toJson(args), e.getMessage()); - if (isNotRetry(e)) { + if (DestinationServerRestTemplate.isNotRetry(e)) { break; } if (i < n) { @@ -144,30 +123,4 @@ final class DiscoveryServerRestTemplate { throw new RpcInvokeException(msg, ex); } - // ----------------------------------------------------------------------------------------static methods - - static boolean isNotRetry(Throwable e) { - if (e == null) { - return true; - } - if (isTimeoutException(e) || isTimeoutException(e.getCause())) { - // org.springframework.web.client.ResourceAccessException#getCause may be timeout - return false; - } - if (!(e instanceof HttpStatusCodeException)) { - return true; - } - return !RETRIABLE_HTTP_STATUS.contains(((HttpStatusCodeException) e).getStatusCode()); - } - - private static boolean isTimeoutException(Throwable e) { - if (e == null) { - return false; - } - return (e instanceof java.net.SocketTimeoutException) - || (e instanceof java.net.ConnectException) - || (e instanceof org.apache.http.conn.ConnectTimeoutException) - || (e instanceof java.rmi.ConnectException); - } - } diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/SchedGroupService.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/SchedGroupService.java index c1de6fff..3b27704d 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/SchedGroupService.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/SchedGroupService.java @@ -25,8 +25,8 @@ import cn.ponfee.disjob.core.base.Tokens; import cn.ponfee.disjob.core.base.Worker; import cn.ponfee.disjob.core.dto.supervisor.EventParam; import cn.ponfee.disjob.core.dto.worker.AuthenticationParam; +import cn.ponfee.disjob.core.enums.TokenType; import cn.ponfee.disjob.core.model.SchedGroup; -import cn.ponfee.disjob.core.model.TokenType; import cn.ponfee.disjob.registry.SupervisorRegistry; import cn.ponfee.disjob.supervisor.application.converter.SchedGroupConverter; import cn.ponfee.disjob.supervisor.application.request.SchedGroupAddRequest; diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/AbstractJobManager.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/AbstractJobManager.java index 5ca25f58..c510392a 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/AbstractJobManager.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/AbstractJobManager.java @@ -26,7 +26,7 @@ import cn.ponfee.disjob.core.base.Worker; import cn.ponfee.disjob.core.base.WorkerRpcService; import cn.ponfee.disjob.core.dto.worker.ExistsTaskParam; import cn.ponfee.disjob.core.dto.worker.SplitJobParam; -import cn.ponfee.disjob.core.dto.worker.SplitTaskResult; +import cn.ponfee.disjob.core.dto.worker.SplitJobResult; import cn.ponfee.disjob.core.dto.worker.VerifyJobParam; import cn.ponfee.disjob.core.enums.*; import cn.ponfee.disjob.core.exception.JobException; @@ -205,17 +205,18 @@ public abstract class AbstractJobManager { if (discoveredServers.isEmpty()) { throw new JobException(JobCodeMsg.NOT_DISCOVERED_WORKER); } + String taskParam = param.getJobParam(); int count = discoveredServers.size(); return IntStream.range(0, count) - .mapToObj(i -> SchedTask.create(param.getJobParam(), generateId(), instanceId, i + 1, count, date, discoveredServers.get(i).serialize())) + .mapToObj(i -> SchedTask.create(taskParam, generateId(), instanceId, i + 1, count, date, discoveredServers.get(i).serialize())) .collect(Collectors.toList()); } else { - List split = splitJob(param); - Assert.notEmpty(split, () -> "Not split any task: " + param); - Assert.isTrue(split.size() <= maximumSplitTaskSize, () -> "Split task size must less than " + maximumSplitTaskSize + ", job=" + param); - int count = split.size(); + List taskParams = splitJob(param).getTaskParams(); + Assert.notEmpty(taskParams, () -> "Not split any task: " + param); + int count = taskParams.size(); + Assert.isTrue(count <= maximumSplitTaskSize, () -> "Split task size must less than " + maximumSplitTaskSize + ", job=" + param); return IntStream.range(0, count) - .mapToObj(i -> SchedTask.create(split.get(i).getTaskParam(), generateId(), instanceId, i + 1, count, date, null)) + .mapToObj(i -> SchedTask.create(taskParams.get(i), generateId(), instanceId, i + 1, count, date, null)) .collect(Collectors.toList()); } } @@ -324,7 +325,7 @@ public abstract class AbstractJobManager { groupedWorkerRpcClient.invoke(job.getGroup(), client -> client.verify(param)); } - private List splitJob(SplitJobParam param) throws JobException { + private SplitJobResult splitJob(SplitJobParam param) throws JobException { SchedGroupService.fillSupervisorAuthenticationToken(param.getGroup(), param); return groupedWorkerRpcClient.call(param.getGroup(), client -> client.split(param)); } diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/dao/mapper/SchedGroupMapper.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/dao/mapper/SchedGroupMapper.java index ea115009..0be426f6 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/dao/mapper/SchedGroupMapper.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/dao/mapper/SchedGroupMapper.java @@ -16,8 +16,8 @@ package cn.ponfee.disjob.supervisor.dao.mapper; +import cn.ponfee.disjob.core.enums.TokenType; import cn.ponfee.disjob.core.model.SchedGroup; -import cn.ponfee.disjob.core.model.TokenType; import cn.ponfee.disjob.supervisor.application.request.SchedGroupPageRequest; import org.apache.ibatis.annotations.Param; diff --git a/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/base/WorkerRpcServiceTest.java b/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/base/WorkerRpcServiceTest.java index cac4fccf..a700560c 100644 --- a/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/base/WorkerRpcServiceTest.java +++ b/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/base/WorkerRpcServiceTest.java @@ -17,13 +17,12 @@ package cn.ponfee.disjob.supervisor.base; import cn.ponfee.disjob.core.dto.worker.SplitJobParam; -import cn.ponfee.disjob.core.dto.worker.SplitTaskResult; +import cn.ponfee.disjob.core.dto.worker.SplitJobResult; import cn.ponfee.disjob.core.exception.JobException; import cn.ponfee.disjob.supervisor.SpringBootTestBase; import org.junit.jupiter.api.Test; import java.util.Collections; -import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -45,13 +44,13 @@ public class WorkerRpcServiceTest extends SpringBootTestBase { @Test public void testSplit() throws JobException { String taskParam = "taskParam"; - //doReturn(Collections.singletonList(new SplitTask(taskParam))).when(workerRpcService).split(any()); - when(workerRpcService.split(any())).thenReturn(Collections.singletonList(new SplitTaskResult(taskParam))); + when(workerRpcService.split(any())).thenReturn(new SplitJobResult(Collections.singletonList(taskParam))); - List result = workerRpcService.split(new SplitJobParam("group", null, null, null, null)); + SplitJobResult result = workerRpcService.split(new SplitJobParam("group", null, null, null, null)); assertNotNull(result); - assertEquals(1, result.size()); - assertEquals(taskParam, result.get(0).getTaskParam()); + assertNotNull(result.getTaskParams()); + assertEquals(1, result.getTaskParams().size()); + assertEquals(taskParam, result.getTaskParams().get(0)); } } diff --git a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/AJobHandler.java b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/AJobHandler.java index 1dec5723..48f7b8de 100644 --- a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/AJobHandler.java +++ b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/AJobHandler.java @@ -18,7 +18,10 @@ package cn.ponfee.disjob.test.handler; import cn.ponfee.disjob.common.date.Dates; import cn.ponfee.disjob.test.util.Constants; -import cn.ponfee.disjob.worker.handle.*; +import cn.ponfee.disjob.worker.handle.ExecuteResult; +import cn.ponfee.disjob.worker.handle.ExecutingTask; +import cn.ponfee.disjob.worker.handle.JobHandler; +import cn.ponfee.disjob.worker.handle.Savepoint; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.config.ConfigurableBeanFactory; @@ -43,10 +46,9 @@ public class AJobHandler extends JobHandler { private static final Logger LOG = LoggerFactory.getLogger(AJobHandler.class); @Override - public List split(String jobParamString) { + public List split(String jobParamString) { return IntStream.range(0, Constants.TASK_COUNT) .mapToObj(i -> getClass().getSimpleName() + "-" + i) - .map(SplitTask::new) .collect(Collectors.toList()); } diff --git a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/BJobHandler.java b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/BJobHandler.java index f07bc75d..70a766df 100644 --- a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/BJobHandler.java +++ b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/BJobHandler.java @@ -18,7 +18,10 @@ package cn.ponfee.disjob.test.handler; import cn.ponfee.disjob.common.date.Dates; import cn.ponfee.disjob.test.util.Constants; -import cn.ponfee.disjob.worker.handle.*; +import cn.ponfee.disjob.worker.handle.ExecuteResult; +import cn.ponfee.disjob.worker.handle.ExecutingTask; +import cn.ponfee.disjob.worker.handle.JobHandler; +import cn.ponfee.disjob.worker.handle.Savepoint; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.config.ConfigurableBeanFactory; @@ -43,10 +46,9 @@ public class BJobHandler extends JobHandler { private static final Logger LOG = LoggerFactory.getLogger(BJobHandler.class); @Override - public List split(String jobParamString) { + public List split(String jobParamString) { return IntStream.range(0, Constants.TASK_COUNT) .mapToObj(i -> getClass().getSimpleName() + "-" + i) - .map(SplitTask::new) .collect(Collectors.toList()); } diff --git a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/CJobHandler.java b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/CJobHandler.java index 3a0c24e0..7657cdd6 100644 --- a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/CJobHandler.java +++ b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/CJobHandler.java @@ -18,7 +18,10 @@ package cn.ponfee.disjob.test.handler; import cn.ponfee.disjob.common.date.Dates; import cn.ponfee.disjob.test.util.Constants; -import cn.ponfee.disjob.worker.handle.*; +import cn.ponfee.disjob.worker.handle.ExecuteResult; +import cn.ponfee.disjob.worker.handle.ExecutingTask; +import cn.ponfee.disjob.worker.handle.JobHandler; +import cn.ponfee.disjob.worker.handle.Savepoint; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.config.ConfigurableBeanFactory; @@ -43,10 +46,9 @@ public class CJobHandler extends JobHandler { private static final Logger LOG = LoggerFactory.getLogger(CJobHandler.class); @Override - public List split(String jobParamString) { + public List split(String jobParamString) { return IntStream.range(0, Constants.TASK_COUNT) .mapToObj(i -> getClass().getSimpleName() + "-" + i) - .map(SplitTask::new) .collect(Collectors.toList()); } diff --git a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/DJobHandler.java b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/DJobHandler.java index c23d1e7d..66a27a2b 100644 --- a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/DJobHandler.java +++ b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/DJobHandler.java @@ -18,7 +18,10 @@ package cn.ponfee.disjob.test.handler; import cn.ponfee.disjob.common.date.Dates; import cn.ponfee.disjob.test.util.Constants; -import cn.ponfee.disjob.worker.handle.*; +import cn.ponfee.disjob.worker.handle.ExecuteResult; +import cn.ponfee.disjob.worker.handle.ExecutingTask; +import cn.ponfee.disjob.worker.handle.JobHandler; +import cn.ponfee.disjob.worker.handle.Savepoint; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.config.ConfigurableBeanFactory; @@ -43,10 +46,9 @@ public class DJobHandler extends JobHandler { private static final Logger LOG = LoggerFactory.getLogger(DJobHandler.class); @Override - public List split(String jobParamString) { + public List split(String jobParamString) { return IntStream.range(0, Constants.TASK_COUNT) .mapToObj(i -> getClass().getSimpleName() + "-" + i) - .map(SplitTask::new) .collect(Collectors.toList()); } diff --git a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/EJobHandler.java b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/EJobHandler.java index 158f82c6..de364b12 100644 --- a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/EJobHandler.java +++ b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/EJobHandler.java @@ -18,7 +18,10 @@ package cn.ponfee.disjob.test.handler; import cn.ponfee.disjob.common.date.Dates; import cn.ponfee.disjob.test.util.Constants; -import cn.ponfee.disjob.worker.handle.*; +import cn.ponfee.disjob.worker.handle.ExecuteResult; +import cn.ponfee.disjob.worker.handle.ExecutingTask; +import cn.ponfee.disjob.worker.handle.JobHandler; +import cn.ponfee.disjob.worker.handle.Savepoint; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.config.ConfigurableBeanFactory; @@ -43,10 +46,9 @@ public class EJobHandler extends JobHandler { private static final Logger LOG = LoggerFactory.getLogger(EJobHandler.class); @Override - public List split(String jobParamString) { + public List split(String jobParamString) { return IntStream.range(0, Constants.TASK_COUNT) .mapToObj(i -> getClass().getSimpleName() + "-" + i) - .map(SplitTask::new) .collect(Collectors.toList()); } diff --git a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/NoopJobHandler.java b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/NoopJobHandler.java index fba12b33..abbbfe21 100644 --- a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/NoopJobHandler.java +++ b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/NoopJobHandler.java @@ -17,7 +17,10 @@ package cn.ponfee.disjob.test.handler; import cn.ponfee.disjob.common.date.Dates; -import cn.ponfee.disjob.worker.handle.*; +import cn.ponfee.disjob.worker.handle.ExecuteResult; +import cn.ponfee.disjob.worker.handle.ExecutingTask; +import cn.ponfee.disjob.worker.handle.JobHandler; +import cn.ponfee.disjob.worker.handle.Savepoint; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -39,10 +42,9 @@ public class NoopJobHandler extends JobHandler { public static volatile long minor = 19997; @Override - public List split(String jobParamString) { + public List split(String jobParamString) { return IntStream.range(0, 1 + ThreadLocalRandom.current().nextInt(5)) .mapToObj(i -> getClass().getSimpleName() + "-" + i) - .map(SplitTask::new) .collect(Collectors.toList()); } diff --git a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/PrimeAccumulateJobHandler.java b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/PrimeAccumulateJobHandler.java index 515f12bf..a572d209 100644 --- a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/PrimeAccumulateJobHandler.java +++ b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/PrimeAccumulateJobHandler.java @@ -19,7 +19,10 @@ package cn.ponfee.disjob.test.handler; import cn.ponfee.disjob.common.util.Jsons; import cn.ponfee.disjob.core.enums.RunState; import cn.ponfee.disjob.core.model.AbstractExecutionTask; -import cn.ponfee.disjob.worker.handle.*; +import cn.ponfee.disjob.worker.handle.ExecuteResult; +import cn.ponfee.disjob.worker.handle.ExecutingTask; +import cn.ponfee.disjob.worker.handle.JobHandler; +import cn.ponfee.disjob.worker.handle.Savepoint; import org.springframework.util.Assert; import java.util.Collections; @@ -33,8 +36,8 @@ import java.util.List; public class PrimeAccumulateJobHandler extends JobHandler { @Override - public List split(String jobParamString) { - return Collections.singletonList(new SplitTask(null)); + public List split(String jobParamString) { + return Collections.singletonList(null); } @Override diff --git a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/PrimeCountJobHandler.java b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/PrimeCountJobHandler.java index e900a1ab..29daec5c 100644 --- a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/PrimeCountJobHandler.java +++ b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/PrimeCountJobHandler.java @@ -19,7 +19,10 @@ package cn.ponfee.disjob.test.handler; import cn.ponfee.disjob.common.util.Jsons; import cn.ponfee.disjob.test.util.Prime; import cn.ponfee.disjob.worker.exception.PauseTaskException; -import cn.ponfee.disjob.worker.handle.*; +import cn.ponfee.disjob.worker.handle.ExecuteResult; +import cn.ponfee.disjob.worker.handle.ExecutingTask; +import cn.ponfee.disjob.worker.handle.JobHandler; +import cn.ponfee.disjob.worker.handle.Savepoint; import lombok.Getter; import lombok.Setter; import org.apache.commons.lang3.StringUtils; @@ -55,7 +58,7 @@ public class PrimeCountJobHandler extends JobHandler { * @return task list */ @Override - public List split(String jobParamString) { + public List split(String jobParamString) { JobParam jobParam = Jsons.fromJson(jobParamString, JobParam.class); long m = jobParam.getM(); long n = jobParam.getN(); @@ -66,14 +69,14 @@ public class PrimeCountJobHandler extends JobHandler { Assert.isTrue(jobParam.getParallel() > 0, "Parallel must be greater than zero."); int parallel = n == m ? 1 : (int) Math.min(((n - m) + blockSize - 1) / blockSize, jobParam.getParallel()); - List result = new ArrayList<>(parallel); + List result = new ArrayList<>(parallel); for (int i = 0; i < parallel; i++) { TaskParam taskParam = new TaskParam(); taskParam.setStart(m + blockSize * i); taskParam.setBlockSize(blockSize); taskParam.setStep(blockSize * parallel); taskParam.setN(n); - result.add(new SplitTask(Jsons.toJson(taskParam))); + result.add(Jsons.toJson(taskParam)); } return result; } diff --git a/disjob-test/src/test/java/cn/ponfee/disjob/test/util/PrimeCountJobHandlerTest.java b/disjob-test/src/test/java/cn/ponfee/disjob/test/util/PrimeCountJobHandlerTest.java index 74f9ff8e..bcc59b4d 100644 --- a/disjob-test/src/test/java/cn/ponfee/disjob/test/util/PrimeCountJobHandlerTest.java +++ b/disjob-test/src/test/java/cn/ponfee/disjob/test/util/PrimeCountJobHandlerTest.java @@ -21,7 +21,6 @@ import cn.ponfee.disjob.core.model.SchedJob; import cn.ponfee.disjob.test.handler.PrimeCountJobHandler; import cn.ponfee.disjob.worker.handle.ExecutingTask; import cn.ponfee.disjob.worker.handle.Savepoint; -import cn.ponfee.disjob.worker.handle.SplitTask; import org.junit.jupiter.api.Test; import java.util.List; @@ -46,13 +45,13 @@ public class PrimeCountJobHandlerTest { System.out.println(json); PrimeCountJobHandler jobHandler = new PrimeCountJobHandler(); - List split = jobHandler.split(schedJob.getJobParam()); - System.out.println(Jsons.toJson(split)); + List taskParams = jobHandler.split(schedJob.getJobParam()); + System.out.println(Jsons.toJson(taskParams)); - for (SplitTask splitTask : split) { + for (String taskParam : taskParams) { ExecutingTask executingTask = new ExecutingTask(); executingTask.setTaskId(System.nanoTime()); - executingTask.setTaskParam(splitTask.getTaskParam()); + executingTask.setTaskParam(taskParam); jobHandler.execute(executingTask, Savepoint.DISCARD); System.out.println("-------------------"); } diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/BroadcastJobHandler.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/BroadcastJobHandler.java index 4baa8dac..f3c1948b 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/BroadcastJobHandler.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/BroadcastJobHandler.java @@ -26,7 +26,7 @@ import java.util.List; public abstract class BroadcastJobHandler extends JobHandler { @Override - public final List split(String jobParam) { + public final List split(String jobParam) { throw new UnsupportedOperationException("Broadcast job handler unsupported split operation."); } diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/JobHandlerUtils.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/JobHandlerUtils.java index 7c29abbb..c54e9ba9 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/JobHandlerUtils.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/JobHandlerUtils.java @@ -40,7 +40,6 @@ import java.lang.reflect.Modifier; import java.nio.charset.Charset; import java.util.Collections; import java.util.List; -import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; @@ -77,7 +76,7 @@ public class JobHandlerUtils { Assert.isTrue(handler instanceof BroadcastJobHandler, () -> "Not a broadcast job handler: " + jobHandler); } else { param.setJobHandler(jobHandler); - Assert.notEmpty(split(param.getJobHandler(), param.getJobParam()), () -> "Not split any task: " + jobHandler); + split(param.getJobHandler(), param.getJobParam()); } } } catch (JobException | JobRuntimeException e) { @@ -92,20 +91,17 @@ public class JobHandlerUtils { * * @param jobHandler the job handler * @param jobParam the job param - * @return list of SplitTask + * @return list of task param * @throws JobException if split failed */ - public static List split(String jobHandler, String jobParam) throws JobException { + public static List split(String jobHandler, String jobParam) throws JobException { try { JobSplitter jobSplitter = load(jobHandler); - List splitTasks = jobSplitter.split(jobParam); - if (CollectionUtils.isEmpty(splitTasks)) { + List taskParams = jobSplitter.split(jobParam); + if (CollectionUtils.isEmpty(taskParams)) { throw new JobException(SPLIT_JOB_FAILED, "Job split none tasks."); } - if (splitTasks.stream().anyMatch(Objects::isNull)) { - throw new JobException(SPLIT_JOB_FAILED, "Job split null task."); - } - return splitTasks; + return taskParams; } catch (JobException | JobRuntimeException e) { throw e; } catch (Throwable t) { diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/JobSplitter.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/JobSplitter.java index 4f047f24..5f46ee25 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/JobSplitter.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/JobSplitter.java @@ -33,11 +33,11 @@ public interface JobSplitter { *

Subclass can override this method to customize implementation. * * @param jobParam the job param - * @return list of SplitTask + * @return list of task param * @throws JobException if split failed */ - default List split(String jobParam) throws JobException { - return Collections.singletonList(new SplitTask(jobParam)); + default List split(String jobParam) throws JobException { + return Collections.singletonList(jobParam); } } diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/SplitTask.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/SplitTask.java deleted file mode 100644 index dbc8d6a2..00000000 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/SplitTask.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2022-2024 Ponfee (http://www.ponfee.cn/) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package cn.ponfee.disjob.worker.handle; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -/** - * Split task structure. - * - * @author Ponfee - */ -@Getter -@Setter -@NoArgsConstructor -public class SplitTask implements java.io.Serializable { - private static final long serialVersionUID = 5200874217689134007L; - - private String taskParam; - - public SplitTask(String taskParam) { - this.taskParam = taskParam; - } - - @Override - public String toString() { - return taskParam; - } - -} diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/TaskExecutor.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/TaskExecutor.java index 0180b3b0..0b8e88fe 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/TaskExecutor.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/TaskExecutor.java @@ -52,20 +52,20 @@ public abstract class TaskExecutor { /** * Initializes task * - * @param executingTask the executing task + * @param task the executing task * @throws Exception if init failed */ - public void init(ExecutingTask executingTask) throws Exception { } + public void init(ExecutingTask task) throws Exception { } /** * Executes task * - * @param executingTask the executing task - * @param savepoint the savepoint + * @param task the executing task + * @param savepoint the savepoint * @return execute result * @throws Exception if execute failed */ - public abstract ExecuteResult execute(ExecutingTask executingTask, Savepoint savepoint) throws Exception; + public abstract ExecuteResult execute(ExecutingTask task, Savepoint savepoint) throws Exception; /** * Destroy this task executor diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/provider/WorkerRpcProvider.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/provider/WorkerRpcProvider.java index acbd05b8..622d6b9d 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/provider/WorkerRpcProvider.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/provider/WorkerRpcProvider.java @@ -28,7 +28,6 @@ import cn.ponfee.disjob.worker.base.WorkerConfigurator; import cn.ponfee.disjob.worker.handle.JobHandlerUtils; import java.util.List; -import java.util.stream.Collectors; /** * Worker rpc service provider. @@ -54,12 +53,10 @@ public class WorkerRpcProvider implements WorkerRpcService { } @Override - public List split(SplitJobParam param) throws JobException { + public SplitJobResult split(SplitJobParam param) throws JobException { currentWork.verifySupervisorAuthenticationToken(param); - return JobHandlerUtils.split(param.getJobHandler(), param.getJobParam()) - .stream() - .map(e -> new SplitTaskResult(e.getTaskParam())) - .collect(Collectors.toList()); + List taskParams = JobHandlerUtils.split(param.getJobHandler(), param.getJobParam()); + return new SplitJobResult(taskParams); } @Override -- Gitee From d25dd5efccdd23763ccc13e0d22dfb4248c35168 Mon Sep 17 00:00:00 2001 From: Ponfee Date: Tue, 21 May 2024 23:30:11 +0800 Subject: [PATCH 05/19] rename ExecutingTask to ExecuteTask --- .../ponfee/disjob/test/handler/AJobHandler.java | 4 ++-- .../ponfee/disjob/test/handler/BJobHandler.java | 4 ++-- .../ponfee/disjob/test/handler/CJobHandler.java | 4 ++-- .../ponfee/disjob/test/handler/DJobHandler.java | 4 ++-- .../ponfee/disjob/test/handler/EJobHandler.java | 4 ++-- .../disjob/test/handler/NoopJobHandler.java | 10 +++++----- .../test/handler/PrimeAccumulateJobHandler.java | 6 +++--- .../test/handler/PrimeCountJobHandler.java | 11 ++++++----- .../test/handler/TestBroadcastJobHandler.java | 8 ++++---- .../test/util/PrimeCountJobHandlerTest.java | 10 +++++----- .../disjob/worker/base/WorkerThreadPool.java | 12 ++++++------ .../{ExecutingTask.java => ExecuteTask.java} | 8 ++++---- .../disjob/worker/handle/JobHandlerUtils.java | 4 ++-- .../disjob/worker/handle/TaskExecutor.java | 8 ++++---- .../worker/handle/impl/CommandJobHandler.java | 8 ++++---- .../worker/handle/impl/GroovyJobHandler.java | 8 ++++---- .../worker/handle/impl/HttpJobHandler.java | 8 ++++---- .../worker/handle/impl/ScriptJobHandler.java | 10 +++++----- .../worker/handle/CommandJobHandlerTest.java | 8 ++++---- .../disjob/worker/handle/HttpJobHandlerTest.java | 8 ++++---- .../worker/handle/ScriptJobHandlerTest.java | 16 ++++++++-------- 21 files changed, 82 insertions(+), 81 deletions(-) rename disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/{ExecutingTask.java => ExecuteTask.java} (91%) diff --git a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/AJobHandler.java b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/AJobHandler.java index 48f7b8de..a837dc9a 100644 --- a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/AJobHandler.java +++ b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/AJobHandler.java @@ -19,7 +19,7 @@ package cn.ponfee.disjob.test.handler; import cn.ponfee.disjob.common.date.Dates; import cn.ponfee.disjob.test.util.Constants; import cn.ponfee.disjob.worker.handle.ExecuteResult; -import cn.ponfee.disjob.worker.handle.ExecutingTask; +import cn.ponfee.disjob.worker.handle.ExecuteTask; import cn.ponfee.disjob.worker.handle.JobHandler; import cn.ponfee.disjob.worker.handle.Savepoint; import org.slf4j.Logger; @@ -53,7 +53,7 @@ public class AJobHandler extends JobHandler { } @Override - public ExecuteResult execute(ExecutingTask executingTask, Savepoint savepoint) throws Exception { + public ExecuteResult execute(ExecuteTask task, Savepoint savepoint) throws Exception { Thread.sleep(ThreadLocalRandom.current().nextInt(5000) + 1000L); LOG.info("Execution finished."); savepoint.save(Dates.format(new Date()) + ": " + getClass().getSimpleName()); diff --git a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/BJobHandler.java b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/BJobHandler.java index 70a766df..07a6ed23 100644 --- a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/BJobHandler.java +++ b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/BJobHandler.java @@ -19,7 +19,7 @@ package cn.ponfee.disjob.test.handler; import cn.ponfee.disjob.common.date.Dates; import cn.ponfee.disjob.test.util.Constants; import cn.ponfee.disjob.worker.handle.ExecuteResult; -import cn.ponfee.disjob.worker.handle.ExecutingTask; +import cn.ponfee.disjob.worker.handle.ExecuteTask; import cn.ponfee.disjob.worker.handle.JobHandler; import cn.ponfee.disjob.worker.handle.Savepoint; import org.slf4j.Logger; @@ -53,7 +53,7 @@ public class BJobHandler extends JobHandler { } @Override - public ExecuteResult execute(ExecutingTask executingTask, Savepoint savepoint) throws Exception { + public ExecuteResult execute(ExecuteTask task, Savepoint savepoint) throws Exception { Thread.sleep(ThreadLocalRandom.current().nextInt(5000) + 1000L); LOG.info("execution finished."); savepoint.save(Dates.format(new Date()) + ": " + getClass().getSimpleName()); diff --git a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/CJobHandler.java b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/CJobHandler.java index 7657cdd6..94cd1cbe 100644 --- a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/CJobHandler.java +++ b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/CJobHandler.java @@ -19,7 +19,7 @@ package cn.ponfee.disjob.test.handler; import cn.ponfee.disjob.common.date.Dates; import cn.ponfee.disjob.test.util.Constants; import cn.ponfee.disjob.worker.handle.ExecuteResult; -import cn.ponfee.disjob.worker.handle.ExecutingTask; +import cn.ponfee.disjob.worker.handle.ExecuteTask; import cn.ponfee.disjob.worker.handle.JobHandler; import cn.ponfee.disjob.worker.handle.Savepoint; import org.slf4j.Logger; @@ -53,7 +53,7 @@ public class CJobHandler extends JobHandler { } @Override - public ExecuteResult execute(ExecutingTask executingTask, Savepoint savepoint) throws Exception { + public ExecuteResult execute(ExecuteTask task, Savepoint savepoint) throws Exception { Thread.sleep(ThreadLocalRandom.current().nextInt(5000) + 1000L); LOG.info("Execution finished."); savepoint.save(Dates.format(new Date()) + ": " + getClass().getSimpleName()); diff --git a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/DJobHandler.java b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/DJobHandler.java index 66a27a2b..685d4e0e 100644 --- a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/DJobHandler.java +++ b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/DJobHandler.java @@ -19,7 +19,7 @@ package cn.ponfee.disjob.test.handler; import cn.ponfee.disjob.common.date.Dates; import cn.ponfee.disjob.test.util.Constants; import cn.ponfee.disjob.worker.handle.ExecuteResult; -import cn.ponfee.disjob.worker.handle.ExecutingTask; +import cn.ponfee.disjob.worker.handle.ExecuteTask; import cn.ponfee.disjob.worker.handle.JobHandler; import cn.ponfee.disjob.worker.handle.Savepoint; import org.slf4j.Logger; @@ -53,7 +53,7 @@ public class DJobHandler extends JobHandler { } @Override - public ExecuteResult execute(ExecutingTask executingTask, Savepoint savepoint) throws Exception { + public ExecuteResult execute(ExecuteTask task, Savepoint savepoint) throws Exception { Thread.sleep(ThreadLocalRandom.current().nextInt(5000) + 1000L); LOG.info("Execution finished."); savepoint.save(Dates.format(new Date()) + ": " + getClass().getSimpleName()); diff --git a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/EJobHandler.java b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/EJobHandler.java index de364b12..ecc6b116 100644 --- a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/EJobHandler.java +++ b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/EJobHandler.java @@ -19,7 +19,7 @@ package cn.ponfee.disjob.test.handler; import cn.ponfee.disjob.common.date.Dates; import cn.ponfee.disjob.test.util.Constants; import cn.ponfee.disjob.worker.handle.ExecuteResult; -import cn.ponfee.disjob.worker.handle.ExecutingTask; +import cn.ponfee.disjob.worker.handle.ExecuteTask; import cn.ponfee.disjob.worker.handle.JobHandler; import cn.ponfee.disjob.worker.handle.Savepoint; import org.slf4j.Logger; @@ -53,7 +53,7 @@ public class EJobHandler extends JobHandler { } @Override - public ExecuteResult execute(ExecutingTask executingTask, Savepoint savepoint) throws Exception { + public ExecuteResult execute(ExecuteTask task, Savepoint savepoint) throws Exception { Thread.sleep(ThreadLocalRandom.current().nextInt(5000) + 1000L); LOG.info("Execution finished."); savepoint.save(Dates.format(new Date()) + ": " + getClass().getSimpleName()); diff --git a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/NoopJobHandler.java b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/NoopJobHandler.java index abbbfe21..f7e66592 100644 --- a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/NoopJobHandler.java +++ b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/NoopJobHandler.java @@ -18,7 +18,7 @@ package cn.ponfee.disjob.test.handler; import cn.ponfee.disjob.common.date.Dates; import cn.ponfee.disjob.worker.handle.ExecuteResult; -import cn.ponfee.disjob.worker.handle.ExecutingTask; +import cn.ponfee.disjob.worker.handle.ExecuteTask; import cn.ponfee.disjob.worker.handle.JobHandler; import cn.ponfee.disjob.worker.handle.Savepoint; import org.slf4j.Logger; @@ -49,15 +49,15 @@ public class NoopJobHandler extends JobHandler { } @Override - public void init(ExecutingTask executingTask) { + public void init(ExecuteTask task) { LOG.debug("Noop job init."); } @Override - public ExecuteResult execute(ExecutingTask executingTask, Savepoint savepoint) throws Exception { - LOG.info("task execute start: {}", executingTask.getTaskId()); + public ExecuteResult execute(ExecuteTask task, Savepoint savepoint) throws Exception { + LOG.info("task execute start: {}", task.getTaskId()); Thread.sleep(major + ThreadLocalRandom.current().nextLong(minor)); - LOG.info("task execute done: {}", executingTask.getTaskId()); + LOG.info("task execute done: {}", task.getTaskId()); savepoint.save(Dates.format(new Date()) + ": " + getClass().getSimpleName()); return ExecuteResult.success(); } diff --git a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/PrimeAccumulateJobHandler.java b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/PrimeAccumulateJobHandler.java index a572d209..77eb7aae 100644 --- a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/PrimeAccumulateJobHandler.java +++ b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/PrimeAccumulateJobHandler.java @@ -20,7 +20,7 @@ import cn.ponfee.disjob.common.util.Jsons; import cn.ponfee.disjob.core.enums.RunState; import cn.ponfee.disjob.core.model.AbstractExecutionTask; import cn.ponfee.disjob.worker.handle.ExecuteResult; -import cn.ponfee.disjob.worker.handle.ExecutingTask; +import cn.ponfee.disjob.worker.handle.ExecuteTask; import cn.ponfee.disjob.worker.handle.JobHandler; import cn.ponfee.disjob.worker.handle.Savepoint; import org.springframework.util.Assert; @@ -41,8 +41,8 @@ public class PrimeAccumulateJobHandler extends JobHandler { } @Override - public ExecuteResult execute(ExecutingTask executingTask, Savepoint savepoint) throws Exception { - long sum = executingTask.getWorkflowPredecessorNodes() + public ExecuteResult execute(ExecuteTask task, Savepoint savepoint) throws Exception { + long sum = task.getWorkflowPredecessorNodes() .stream() .peek(e -> Assert.state(RunState.FINISHED == e.getRunState(), "Previous instance unfinished: " + e.getInstanceId())) .flatMap(e -> e.getExecutedTasks().stream()) diff --git a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/PrimeCountJobHandler.java b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/PrimeCountJobHandler.java index 29daec5c..0b077bcd 100644 --- a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/PrimeCountJobHandler.java +++ b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/PrimeCountJobHandler.java @@ -20,7 +20,7 @@ import cn.ponfee.disjob.common.util.Jsons; import cn.ponfee.disjob.test.util.Prime; import cn.ponfee.disjob.worker.exception.PauseTaskException; import cn.ponfee.disjob.worker.handle.ExecuteResult; -import cn.ponfee.disjob.worker.handle.ExecutingTask; +import cn.ponfee.disjob.worker.handle.ExecuteTask; import cn.ponfee.disjob.worker.handle.JobHandler; import cn.ponfee.disjob.worker.handle.Savepoint; import lombok.Getter; @@ -84,13 +84,14 @@ public class PrimeCountJobHandler extends JobHandler { /** * 执行任务的逻辑实现 * + * @param task the execution task * @param savepoint the savepoint * @return execute result * @throws Exception if execute occur error */ @Override - public ExecuteResult execute(ExecutingTask executingTask, Savepoint savepoint) throws Exception { - TaskParam taskParam = Jsons.fromJson(executingTask.getTaskParam(), TaskParam.class); + public ExecuteResult execute(ExecuteTask task, Savepoint savepoint) throws Exception { + TaskParam taskParam = Jsons.fromJson(task.getTaskParam(), TaskParam.class); long start = taskParam.getStart(); long blockSize = taskParam.getBlockSize(); long step = taskParam.getStep(); @@ -101,10 +102,10 @@ public class PrimeCountJobHandler extends JobHandler { Assert.isTrue(n > 0, "N must be greater than zero."); ExecuteSnapshot execution; - if (StringUtils.isEmpty(executingTask.getExecuteSnapshot())) { + if (StringUtils.isEmpty(task.getExecuteSnapshot())) { execution = new ExecuteSnapshot(start); } else { - execution = Jsons.fromJson(executingTask.getExecuteSnapshot(), ExecuteSnapshot.class); + execution = Jsons.fromJson(task.getExecuteSnapshot(), ExecuteSnapshot.class); if (execution.getNext() == null || execution.isFinished()) { Assert.isTrue(execution.isFinished() && execution.getNext() == null, "Invalid execute snapshot data."); return ExecuteResult.success(); diff --git a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/TestBroadcastJobHandler.java b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/TestBroadcastJobHandler.java index 66c7ef19..8213a159 100644 --- a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/TestBroadcastJobHandler.java +++ b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/TestBroadcastJobHandler.java @@ -19,7 +19,7 @@ package cn.ponfee.disjob.test.handler; import cn.ponfee.disjob.common.date.Dates; import cn.ponfee.disjob.worker.handle.BroadcastJobHandler; import cn.ponfee.disjob.worker.handle.ExecuteResult; -import cn.ponfee.disjob.worker.handle.ExecutingTask; +import cn.ponfee.disjob.worker.handle.ExecuteTask; import cn.ponfee.disjob.worker.handle.Savepoint; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,14 +37,14 @@ public class TestBroadcastJobHandler extends BroadcastJobHandler { private static final Logger LOG = LoggerFactory.getLogger(TestBroadcastJobHandler.class); @Override - public void init(ExecutingTask executingTask) { + public void init(ExecuteTask task) { LOG.debug("Broadcast job init."); } @Override - public ExecuteResult execute(ExecutingTask executingTask, Savepoint savepoint) throws Exception { + public ExecuteResult execute(ExecuteTask task, Savepoint savepoint) throws Exception { Thread.sleep(5000 + ThreadLocalRandom.current().nextLong(10000)); - LOG.info("Broadcast job execute done: {}", executingTask.getTaskId()); + LOG.info("Broadcast job execute done: {}", task.getTaskId()); savepoint.save(Dates.format(new Date()) + ": " + getClass().getSimpleName()); return ExecuteResult.success(); } diff --git a/disjob-test/src/test/java/cn/ponfee/disjob/test/util/PrimeCountJobHandlerTest.java b/disjob-test/src/test/java/cn/ponfee/disjob/test/util/PrimeCountJobHandlerTest.java index bcc59b4d..39a077a9 100644 --- a/disjob-test/src/test/java/cn/ponfee/disjob/test/util/PrimeCountJobHandlerTest.java +++ b/disjob-test/src/test/java/cn/ponfee/disjob/test/util/PrimeCountJobHandlerTest.java @@ -19,7 +19,7 @@ package cn.ponfee.disjob.test.util; import cn.ponfee.disjob.common.util.Jsons; import cn.ponfee.disjob.core.model.SchedJob; import cn.ponfee.disjob.test.handler.PrimeCountJobHandler; -import cn.ponfee.disjob.worker.handle.ExecutingTask; +import cn.ponfee.disjob.worker.handle.ExecuteTask; import cn.ponfee.disjob.worker.handle.Savepoint; import org.junit.jupiter.api.Test; @@ -49,10 +49,10 @@ public class PrimeCountJobHandlerTest { System.out.println(Jsons.toJson(taskParams)); for (String taskParam : taskParams) { - ExecutingTask executingTask = new ExecutingTask(); - executingTask.setTaskId(System.nanoTime()); - executingTask.setTaskParam(taskParam); - jobHandler.execute(executingTask, Savepoint.DISCARD); + ExecuteTask task = new ExecuteTask(); + task.setTaskId(System.nanoTime()); + task.setTaskParam(taskParam); + jobHandler.execute(task, Savepoint.DISCARD); System.out.println("-------------------"); } } diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/WorkerThreadPool.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/WorkerThreadPool.java index 294fbe00..beac4d4e 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/WorkerThreadPool.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/WorkerThreadPool.java @@ -788,7 +788,7 @@ public class WorkerThreadPool extends Thread implements Closeable { } private void runTask(WorkerTask task) { - ExecutingTask executingTask; + ExecuteTask executeTask; try { // update database records start state(sched_instance, sched_task) // 这里存在调用超时,但实际supervisor启动task成功的情况 @@ -799,7 +799,7 @@ public class WorkerThreadPool extends Thread implements Closeable { LOG.warn("Start task failed: {}, {}", task, startTaskResult.getMessage()); return; } - executingTask = ExecutingTask.of(startTaskResult); + executeTask = ExecuteTask.of(startTaskResult); } catch (Throwable t) { LOG.warn("Start task error: " + task, t); if (task.getRouteStrategy() != RouteStrategy.BROADCAST) { @@ -825,7 +825,7 @@ public class WorkerThreadPool extends Thread implements Closeable { // 2、init try { - taskExecutor.init(executingTask); + taskExecutor.init(executeTask); LOG.info("Initiated sched task {}", task.getTaskId()); } catch (Throwable t) { LOG.error("Task init error: " + task, t); @@ -837,9 +837,9 @@ public class WorkerThreadPool extends Thread implements Closeable { // 3、execute try { ExecuteResult result; - Savepoint savepoint = new TaskSavepoint(executingTask.getTaskId()); + Savepoint savepoint = new TaskSavepoint(executeTask.getTaskId()); if (task.getExecuteTimeout() > 0) { - FutureTask futureTask = new FutureTask<>(() -> taskExecutor.execute(executingTask, savepoint)); + FutureTask futureTask = new FutureTask<>(() -> taskExecutor.execute(executeTask, savepoint)); String threadName = getClass().getSimpleName() + "#FutureTaskThread" + "-" + FUTURE_TASK_NAMED_SEQ.getAndIncrement(); Thread futureTaskThread = Threads.newThread(threadName, true, Thread.NORM_PRIORITY, futureTask, LOG); futureTaskThread.start(); @@ -849,7 +849,7 @@ public class WorkerThreadPool extends Thread implements Closeable { Threads.stopThread(futureTaskThread, 0); } } else { - result = taskExecutor.execute(executingTask, savepoint); + result = taskExecutor.execute(executeTask, savepoint); } // 4、execute end diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/ExecutingTask.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/ExecuteTask.java similarity index 91% rename from disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/ExecutingTask.java rename to disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/ExecuteTask.java index 15747a9a..452daeb5 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/ExecutingTask.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/ExecuteTask.java @@ -25,13 +25,13 @@ import lombok.Setter; import java.util.List; /** - * Executing task + * The execution task * * @author Ponfee */ @Getter @Setter -public class ExecutingTask extends AbstractExecutionTask { +public class ExecuteTask extends AbstractExecutionTask { private static final long serialVersionUID = 8910065837652403459L; /** @@ -60,12 +60,12 @@ public class ExecutingTask extends AbstractExecutionTask { */ private List workflowPredecessorNodes; - public static ExecutingTask of(StartTaskResult source) { + public static ExecuteTask of(StartTaskResult source) { if (source == null) { return null; } - ExecutingTask target = new ExecutingTask(); + ExecuteTask target = new ExecuteTask(); target.setTaskId(source.getTaskId()); target.setTaskNo(source.getTaskNo()); target.setTaskCount(source.getTaskCount()); diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/JobHandlerUtils.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/JobHandlerUtils.java index c54e9ba9..5e000c49 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/JobHandlerUtils.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/JobHandlerUtils.java @@ -140,7 +140,7 @@ public class JobHandlerUtils { } } - public static ExecuteResult completeProcess(Process process, Charset charset, ExecutingTask executingTask, Logger log) { + public static ExecuteResult completeProcess(Process process, Charset charset, ExecuteTask task, Logger log) { try (InputStream is = process.getInputStream(); InputStream es = process.getErrorStream()) { // 一次性获取全部执行结果信息:不是在控制台实时展示执行信息,所以此处不用通过异步线程去获取命令的实时执行信息 String verbose = IOUtils.toString(is, charset); @@ -152,7 +152,7 @@ public class JobHandlerUtils { return ExecuteResult.failure(JobCodeMsg.JOB_EXECUTE_FAILED.getCode(), code + ": " + error); } } catch (Throwable t) { - log.error("Process execute error: " + executingTask, t); + log.error("Process execute error: " + task, t); Threads.interruptIfNecessary(t); return ExecuteResult.failure(JobCodeMsg.JOB_EXECUTE_ERROR.getCode(), Throwables.getRootCauseMessage(t)); } finally { diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/TaskExecutor.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/TaskExecutor.java index 0b8e88fe..9f07005b 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/TaskExecutor.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/TaskExecutor.java @@ -52,20 +52,20 @@ public abstract class TaskExecutor { /** * Initializes task * - * @param task the executing task + * @param task the execution task * @throws Exception if init failed */ - public void init(ExecutingTask task) throws Exception { } + public void init(ExecuteTask task) throws Exception { } /** * Executes task * - * @param task the executing task + * @param task the execution task * @param savepoint the savepoint * @return execute result * @throws Exception if execute failed */ - public abstract ExecuteResult execute(ExecutingTask task, Savepoint savepoint) throws Exception; + public abstract ExecuteResult execute(ExecuteTask task, Savepoint savepoint) throws Exception; /** * Destroy this task executor diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/impl/CommandJobHandler.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/impl/CommandJobHandler.java index 79f1d752..61739370 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/impl/CommandJobHandler.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/impl/CommandJobHandler.java @@ -67,8 +67,8 @@ public class CommandJobHandler extends JobHandler { } @Override - public ExecuteResult execute(ExecutingTask executingTask, Savepoint savepoint) throws Exception { - String taskParam = executingTask.getTaskParam(); + public ExecuteResult execute(ExecuteTask task, Savepoint savepoint) throws Exception { + String taskParam = task.getTaskParam(); Assert.hasText(taskParam, "Command param cannot be empty."); CommandParam commandParam = Jsons.JSON5.readValue(taskParam, CommandParam.class); Assert.notEmpty(commandParam.cmdarray, "Command array cannot be empty."); @@ -76,8 +76,8 @@ public class CommandJobHandler extends JobHandler { Process process = Runtime.getRuntime().exec(commandParam.cmdarray, commandParam.envp); this.pid = ProcessUtils.getProcessId(process); - LOG.info("Command process id: {}, {}", executingTask.getTaskId(), pid); - return JobHandlerUtils.completeProcess(process, charset, executingTask, LOG); + LOG.info("Command process id: {}, {}", task.getTaskId(), pid); + return JobHandlerUtils.completeProcess(process, charset, task, LOG); } @Getter diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/impl/GroovyJobHandler.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/impl/GroovyJobHandler.java index 74163bd8..ff47a997 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/impl/GroovyJobHandler.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/impl/GroovyJobHandler.java @@ -18,7 +18,7 @@ package cn.ponfee.disjob.worker.handle.impl; import cn.ponfee.disjob.common.util.GroovyUtils; import cn.ponfee.disjob.worker.handle.ExecuteResult; -import cn.ponfee.disjob.worker.handle.ExecutingTask; +import cn.ponfee.disjob.worker.handle.ExecuteTask; import cn.ponfee.disjob.worker.handle.JobHandler; import cn.ponfee.disjob.worker.handle.Savepoint; import com.google.common.collect.ImmutableMap; @@ -47,11 +47,11 @@ public class GroovyJobHandler extends JobHandler { public static final String SAVEPOINT = "savepoint"; @Override - public ExecuteResult execute(ExecutingTask executingTask, Savepoint savepoint) throws Exception { - String scriptText = executingTask.getTaskParam(); + public ExecuteResult execute(ExecuteTask task, Savepoint savepoint) throws Exception { + String scriptText = task.getTaskParam(); Map params = ImmutableMap.of( JOB_HANDLER, this, - EXECUTING_TASK, executingTask, + EXECUTING_TASK, task, SAVEPOINT, savepoint ); diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/impl/HttpJobHandler.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/impl/HttpJobHandler.java index b85d2e1e..00b3a3b7 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/impl/HttpJobHandler.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/impl/HttpJobHandler.java @@ -21,7 +21,7 @@ import cn.ponfee.disjob.common.spring.RestTemplateUtils; import cn.ponfee.disjob.common.util.Jsons; import cn.ponfee.disjob.core.base.JobCodeMsg; import cn.ponfee.disjob.worker.handle.ExecuteResult; -import cn.ponfee.disjob.worker.handle.ExecutingTask; +import cn.ponfee.disjob.worker.handle.ExecuteTask; import cn.ponfee.disjob.worker.handle.JobHandler; import cn.ponfee.disjob.worker.handle.Savepoint; import lombok.Getter; @@ -66,8 +66,8 @@ public class HttpJobHandler extends JobHandler { private static final RestTemplate REST_TEMPLATE = RestTemplateUtils.create(DEFAULT_CONNECT_TIMEOUT, DEFAULT_READ_TIMEOUT, null); @Override - public ExecuteResult execute(ExecutingTask executingTask, Savepoint savepoint) { - HttpJobRequest req = Jsons.fromJson(executingTask.getTaskParam(), HttpJobRequest.class); + public ExecuteResult execute(ExecuteTask task, Savepoint savepoint) { + HttpJobRequest req = Jsons.fromJson(task.getTaskParam(), HttpJobRequest.class); Assert.hasText(req.method, "Http method cannot be empty."); HttpMethod method = HttpMethod.valueOf(req.method.toUpperCase()); @@ -122,7 +122,7 @@ public class HttpJobHandler extends JobHandler { return ExecuteResult.failure(JobCodeMsg.JOB_EXECUTE_FAILED.getCode(), status + ": " + body); } } catch (Throwable t) { - LOG.error("Http request error: " + executingTask, t); + LOG.error("Http request error: " + task, t); return ExecuteResult.failure(JobCodeMsg.JOB_EXECUTE_ERROR.getCode(), Throwables.getRootCauseMessage(t)); } } diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/impl/ScriptJobHandler.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/impl/ScriptJobHandler.java index 7831db30..3b23e179 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/impl/ScriptJobHandler.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/impl/ScriptJobHandler.java @@ -74,20 +74,20 @@ public class ScriptJobHandler extends JobHandler { } @Override - public ExecuteResult execute(ExecutingTask executingTask, Savepoint savepoint) throws Exception { - ScriptParam scriptParam = Jsons.JSON5.readValue(executingTask.getTaskParam(), ScriptParam.class); + public ExecuteResult execute(ExecuteTask task, Savepoint savepoint) throws Exception { + ScriptParam scriptParam = Jsons.JSON5.readValue(task.getTaskParam(), ScriptParam.class); Assert.notNull(scriptParam, () -> "Invalid script param: " + scriptParam); Assert.notNull(scriptParam.type, () -> "Script type cannot be null: " + scriptParam); scriptParam.type.check(); this.charset = Files.charset(scriptParam.charset); - String scriptFileName = scriptParam.type.buildFileName(executingTask.getTaskId()); + String scriptFileName = scriptParam.type.buildFileName(task.getTaskId()); String scriptPath = prepareScriptFile(scriptParam.script, scriptFileName, charset); Process process = scriptParam.type.exec(scriptPath, scriptParam.envp); this.pid = ProcessUtils.getProcessId(process); - LOG.info("Script process id: {}, {}", executingTask.getTaskId(), pid); - return JobHandlerUtils.completeProcess(process, charset, executingTask, LOG); + LOG.info("Script process id: {}, {}", task.getTaskId(), pid); + return JobHandlerUtils.completeProcess(process, charset, task, LOG); } public enum ScriptType { diff --git a/disjob-worker/src/test/java/cn/ponfee/disjob/worker/handle/CommandJobHandlerTest.java b/disjob-worker/src/test/java/cn/ponfee/disjob/worker/handle/CommandJobHandlerTest.java index 58c3d81e..5d5120cb 100644 --- a/disjob-worker/src/test/java/cn/ponfee/disjob/worker/handle/CommandJobHandlerTest.java +++ b/disjob-worker/src/test/java/cn/ponfee/disjob/worker/handle/CommandJobHandlerTest.java @@ -36,16 +36,16 @@ public class CommandJobHandlerTest { return; } - ExecutingTask executingTask = new ExecutingTask(); - executingTask.setTaskId(1L); + ExecuteTask task = new ExecuteTask(); + task.setTaskId(1L); CommandJobHandler.CommandParam commandParam = new CommandJobHandler.CommandParam(); commandParam.setCmdarray(new String[]{"/bin/sh", "-c", "echo $(date +%Y/%m/%d)"}); - executingTask.setTaskParam(Jsons.toJson(commandParam)); + task.setTaskParam(Jsons.toJson(commandParam)); CommandJobHandler commandJobHandler = new CommandJobHandler(); - ExecuteResult result = commandJobHandler.execute(executingTask, Savepoint.DISCARD); + ExecuteResult result = commandJobHandler.execute(task, Savepoint.DISCARD); String expect = "{\"code\":0,\"msg\":\"" + Dates.format(new Date(), "yyyy/MM/dd") + "\\n\"}"; Assertions.assertEquals(expect, Jsons.toJson(result)); diff --git a/disjob-worker/src/test/java/cn/ponfee/disjob/worker/handle/HttpJobHandlerTest.java b/disjob-worker/src/test/java/cn/ponfee/disjob/worker/handle/HttpJobHandlerTest.java index 5a848809..897b5ff2 100644 --- a/disjob-worker/src/test/java/cn/ponfee/disjob/worker/handle/HttpJobHandlerTest.java +++ b/disjob-worker/src/test/java/cn/ponfee/disjob/worker/handle/HttpJobHandlerTest.java @@ -30,15 +30,15 @@ public class HttpJobHandlerTest { @Test public void testHttpJobHandler() { - ExecutingTask executingTask = new ExecutingTask(); - executingTask.setTaskId(1L); + ExecuteTask task = new ExecuteTask(); + task.setTaskId(1L); HttpJobHandler.HttpJobRequest req = new HttpJobHandler.HttpJobRequest(); req.setMethod("GET"); req.setUrl("https://www.baidu.com"); - executingTask.setTaskParam(Jsons.toJson(req)); + task.setTaskParam(Jsons.toJson(req)); HttpJobHandler httpJobHandler = new HttpJobHandler(); - ExecuteResult result = httpJobHandler.execute(executingTask, Savepoint.DISCARD); + ExecuteResult result = httpJobHandler.execute(task, Savepoint.DISCARD); System.out.println(Jsons.toJson(result)); Assertions.assertTrue(result.isSuccess()); } diff --git a/disjob-worker/src/test/java/cn/ponfee/disjob/worker/handle/ScriptJobHandlerTest.java b/disjob-worker/src/test/java/cn/ponfee/disjob/worker/handle/ScriptJobHandlerTest.java index 5a4f244a..213e475b 100644 --- a/disjob-worker/src/test/java/cn/ponfee/disjob/worker/handle/ScriptJobHandlerTest.java +++ b/disjob-worker/src/test/java/cn/ponfee/disjob/worker/handle/ScriptJobHandlerTest.java @@ -42,13 +42,13 @@ public class ScriptJobHandlerTest { scriptParam.setType(ScriptJobHandler.ScriptType.SHELL); scriptParam.setScript("#!/bin/sh\necho \"hello, shell!\"\n"); - ExecutingTask executingTask = new ExecutingTask(); - executingTask.setTaskId(1L); - executingTask.setTaskParam(Jsons.toJson(scriptParam)); + ExecuteTask task = new ExecuteTask(); + task.setTaskId(1L); + task.setTaskParam(Jsons.toJson(scriptParam)); ScriptJobHandler scriptJobHandler = new ScriptJobHandler(); - ExecuteResult execute = scriptJobHandler.execute(executingTask, Savepoint.DISCARD); + ExecuteResult execute = scriptJobHandler.execute(task, Savepoint.DISCARD); Assertions.assertEquals("{\"code\":0,\"msg\":\"hello, shell!\\n\"}", Jsons.toJson(execute)); } @@ -59,13 +59,13 @@ public class ScriptJobHandlerTest { scriptParam.setType(ScriptJobHandler.ScriptType.PYTHON); scriptParam.setScript("print('hello, python!')\n"); - ExecutingTask executingTask = new ExecutingTask(); - executingTask.setTaskId(1L); - executingTask.setTaskParam(Jsons.toJson(scriptParam)); + ExecuteTask task = new ExecuteTask(); + task.setTaskId(1L); + task.setTaskParam(Jsons.toJson(scriptParam)); ScriptJobHandler scriptJobHandler = new ScriptJobHandler(); - ExecuteResult execute = scriptJobHandler.execute(executingTask, Savepoint.DISCARD); + ExecuteResult execute = scriptJobHandler.execute(task, Savepoint.DISCARD); Assertions.assertEquals("{\"code\":0,\"msg\":\"OK\",\"data\":\"hello, python!\\n\"}", Jsons.toJson(execute)); } -- Gitee From f7a61b85f29cff3c3a137f738e81d6af2428eb44 Mon Sep 17 00:00:00 2001 From: Ponfee Date: Wed, 22 May 2024 19:57:35 +0800 Subject: [PATCH 06/19] optimize code --- .../PredecessorInstance.java} | 54 +++++---------- .../PredecessorTask.java} | 15 ++-- .../core/dto/supervisor/StartTaskResult.java | 68 ++++++++++++------- .../component/DistributedJobManager.java | 13 ++-- .../handler/PrimeAccumulateJobHandler.java | 8 +-- .../worker/configuration/EnableWorker.java | 11 ++- .../worker/exception/CancelTaskException.java | 2 +- .../worker/exception/PauseTaskException.java | 2 +- .../disjob/worker/handle/ExecuteTask.java | 33 +++++++-- .../worker/handle/impl/GroovyJobHandler.java | 4 +- 10 files changed, 122 insertions(+), 88 deletions(-) rename disjob-core/src/main/java/cn/ponfee/disjob/core/{model/WorkflowPredecessorNode.java => dag/PredecessorInstance.java} (52%) rename disjob-core/src/main/java/cn/ponfee/disjob/core/{model/AbstractExecutionTask.java => dag/PredecessorTask.java} (76%) diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/model/WorkflowPredecessorNode.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/dag/PredecessorInstance.java similarity index 52% rename from disjob-core/src/main/java/cn/ponfee/disjob/core/model/WorkflowPredecessorNode.java rename to disjob-core/src/main/java/cn/ponfee/disjob/core/dag/PredecessorInstance.java index 3ee07be7..48c57623 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/model/WorkflowPredecessorNode.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/dag/PredecessorInstance.java @@ -14,70 +14,50 @@ * limitations under the License. */ -package cn.ponfee.disjob.core.model; +package cn.ponfee.disjob.core.dag; import cn.ponfee.disjob.common.base.ToJsonString; +import cn.ponfee.disjob.common.collect.Collects; import cn.ponfee.disjob.core.enums.ExecuteState; import cn.ponfee.disjob.core.enums.RunState; +import cn.ponfee.disjob.core.model.SchedTask; +import cn.ponfee.disjob.core.model.SchedWorkflow; import lombok.Getter; import lombok.Setter; import java.io.Serializable; import java.util.List; -import java.util.stream.Collectors; /** - * Workflow predecessor node + * Workflow dag predecessor instance * * @author Ponfee */ @Getter @Setter -public class WorkflowPredecessorNode extends ToJsonString implements Serializable { +public class PredecessorInstance extends ToJsonString implements Serializable { private static final long serialVersionUID = 422243686633743869L; private long instanceId; private int sequence; private String curNode; private RunState runState; - private List executedTasks; + private List tasks; - public static WorkflowPredecessorNode of(SchedWorkflow workflow, List tasks) { - WorkflowPredecessorNode node = new WorkflowPredecessorNode(); - node.setInstanceId(workflow.getInstanceId()); - node.setSequence(workflow.getSequence()); - node.setCurNode(workflow.getCurNode()); - node.setRunState(RunState.of(workflow.getRunState())); - node.setExecutedTasks(convert(tasks)); - return node; - } - - @Getter - @Setter - public static class ExecutedTask extends AbstractExecutionTask { - private static final long serialVersionUID = -4625053001297718912L; - - /** - * 执行状态 - */ - private ExecuteState executeState; + public static PredecessorInstance of(SchedWorkflow workflow, List tasks) { + PredecessorInstance instance = new PredecessorInstance(); + instance.setInstanceId(workflow.getInstanceId()); + instance.setSequence(workflow.getSequence()); + instance.setCurNode(workflow.getCurNode()); + instance.setRunState(RunState.of(workflow.getRunState())); + instance.setTasks(Collects.convert(tasks, PredecessorInstance::convert)); + return instance; } // ----------------------------------------------------------------------private methods - private static List convert(List tasks) { - if (tasks == null) { - return null; - } - return tasks.stream().map(WorkflowPredecessorNode::convert).collect(Collectors.toList()); - } - - private static ExecutedTask convert(SchedTask source) { - if (source == null) { - return null; - } - - ExecutedTask target = new ExecutedTask(); + private static PredecessorTask convert(SchedTask source) { + PredecessorTask target = new PredecessorTask(); target.setTaskId(source.getTaskId()); target.setTaskNo(source.getTaskNo()); target.setTaskCount(source.getTaskCount()); diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/model/AbstractExecutionTask.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/dag/PredecessorTask.java similarity index 76% rename from disjob-core/src/main/java/cn/ponfee/disjob/core/model/AbstractExecutionTask.java rename to disjob-core/src/main/java/cn/ponfee/disjob/core/dag/PredecessorTask.java index 7dacca46..d0dcc7ec 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/model/AbstractExecutionTask.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/dag/PredecessorTask.java @@ -14,23 +14,24 @@ * limitations under the License. */ -package cn.ponfee.disjob.core.model; +package cn.ponfee.disjob.core.dag; import cn.ponfee.disjob.common.base.ToJsonString; +import cn.ponfee.disjob.core.enums.ExecuteState; import lombok.Getter; import lombok.Setter; import java.io.Serializable; /** - * Abstract execution task + * Workflow dag predecessor task * * @author Ponfee */ @Getter @Setter -public abstract class AbstractExecutionTask extends ToJsonString implements Serializable { - private static final long serialVersionUID = 6002495716472663520L; +public class PredecessorTask extends ToJsonString implements Serializable { + private static final long serialVersionUID = -4625053001297718912L; /** * 任务ID @@ -47,9 +48,13 @@ public abstract class AbstractExecutionTask extends ToJsonString implements Seri */ private int taskCount; + /** + * 执行状态 + */ + private ExecuteState executeState; + /** * 保存的执行快照数据 */ private String executeSnapshot; - } diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/supervisor/StartTaskResult.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/supervisor/StartTaskResult.java index 010a2174..a3a78f5a 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/supervisor/StartTaskResult.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/dto/supervisor/StartTaskResult.java @@ -16,12 +16,13 @@ package cn.ponfee.disjob.core.dto.supervisor; -import cn.ponfee.disjob.core.model.AbstractExecutionTask; +import cn.ponfee.disjob.common.base.ToJsonString; +import cn.ponfee.disjob.core.dag.PredecessorInstance; import cn.ponfee.disjob.core.model.SchedTask; -import cn.ponfee.disjob.core.model.WorkflowPredecessorNode; import lombok.Getter; import lombok.Setter; +import java.io.Serializable; import java.util.List; /** @@ -31,7 +32,7 @@ import java.util.List; */ @Setter @Getter -public class StartTaskResult extends AbstractExecutionTask { +public class StartTaskResult extends ToJsonString implements Serializable { private static final long serialVersionUID = 2873837797283062411L; @@ -61,37 +62,58 @@ public class StartTaskResult extends AbstractExecutionTask { */ private Long wnstanceId; + /** + * 任务ID + */ + private long taskId; + + /** + * 当前任务序号(从1开始) + */ + private int taskNo; + + /** + * 任务总数量 + */ + private int taskCount; + /** * job_handler执行task的参数 */ private String taskParam; /** - * 工作流(DAG)任务的前驱节点列表数据 + * 保存的执行快照数据 + */ + private String executeSnapshot; + + /** + * 工作流(DAG)任务的前驱节点实例列表 */ - private List workflowPredecessorNodes; + private List predecessorInstances; public static StartTaskResult failure(String message) { - StartTaskResult res = new StartTaskResult(); - res.setSuccess(false); - res.setMessage(message); - return res; + StartTaskResult result = new StartTaskResult(); + result.setSuccess(false); + result.setMessage(message); + return result; } - public static StartTaskResult success(long jobId, Long wnstanceId, SchedTask task, List nodes) { - StartTaskResult res = new StartTaskResult(); - res.setSuccess(true); - res.setTaskId(task.getTaskId()); - res.setTaskNo(task.getTaskNo()); - res.setTaskCount(task.getTaskCount()); - res.setExecuteSnapshot(task.getExecuteSnapshot()); - - res.setJobId(jobId); - res.setInstanceId(task.getInstanceId()); - res.setWnstanceId(wnstanceId); - res.setTaskParam(task.getTaskParam()); - res.setWorkflowPredecessorNodes(nodes); - return res; + public static StartTaskResult success(long jobId, Long wnstanceId, SchedTask task, + List predecessorInstances) { + StartTaskResult result = new StartTaskResult(); + result.setSuccess(true); + result.setTaskId(task.getTaskId()); + result.setTaskNo(task.getTaskNo()); + result.setTaskCount(task.getTaskCount()); + result.setExecuteSnapshot(task.getExecuteSnapshot()); + + result.setJobId(jobId); + result.setInstanceId(task.getInstanceId()); + result.setWnstanceId(wnstanceId); + result.setTaskParam(task.getTaskParam()); + result.setPredecessorInstances(predecessorInstances); + return result; } } diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/DistributedJobManager.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/DistributedJobManager.java index 789adb5d..371a6a38 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/DistributedJobManager.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/DistributedJobManager.java @@ -30,6 +30,7 @@ import cn.ponfee.disjob.common.util.Strings; import cn.ponfee.disjob.core.base.JobConstants; import cn.ponfee.disjob.core.base.Worker; import cn.ponfee.disjob.core.base.WorkerRpcService; +import cn.ponfee.disjob.core.dag.PredecessorInstance; import cn.ponfee.disjob.core.dto.supervisor.StartTaskParam; import cn.ponfee.disjob.core.dto.supervisor.StartTaskResult; import cn.ponfee.disjob.core.dto.supervisor.TerminateTaskParam; @@ -236,11 +237,11 @@ public class DistributedJobManager extends AbstractJobManager { return StartTaskResult.failure("Task stat failed"); } SchedTask task = taskMapper.get(param.getTaskId()); - List nodes = null; + List predecessorInstances = null; if (param.getJobType() == JobType.WORKFLOW) { - nodes = findWorkflowPredecessorNodes(instance.getWnstanceId(), task.getInstanceId()); + predecessorInstances = findPredecessorInstances(instance.getWnstanceId(), task.getInstanceId()); } - return StartTaskResult.success(instance.getJobId(), instance.getWnstanceId(), task, nodes); + return StartTaskResult.success(instance.getJobId(), instance.getWnstanceId(), task, predecessorInstances); }); } @@ -1019,7 +1020,7 @@ public class DistributedJobManager extends AbstractJobManager { return Tuple3.of(job, instance, waitingTasks); } - private List findWorkflowPredecessorNodes(long wnstanceId, long instanceId) { + private List findPredecessorInstances(long wnstanceId, long instanceId) { List workflows = workflowMapper.findByWnstanceId(wnstanceId); if (CollectionUtils.isEmpty(workflows)) { return null; @@ -1050,9 +1051,9 @@ public class DistributedJobManager extends AbstractJobManager { .map(e -> { List tasks = taskMapper.findLargeByInstanceId(e.getInstanceId()); tasks.sort(Comparator.comparing(SchedTask::getTaskNo)); - return WorkflowPredecessorNode.of(e, tasks); + return PredecessorInstance.of(e, tasks); }) - .sorted(Comparator.comparing(WorkflowPredecessorNode::getSequence)) + .sorted(Comparator.comparing(PredecessorInstance::getSequence)) .collect(Collectors.toList()); } diff --git a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/PrimeAccumulateJobHandler.java b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/PrimeAccumulateJobHandler.java index 77eb7aae..1b8a4f02 100644 --- a/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/PrimeAccumulateJobHandler.java +++ b/disjob-test/src/main/java/cn/ponfee/disjob/test/handler/PrimeAccumulateJobHandler.java @@ -17,8 +17,8 @@ package cn.ponfee.disjob.test.handler; import cn.ponfee.disjob.common.util.Jsons; +import cn.ponfee.disjob.core.dag.PredecessorTask; import cn.ponfee.disjob.core.enums.RunState; -import cn.ponfee.disjob.core.model.AbstractExecutionTask; import cn.ponfee.disjob.worker.handle.ExecuteResult; import cn.ponfee.disjob.worker.handle.ExecuteTask; import cn.ponfee.disjob.worker.handle.JobHandler; @@ -42,11 +42,11 @@ public class PrimeAccumulateJobHandler extends JobHandler { @Override public ExecuteResult execute(ExecuteTask task, Savepoint savepoint) throws Exception { - long sum = task.getWorkflowPredecessorNodes() + long sum = task.getPredecessorInstances() .stream() .peek(e -> Assert.state(RunState.FINISHED == e.getRunState(), "Previous instance unfinished: " + e.getInstanceId())) - .flatMap(e -> e.getExecutedTasks().stream()) - .map(AbstractExecutionTask::getExecuteSnapshot) + .flatMap(e -> e.getTasks().stream()) + .map(PredecessorTask::getExecuteSnapshot) .map(e -> Jsons.fromJson(e, PrimeCountJobHandler.ExecuteSnapshot.class)) .mapToLong(PrimeCountJobHandler.ExecuteSnapshot::getCount) .sum(); diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/configuration/EnableWorker.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/configuration/EnableWorker.java index f43e2d13..dedefed0 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/configuration/EnableWorker.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/configuration/EnableWorker.java @@ -22,15 +22,16 @@ import cn.ponfee.disjob.common.util.UuidUtils; import cn.ponfee.disjob.core.base.DisjobCoreDeferredImportSelector; import cn.ponfee.disjob.core.base.JobConstants; import cn.ponfee.disjob.core.base.Worker; +import cn.ponfee.disjob.core.base.WorkerRpcService; import cn.ponfee.disjob.core.util.DisjobUtils; -import cn.ponfee.disjob.worker.WorkerStartup; +import cn.ponfee.disjob.registry.WorkerRegistry; import cn.ponfee.disjob.worker.base.TaskTimingWheel; import cn.ponfee.disjob.worker.configuration.EnableWorker.EnableWorkerConfiguration; +import cn.ponfee.disjob.worker.provider.WorkerRpcProvider; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.context.WebServerApplicationContext; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.DependsOn; import org.springframework.context.annotation.Import; @@ -53,7 +54,6 @@ import java.lang.annotation.*; public @interface EnableWorker { @EnableConfigurationProperties(WorkerProperties.class) - @ComponentScan(basePackageClasses = WorkerStartup.class) class EnableWorkerConfiguration { @Bean(JobConstants.SPRING_BEAN_NAME_TIMING_WHEEL) @@ -82,6 +82,11 @@ public @interface EnableWorker { throw new Error("Setting as current worker occur error.", e); } } + + @Bean + public WorkerRpcService workerRpcService(Worker.Current currentWork, WorkerRegistry workerRegistry) { + return new WorkerRpcProvider(currentWork, workerRegistry); + } } } diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/exception/CancelTaskException.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/exception/CancelTaskException.java index 160ecf13..3b0782f0 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/exception/CancelTaskException.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/exception/CancelTaskException.java @@ -17,7 +17,7 @@ package cn.ponfee.disjob.worker.exception; /** - * Executing task failure then should be canceling. + * Exception for cancel the executing task. * * @author Ponfee */ diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/exception/PauseTaskException.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/exception/PauseTaskException.java index 2a1ec6ae..771d780e 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/exception/PauseTaskException.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/exception/PauseTaskException.java @@ -17,7 +17,7 @@ package cn.ponfee.disjob.worker.exception; /** - * Executing task failure then should be pausing. + * Exception for pause the executing task. * * @author Ponfee */ diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/ExecuteTask.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/ExecuteTask.java index 452daeb5..6592d1ce 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/ExecuteTask.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/ExecuteTask.java @@ -16,12 +16,13 @@ package cn.ponfee.disjob.worker.handle; +import cn.ponfee.disjob.common.base.ToJsonString; +import cn.ponfee.disjob.core.dag.PredecessorInstance; import cn.ponfee.disjob.core.dto.supervisor.StartTaskResult; -import cn.ponfee.disjob.core.model.AbstractExecutionTask; -import cn.ponfee.disjob.core.model.WorkflowPredecessorNode; import lombok.Getter; import lombok.Setter; +import java.io.Serializable; import java.util.List; /** @@ -31,7 +32,7 @@ import java.util.List; */ @Getter @Setter -public class ExecuteTask extends AbstractExecutionTask { +public class ExecuteTask extends ToJsonString implements Serializable { private static final long serialVersionUID = 8910065837652403459L; /** @@ -50,15 +51,35 @@ public class ExecuteTask extends AbstractExecutionTask { */ private Long wnstanceId; + /** + * 任务ID + */ + private long taskId; + + /** + * 当前任务序号(从1开始) + */ + private int taskNo; + + /** + * 任务总数量 + */ + private int taskCount; + /** * job_handler执行task的参数 */ private String taskParam; /** - * 工作流(DAG)任务的前驱节点列表数据 + * 保存的执行快照数据 + */ + private String executeSnapshot; + + /** + * 工作流(DAG)任务的前驱节点实例列表 */ - private List workflowPredecessorNodes; + private List predecessorInstances; public static ExecuteTask of(StartTaskResult source) { if (source == null) { @@ -75,7 +96,7 @@ public class ExecuteTask extends AbstractExecutionTask { target.setInstanceId(source.getInstanceId()); target.setWnstanceId(source.getWnstanceId()); target.setTaskParam(source.getTaskParam()); - target.setWorkflowPredecessorNodes(source.getWorkflowPredecessorNodes()); + target.setPredecessorInstances(source.getPredecessorInstances()); return target; } diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/impl/GroovyJobHandler.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/impl/GroovyJobHandler.java index ff47a997..4d7c2994 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/impl/GroovyJobHandler.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/handle/impl/GroovyJobHandler.java @@ -35,7 +35,7 @@ import java.util.Objects; * import java.util.* * def uuid = UUID.randomUUID().toString() * savepoint.save(new Date().toString() + ": " + uuid) - * return "taskId: " + executingTask.getTaskId() + ", execute at: " + new Date() + ", " + jobHandler.toString() + * return "taskId: " + executeTask.getTaskId() + ", execute at: " + new Date() + ", " + jobHandler.toString() * } * * @author Ponfee @@ -43,7 +43,7 @@ import java.util.Objects; public class GroovyJobHandler extends JobHandler { public static final String JOB_HANDLER = "jobHandler"; - public static final String EXECUTING_TASK = "executingTask"; + public static final String EXECUTING_TASK = "executeTask"; public static final String SAVEPOINT = "savepoint"; @Override -- Gitee From 41cd8285a4427a844b8772d06d35c90321a6b71c Mon Sep 17 00:00:00 2001 From: Ponfee Date: Thu, 23 May 2024 20:56:58 +0800 Subject: [PATCH 07/19] ProxyUtils add spring cglib --- .../ponfee/disjob/common/base/LazyLoader.java | 2 -- .../ponfee/disjob/common/util/ProxyUtils.java | 35 ++++++++++++++++--- .../dispatch/http/HttpTaskDispatcher.java | 6 ++-- .../dispatch/redis/RedisTaskDispatcher.java | 4 +-- .../rpc/DestinationServerRestProxy.java | 6 ++-- .../rpc/DiscoveryServerRestProxy.java | 16 ++++----- 6 files changed, 46 insertions(+), 23 deletions(-) diff --git a/disjob-common/src/main/java/cn/ponfee/disjob/common/base/LazyLoader.java b/disjob-common/src/main/java/cn/ponfee/disjob/common/base/LazyLoader.java index 417b5643..82bcf1c4 100644 --- a/disjob-common/src/main/java/cn/ponfee/disjob/common/base/LazyLoader.java +++ b/disjob-common/src/main/java/cn/ponfee/disjob/common/base/LazyLoader.java @@ -96,8 +96,6 @@ public class LazyLoader implements Supplier { private static R of(Class type, final LazyLoader lazyLoader) { Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(type); - enhancer.setUseCache(true); - enhancer.setInterceptDuringConstruction(false); //enhancer.setCallback(org.springframework.cglib.proxy.Proxy.getInvocationHandler(proxy)); // occur error //enhancer.setCallback((org.springframework.cglib.proxy.MethodInterceptor) (beanProxy, method, args, methodProxy) -> method.invoke(lazyLoader.get(), args)); enhancer.setCallback((InvocationHandler) (beanProxy, method, args) -> method.invoke(lazyLoader.get(), args)); diff --git a/disjob-common/src/main/java/cn/ponfee/disjob/common/util/ProxyUtils.java b/disjob-common/src/main/java/cn/ponfee/disjob/common/util/ProxyUtils.java index d4b8eeb4..3624e753 100644 --- a/disjob-common/src/main/java/cn/ponfee/disjob/common/util/ProxyUtils.java +++ b/disjob-common/src/main/java/cn/ponfee/disjob/common/util/ProxyUtils.java @@ -19,6 +19,7 @@ package cn.ponfee.disjob.common.util; import org.springframework.aop.framework.Advised; import org.springframework.aop.framework.AdvisedSupport; import org.springframework.aop.support.AopUtils; +import org.springframework.cglib.proxy.Enhancer; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; @@ -31,15 +32,39 @@ import java.lang.reflect.Proxy; public final class ProxyUtils { /** - * Creates jdk proxy instance + * Creates proxy instance based jdk * - * @param invocationHandler jdk invocation handler - * @param interfaceTypes the interface class array + * @param invocationHandler the jdk invocation handler + * @param interfaces the interface class array * @param the interface type * @return jdk proxy instance */ - public static T create(InvocationHandler invocationHandler, Class... interfaceTypes) { - return (T) Proxy.newProxyInstance(interfaceTypes[0].getClassLoader(), interfaceTypes, invocationHandler); + public static T create(InvocationHandler invocationHandler, Class... interfaces) { + return (T) Proxy.newProxyInstance(interfaces[0].getClassLoader(), interfaces, invocationHandler); + } + + /** + * Creates proxy instance based cglib + *

需要默认的无参构造函数 + * + * @param invocationHandler the spring cglib invocation handler + * @param superClass the super class + * @param the super class type + * @return cglib proxy instance + */ + public static T create(org.springframework.cglib.proxy.InvocationHandler invocationHandler, Class superClass) { + Enhancer enhancer = new Enhancer(); + enhancer.setSuperclass(superClass); + enhancer.setCallback(invocationHandler); + return (T) enhancer.create(); + } + + public static T create(H invocationHandler, Class cls) { + if (cls.isInterface()) { + return create((InvocationHandler) invocationHandler, cls); + } else { + return create((org.springframework.cglib.proxy.InvocationHandler) invocationHandler, cls); + } } /** diff --git a/disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/HttpTaskDispatcher.java b/disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/HttpTaskDispatcher.java index b13a0bcf..c9d2b1ba 100644 --- a/disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/HttpTaskDispatcher.java +++ b/disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/HttpTaskDispatcher.java @@ -43,14 +43,14 @@ public class HttpTaskDispatcher extends TaskDispatcher { Discovery discoveryWorker, RetryProperties retryProperties, RestTemplate restTemplate, - HttpTaskReceiver taskReceiver) { - super(eventPublisher, discoveryWorker, retryProperties, taskReceiver); + HttpTaskReceiver httpTaskReceiver) { + super(eventPublisher, discoveryWorker, retryProperties, httpTaskReceiver); Function workerContextPath = worker -> Supervisor.current().getWorkerContextPath(worker.getGroup()); RetryProperties retry = RetryProperties.of(0, 0); // `TaskDispatcher#dispatch0`内部有处理本地worker的分派逻辑,这里不需要本地的HttpTaskReceiverService,所以传null this.httpTaskReceiverClient = create(HttpTaskReceiverService.class, null, null, workerContextPath, restTemplate, retry); - //this.httpTaskReceiverClient = create(HttpTaskReceiverService.class, httpTaskReceiverService, Worker.current(), workerContextPath, restTemplate, retry); + //this.httpTaskReceiverClient = create(HttpTaskReceiverService.class, httpTaskReceiver, Worker.current(), workerContextPath, restTemplate, retry); } @Override diff --git a/disjob-dispatch/disjob-dispatch-redis/src/main/java/cn/ponfee/disjob/dispatch/redis/RedisTaskDispatcher.java b/disjob-dispatch/disjob-dispatch-redis/src/main/java/cn/ponfee/disjob/dispatch/redis/RedisTaskDispatcher.java index 2d1d338e..236b031a 100644 --- a/disjob-dispatch/disjob-dispatch-redis/src/main/java/cn/ponfee/disjob/dispatch/redis/RedisTaskDispatcher.java +++ b/disjob-dispatch/disjob-dispatch-redis/src/main/java/cn/ponfee/disjob/dispatch/redis/RedisTaskDispatcher.java @@ -51,8 +51,8 @@ public class RedisTaskDispatcher extends TaskDispatcher { Discovery discoveryWorker, RetryProperties retryProperties, RedisTemplate redisTemplate, - RedisTaskReceiver taskReceiver) { - super(eventPublisher, discoveryWorker, retryProperties, taskReceiver); + RedisTaskReceiver redisTaskReceiver) { + super(eventPublisher, discoveryWorker, retryProperties, redisTaskReceiver); this.redisTemplate = redisTemplate; } diff --git a/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/DestinationServerRestProxy.java b/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/DestinationServerRestProxy.java index 4d171270..5cd29bfc 100644 --- a/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/DestinationServerRestProxy.java +++ b/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/DestinationServerRestProxy.java @@ -42,16 +42,16 @@ public final class DestinationServerRestProxy { private static final ThreadLocal SERVER_THREAD_LOCAL = new NamedThreadLocal<>("destination-server"); - public static DestinationServerInvoker create(Class interfaceType, + public static DestinationServerInvoker create(Class interfaceCls, @Nullable T localServiceProvider, @Nullable S currentServer, Function serverContextPath, RestTemplate restTemplate, RetryProperties retry) { DestinationServerRestTemplate template = new DestinationServerRestTemplate(restTemplate, retry); - String prefixPath = DiscoveryServerRestProxy.getMappingPath(AnnotationUtils.findAnnotation(interfaceType, RequestMapping.class)); + String prefixPath = DiscoveryServerRestProxy.getMappingPath(AnnotationUtils.findAnnotation(interfaceCls, RequestMapping.class)); InvocationHandler invocationHandler = new ServerInvocationHandler<>(template, serverContextPath, prefixPath); - T remoteServiceClient = ProxyUtils.create(invocationHandler, interfaceType); + T remoteServiceClient = ProxyUtils.create(invocationHandler, interfaceCls); return new DestinationServerInvoker<>(remoteServiceClient, localServiceProvider, currentServer); } diff --git a/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/DiscoveryServerRestProxy.java b/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/DiscoveryServerRestProxy.java index 97da8bc0..2f9aac63 100644 --- a/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/DiscoveryServerRestProxy.java +++ b/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/DiscoveryServerRestProxy.java @@ -87,7 +87,7 @@ public final class DiscoveryServerRestProxy { /** * Creates ungrouped rpc service client proxy. * - * @param interfaceType the interface class + * @param interfaceCls the interface class * @param localServiceProvider the localServiceProvider * @param discoveryServer the discoveryServer * @param restTemplate the restTemplate @@ -96,7 +96,7 @@ public final class DiscoveryServerRestProxy { * @param discovery server type * @return rpc service client proxy */ - public static T create(Class interfaceType, + public static T create(Class interfaceCls, @Nullable T localServiceProvider, Discovery discoveryServer, RestTemplate restTemplate, @@ -108,16 +108,16 @@ public final class DiscoveryServerRestProxy { } else { // 远程调用:通过Discovery来获取目标服务器 DiscoveryServerRestTemplate template = new DiscoveryServerRestTemplate<>(discoveryServer, restTemplate, retry); - String prefixPath = getMappingPath(AnnotationUtils.findAnnotation(interfaceType, RequestMapping.class)); + String prefixPath = getMappingPath(AnnotationUtils.findAnnotation(interfaceCls, RequestMapping.class)); invocationHandler = new UngroupedInvocationHandler(template, prefixPath); } - return ProxyUtils.create(invocationHandler, interfaceType); + return ProxyUtils.create(invocationHandler, interfaceCls); } /** * Creates grouped rpc service client proxy. * - * @param interfaceType the interface class + * @param interfaceCls the interface class * @param localServiceProvider the localServiceProvider * @param serverGroupMatcher the serverGroupMatcher * @param discoveryServer the discoveryServer @@ -127,16 +127,16 @@ public final class DiscoveryServerRestProxy { * @param discovery server type * @return rpc service client proxy */ - public static GroupedServerInvoker create(Class interfaceType, + public static GroupedServerInvoker create(Class interfaceCls, @Nullable T localServiceProvider, Predicate serverGroupMatcher, Discovery discoveryServer, RestTemplate restTemplate, RetryProperties retry) { DiscoveryServerRestTemplate template = new DiscoveryServerRestTemplate<>(discoveryServer, restTemplate, retry); - String prefixPath = getMappingPath(AnnotationUtils.findAnnotation(interfaceType, RequestMapping.class)); + String prefixPath = getMappingPath(AnnotationUtils.findAnnotation(interfaceCls, RequestMapping.class)); InvocationHandler groupedInvocationHandler = new GroupedInvocationHandler(template, prefixPath); - T remoteServiceClient = ProxyUtils.create(groupedInvocationHandler, interfaceType); + T remoteServiceClient = ProxyUtils.create(groupedInvocationHandler, interfaceCls); return new GroupedServerInvoker<>(localServiceProvider, remoteServiceClient, serverGroupMatcher); } -- Gitee From 1ebe962fe7ffddb819a0fe6b297515ccba548f61 Mon Sep 17 00:00:00 2001 From: Ponfee Date: Fri, 24 May 2024 20:09:56 +0800 Subject: [PATCH 08/19] rename method --- .../disjob/common/collect/Collects.java | 7 ++ .../common/lock/DoInDatabaseLocked.java | 2 +- .../disjob/common/lock/DoInRedisLocked.java | 20 ++--- .../common/spring/SpringContextHolder.java | 6 +- .../disjob/common/spring/SpringUtils.java | 5 -- .../ponfee/disjob/common/util/ProxyUtils.java | 5 +- .../ponfee/disjob/core/util/DisjobUtils.java | 12 ++- .../snowflake/db/DbDistributedSnowflake.java | 5 +- .../database/DatabaseServerRegistry.java | 2 +- .../registry/redis/RedisServerRegistry.java | 19 +++-- .../application/AuthorizeGroupService.java | 19 ++--- .../application/EventSubscribeService.java | 8 +- .../application/SchedGroupService.java | 69 +++++++++--------- .../application/ServerInvokeService.java | 6 +- .../component/AbstractJobManager.java | 39 +++++----- .../component/DistributedJobManager.java | 48 +++++------- .../component/DistributedJobQuerier.java | 12 ++- .../configuration/EnableSupervisor.java | 11 ++- .../disjob/supervisor/MockitoTestBase.java | 7 ++ .../ponfee/disjob/worker/base/WorkerTask.java | 5 ++ .../disjob/worker/base/WorkerThreadPool.java | 7 +- .../worker/configuration/EnableWorker.java | 6 +- docs/images/architecture.jpg | Bin 409216 -> 408309 bytes 23 files changed, 157 insertions(+), 163 deletions(-) diff --git a/disjob-common/src/main/java/cn/ponfee/disjob/common/collect/Collects.java b/disjob-common/src/main/java/cn/ponfee/disjob/common/collect/Collects.java index 78b19799..a523cdf0 100644 --- a/disjob-common/src/main/java/cn/ponfee/disjob/common/collect/Collects.java +++ b/disjob-common/src/main/java/cn/ponfee/disjob/common/collect/Collects.java @@ -231,6 +231,13 @@ public class Collects { return list.stream().filter(predicate).collect(Collectors.toList()); } + public static T findAny(Collection coll, Predicate predicate) { + if (CollectionUtils.isEmpty(coll)) { + return null; + } + return coll.stream().filter(predicate).findAny().orElse(null); + } + public static List convert(List source, Function mapper) { if (source == null) { return null; diff --git a/disjob-common/src/main/java/cn/ponfee/disjob/common/lock/DoInDatabaseLocked.java b/disjob-common/src/main/java/cn/ponfee/disjob/common/lock/DoInDatabaseLocked.java index fed81f8f..e5857164 100644 --- a/disjob-common/src/main/java/cn/ponfee/disjob/common/lock/DoInDatabaseLocked.java +++ b/disjob-common/src/main/java/cn/ponfee/disjob/common/lock/DoInDatabaseLocked.java @@ -35,7 +35,7 @@ import java.util.concurrent.Callable; */ public final class DoInDatabaseLocked implements DoInLocked { - private static final String TABLE_NAME = "disjob_lock"; + private static final String TABLE_NAME = "sched_lock"; private static final String CREATE_TABLE_DDL = "CREATE TABLE IF NOT EXISTS `" + TABLE_NAME + "` ( \n" + diff --git a/disjob-common/src/main/java/cn/ponfee/disjob/common/lock/DoInRedisLocked.java b/disjob-common/src/main/java/cn/ponfee/disjob/common/lock/DoInRedisLocked.java index b345857b..da7d651c 100644 --- a/disjob-common/src/main/java/cn/ponfee/disjob/common/lock/DoInRedisLocked.java +++ b/disjob-common/src/main/java/cn/ponfee/disjob/common/lock/DoInRedisLocked.java @@ -38,17 +38,17 @@ public class DoInRedisLocked implements DoInLocked { @Override public T action(Callable caller) { - if (!redisLock.tryLock()) { + if (redisLock.tryLock()) { + try { + return caller.call(); + } catch (Throwable t) { + LOG.error("Do in redis lock occur error.", t); + return null; + } finally { + redisLock.unlock(); + } + } else { return null; } - - try { - return caller.call(); - } catch (Throwable t) { - LOG.error("Do in redis lock occur error.", t); - return null; - } finally { - redisLock.unlock(); - } } } diff --git a/disjob-common/src/main/java/cn/ponfee/disjob/common/spring/SpringContextHolder.java b/disjob-common/src/main/java/cn/ponfee/disjob/common/spring/SpringContextHolder.java index 6584be92..ecf02174 100644 --- a/disjob-common/src/main/java/cn/ponfee/disjob/common/spring/SpringContextHolder.java +++ b/disjob-common/src/main/java/cn/ponfee/disjob/common/spring/SpringContextHolder.java @@ -27,7 +27,6 @@ import org.springframework.beans.factory.support.DefaultSingletonBeanRegistry; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.core.env.Environment; import java.util.Objects; @@ -92,8 +91,9 @@ public class SpringContextHolder implements ApplicationContextAware, BeanFactory return beanFactory != null || applicationContext != null; } - public static Environment getEnvironment() { - return getApplicationContext().getEnvironment(); + public static String getProperty(String key) { + final ApplicationContext ctx = applicationContext; + return ctx != null ? ctx.getEnvironment().getProperty(key) : null; } public static void publishEvent(Object event) { diff --git a/disjob-common/src/main/java/cn/ponfee/disjob/common/spring/SpringUtils.java b/disjob-common/src/main/java/cn/ponfee/disjob/common/spring/SpringUtils.java index de1451be..4b39d273 100644 --- a/disjob-common/src/main/java/cn/ponfee/disjob/common/spring/SpringUtils.java +++ b/disjob-common/src/main/java/cn/ponfee/disjob/common/spring/SpringUtils.java @@ -46,11 +46,6 @@ public final class SpringUtils { */ public static final String SPRING_BOOT_SERVER_PORT = "server.port"; - /** - * Spring-boot web server servlet context-path key - */ - public static final String SPRING_BOOT_CONTEXT_PATH = "server.servlet.context-path"; - public static Resource getResource(String resourceLocation) throws IOException { // return new DefaultResourceLoader().getResource(resourceLocation); URL url = ResourceUtils.getURL(resourceLocation); diff --git a/disjob-common/src/main/java/cn/ponfee/disjob/common/util/ProxyUtils.java b/disjob-common/src/main/java/cn/ponfee/disjob/common/util/ProxyUtils.java index 3624e753..ba9c31dc 100644 --- a/disjob-common/src/main/java/cn/ponfee/disjob/common/util/ProxyUtils.java +++ b/disjob-common/src/main/java/cn/ponfee/disjob/common/util/ProxyUtils.java @@ -53,10 +53,7 @@ public final class ProxyUtils { * @return cglib proxy instance */ public static T create(org.springframework.cglib.proxy.InvocationHandler invocationHandler, Class superClass) { - Enhancer enhancer = new Enhancer(); - enhancer.setSuperclass(superClass); - enhancer.setCallback(invocationHandler); - return (T) enhancer.create(); + return (T) Enhancer.create(superClass, invocationHandler); } public static T create(H invocationHandler, Class cls) { diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/util/DisjobUtils.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/util/DisjobUtils.java index 867a20d3..ed7d21a4 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/util/DisjobUtils.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/util/DisjobUtils.java @@ -16,12 +16,14 @@ package cn.ponfee.disjob.core.util; +import cn.ponfee.disjob.common.spring.SpringContextHolder; import cn.ponfee.disjob.common.util.NetUtils; -import cn.ponfee.disjob.core.base.JobConstants; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static cn.ponfee.disjob.core.base.JobConstants.DISJOB_BOUND_SERVER_HOST; + /** * Disjob utility * @@ -31,18 +33,22 @@ public class DisjobUtils { private static final Logger LOG = LoggerFactory.getLogger(DisjobUtils.class); + public static String getLocalHost() { + return getLocalHost(SpringContextHolder.getProperty(DISJOB_BOUND_SERVER_HOST)); + } + public static String getLocalHost(String specifiedHost) { String host = specifiedHost; if (isValidHost(host, "specified")) { return host; } - host = System.getProperty(JobConstants.DISJOB_BOUND_SERVER_HOST); + host = System.getProperty(DISJOB_BOUND_SERVER_HOST); if (isValidHost(host, "System#getProperty")) { return host; } - host = System.getenv(JobConstants.DISJOB_BOUND_SERVER_HOST); + host = System.getenv(DISJOB_BOUND_SERVER_HOST); if (isValidHost(host, "System#getenv")) { return host; } diff --git a/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/db/DbDistributedSnowflake.java b/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/db/DbDistributedSnowflake.java index e198015f..73eaef08 100644 --- a/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/db/DbDistributedSnowflake.java +++ b/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/db/DbDistributedSnowflake.java @@ -19,6 +19,7 @@ package cn.ponfee.disjob.id.snowflake.db; import cn.ponfee.disjob.common.base.IdGenerator; import cn.ponfee.disjob.common.base.RetryTemplate; import cn.ponfee.disjob.common.base.SingletonClassConstraint; +import cn.ponfee.disjob.common.collect.Collects; import cn.ponfee.disjob.common.concurrent.Threads; import cn.ponfee.disjob.common.exception.Throwables.ThrowingSupplier; import cn.ponfee.disjob.common.spring.JdbcTemplateWrapper; @@ -63,7 +64,7 @@ public class DbDistributedSnowflake extends SingletonClassConstraint implements /** * Store snowflake worker configuration */ - private static final String TABLE_NAME = "disjob_snowflake"; + private static final String TABLE_NAME = "sched_snowflake"; private static final String CREATE_TABLE_DDL = "CREATE TABLE IF NOT EXISTS `" + TABLE_NAME + "` ( \n" + @@ -155,7 +156,7 @@ public class DbDistributedSnowflake extends SingletonClassConstraint implements private int registerWorkerId(int workerIdMaxCount) { List registeredWorkers = jdbcTemplateWrapper.list(QUERY_ALL_SQL, ROW_MAPPER, bizTag); - DbSnowflakeWorker current = registeredWorkers.stream().filter(e -> e.equals(bizTag, serverTag)).findAny().orElse(null); + DbSnowflakeWorker current = Collects.findAny(registeredWorkers, e -> e.equals(bizTag, serverTag)); if (current == null) { return findUsableWorkerId(registeredWorkers, workerIdMaxCount); } else { diff --git a/disjob-registry/disjob-registry-database/src/main/java/cn/ponfee/disjob/registry/database/DatabaseServerRegistry.java b/disjob-registry/disjob-registry-database/src/main/java/cn/ponfee/disjob/registry/database/DatabaseServerRegistry.java index c8b5399e..66d5af85 100644 --- a/disjob-registry/disjob-registry-database/src/main/java/cn/ponfee/disjob/registry/database/DatabaseServerRegistry.java +++ b/disjob-registry/disjob-registry-database/src/main/java/cn/ponfee/disjob/registry/database/DatabaseServerRegistry.java @@ -43,7 +43,7 @@ import static cn.ponfee.disjob.common.spring.TransactionUtils.*; public abstract class DatabaseServerRegistry extends ServerRegistry { private static final long DEAD_TIME_MILLIS = TimeUnit.HOURS.toMillis(12); - private static final String TABLE_NAME = "disjob_registry"; + private static final String TABLE_NAME = "sched_registry"; private static final String CREATE_TABLE_DDL = "CREATE TABLE IF NOT EXISTS `" + TABLE_NAME + "` ( \n" + diff --git a/disjob-registry/disjob-registry-redis/src/main/java/cn/ponfee/disjob/registry/redis/RedisServerRegistry.java b/disjob-registry/disjob-registry-redis/src/main/java/cn/ponfee/disjob/registry/redis/RedisServerRegistry.java index 25c42c3b..cd6264de 100644 --- a/disjob-registry/disjob-registry-redis/src/main/java/cn/ponfee/disjob/registry/redis/RedisServerRegistry.java +++ b/disjob-registry/disjob-registry-redis/src/main/java/cn/ponfee/disjob/registry/redis/RedisServerRegistry.java @@ -292,16 +292,15 @@ public abstract class RedisServerRegistry ex } private void tryDiscoverServers() { - if (!asyncRefreshLock.tryLock()) { - return; - } - try { - doDiscoverServers(); - } catch (Throwable t) { - Threads.interruptIfNecessary(t); - log.error("Redis discover servers occur error.", t); - } finally { - asyncRefreshLock.unlock(); + if (asyncRefreshLock.tryLock()) { + try { + doDiscoverServers(); + } catch (Throwable t) { + Threads.interruptIfNecessary(t); + log.error("Redis discover servers occur error.", t); + } finally { + asyncRefreshLock.unlock(); + } } } diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/AuthorizeGroupService.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/AuthorizeGroupService.java index 1817250d..33928464 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/AuthorizeGroupService.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/AuthorizeGroupService.java @@ -20,8 +20,7 @@ import cn.ponfee.disjob.common.base.SingletonClassConstraint; import cn.ponfee.disjob.common.collect.Collects; import cn.ponfee.disjob.common.exception.Throwables.ThrowingRunnable; import cn.ponfee.disjob.core.exception.AuthenticationException; -import cn.ponfee.disjob.supervisor.dao.mapper.SchedInstanceMapper; -import cn.ponfee.disjob.supervisor.dao.mapper.SchedJobMapper; +import cn.ponfee.disjob.supervisor.component.DistributedJobQuerier; import cn.ponfee.disjob.supervisor.exception.KeyNotExistsException; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; @@ -52,8 +51,7 @@ public class AuthorizeGroupService extends SingletonClassConstraint { */ public static final int SQL_GROUP_IN_MAX_SIZE = 50; - private final SchedJobMapper schedJobMapper; - private final SchedInstanceMapper schedInstanceMapper; + private final DistributedJobQuerier jobQuerier; private final Cache jobGroupCache = CacheBuilder.newBuilder() .initialCapacity(1_000) @@ -64,11 +62,8 @@ public class AuthorizeGroupService extends SingletonClassConstraint { .expireAfterAccess(Duration.ofDays(1)) .build(); - public AuthorizeGroupService(SchedJobMapper schedJobMapper, - SchedInstanceMapper schedInstanceMapper) { - this.schedJobMapper = schedJobMapper; - this.schedInstanceMapper = schedInstanceMapper; - + public AuthorizeGroupService(DistributedJobQuerier jobQuerier) { + this.jobQuerier = jobQuerier; commonScheduledPool().scheduleWithFixedDelay(ThrowingRunnable.toCaught(jobGroupCache::cleanUp), 2, 2, TimeUnit.DAYS); } @@ -116,7 +111,7 @@ public class AuthorizeGroupService extends SingletonClassConstraint { } public void authorizeInstance(String user, long instanceId) { - Long jobId = schedInstanceMapper.getJobId(instanceId); + Long jobId = jobQuerier.getInstanceJobId(instanceId); if (jobId == null) { throw new KeyNotExistsException("Instance id not exists: " + instanceId); } @@ -124,7 +119,7 @@ public class AuthorizeGroupService extends SingletonClassConstraint { } public void authorizeInstance(String user, String authGroup, long instanceId) { - Long jobId = schedInstanceMapper.getJobId(instanceId); + Long jobId = jobQuerier.getInstanceJobId(instanceId); if (jobId == null) { throw new KeyNotExistsException("Instance id not exists: " + instanceId); } @@ -137,7 +132,7 @@ public class AuthorizeGroupService extends SingletonClassConstraint { return group; } - group = schedJobMapper.getGroup(jobId); + group = jobQuerier.getJobGroup(jobId); if (group != null) { LOG.info("Loaded caching group: {}, {}", jobId, group); jobGroupCache.put(jobId, group); diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/EventSubscribeService.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/EventSubscribeService.java index 811cbbf6..b5b13008 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/EventSubscribeService.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/EventSubscribeService.java @@ -43,10 +43,10 @@ public class EventSubscribeService extends SingletonClassConstraint { private static final ConcurrentMap MAP = new ConcurrentHashMap<>(); - private final SchedGroupService schedGroupService; + private final SchedGroupService groupService; - public EventSubscribeService(SchedGroupService schedGroupService) { - this.schedGroupService = schedGroupService; + public EventSubscribeService(SchedGroupService groupService) { + this.groupService = groupService; long initialDelay = 5000 + ThreadLocalRandom.current().nextLong(5000); ThreadPoolExecutors.commonScheduledPool().scheduleWithFixedDelay(this::process, initialDelay, 5000, TimeUnit.MILLISECONDS); @@ -73,7 +73,7 @@ public class EventSubscribeService extends SingletonClassConstraint { Type type = param.getType(); if (type == Type.REFRESH_GROUP) { - schedGroupService.refresh(); + groupService.refresh(); } else { LOG.error("Unsupported subscribe event type: {}", type); diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/SchedGroupService.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/SchedGroupService.java index 3b27704d..b181d891 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/SchedGroupService.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/SchedGroupService.java @@ -70,15 +70,15 @@ public class SchedGroupService extends SingletonClassConstraint { private static volatile Map groupMap; private static volatile Map> userMap; - private final SchedGroupMapper schedGroupMapper; + private final SchedGroupMapper groupMapper; private final SupervisorRegistry supervisorRegistry; private final ServerInvokeService serverInvokeService; - public SchedGroupService(SchedGroupMapper schedGroupMapper, + public SchedGroupService(SchedGroupMapper groupMapper, SupervisorRegistry supervisorRegistry, ServerInvokeService serverInvokeService, SupervisorProperties supervisorProperties) { - this.schedGroupMapper = schedGroupMapper; + this.groupMapper = groupMapper; this.supervisorRegistry = supervisorRegistry; this.serverInvokeService = serverInvokeService; int periodSeconds = Math.max(supervisorProperties.getGroupRefreshPeriodSeconds(), 30); @@ -90,13 +90,13 @@ public class SchedGroupService extends SingletonClassConstraint { public long add(SchedGroupAddRequest request) { request.checkAndTrim(); - if (schedGroupMapper.exists(request.getGroup())) { + if (groupMapper.exists(request.getGroup())) { throw new KeyExistsException("Group already exists: " + request.getGroup()); } SchedGroup schedGroup = request.toSchedGroup(); schedGroup.setUpdatedBy(schedGroup.getCreatedBy()); - schedGroupMapper.insert(schedGroup); - refresh0(); + groupMapper.insert(schedGroup); + refreshAndPublish(); return schedGroup.getId(); } @@ -106,47 +106,46 @@ public class SchedGroupService extends SingletonClassConstraint { throw new KeyExistsException("Group '" + group + "' has registered workers, cannot delete."); } return Functions.doIfTrue( - isOneAffectedRow(schedGroupMapper.softDelete(group, updatedBy)), - this::refresh0 + isOneAffectedRow(groupMapper.softDelete(group, updatedBy)), + this::refreshAndPublish ); } public boolean edit(SchedGroupUpdateRequest request) { request.checkAndTrim(); return Functions.doIfTrue( - isOneAffectedRow(schedGroupMapper.edit(request.toSchedGroup())), - this::refresh0 + isOneAffectedRow(groupMapper.edit(request.toSchedGroup())), + this::refreshAndPublish ); } public SchedGroupResponse get(String group) { - SchedGroup schedGroup = schedGroupMapper.get(group); - return SchedGroupConverter.INSTANCE.convert(schedGroup); + return SchedGroupConverter.INSTANCE.convert(groupMapper.get(group)); } public boolean updateToken(String group, TokenType type, String newToken, String updatedBy, String oldToken) { return Functions.doIfTrue( - isOneAffectedRow(schedGroupMapper.updateToken(group, type, newToken, updatedBy, oldToken)), - this::refresh0 + isOneAffectedRow(groupMapper.updateToken(group, type, newToken, updatedBy, oldToken)), + this::refreshAndPublish ); } public boolean updateOwnUser(String group, String ownUser, String updatedBy) { Assert.hasText(ownUser, "Own user cannot be blank."); return Functions.doIfTrue( - isOneAffectedRow(schedGroupMapper.updateOwnUser(group, ownUser.trim(), updatedBy)), - this::refresh0 + isOneAffectedRow(groupMapper.updateOwnUser(group, ownUser.trim(), updatedBy)), + this::refreshAndPublish ); } public List searchGroup(String term) { - return schedGroupMapper.searchGroup(term); + return groupMapper.searchGroup(term); } public PageResponse queryForPage(SchedGroupPageRequest pageRequest) { PageResponse page = pageRequest.query( - schedGroupMapper::queryPageCount, - schedGroupMapper::queryPageRecords, + groupMapper::queryPageCount, + groupMapper::queryPageRecords, SchedGroupConverter.INSTANCE::convert ); @@ -200,26 +199,24 @@ public class SchedGroupService extends SingletonClassConstraint { // ------------------------------------------------------------private methods void refresh() { - if (!LOCK.tryLock()) { - return; - } - - try { - List list = schedGroupMapper.findAll(); - Map groupMap0 = list.stream().collect(Collectors.toMap(SchedGroup::getGroup, DisjobGroup::of)); - Map> userMap0 = toUserMap(list); - - SchedGroupService.groupMap = groupMap0; - SchedGroupService.userMap = userMap0; - } catch (Throwable t) { - LOG.error("Refresh sched group error.", t); - Threads.interruptIfNecessary(t); - } finally { - LOCK.unlock(); + if (LOCK.tryLock()) { + try { + List list = groupMapper.findAll(); + Map groupMap0 = list.stream().collect(Collectors.toMap(SchedGroup::getGroup, DisjobGroup::of)); + Map> userMap0 = toUserMap(list); + + SchedGroupService.groupMap = groupMap0; + SchedGroupService.userMap = userMap0; + } catch (Throwable t) { + LOG.error("Refresh sched group error.", t); + Threads.interruptIfNecessary(t); + } finally { + LOCK.unlock(); + } } } - private void refresh0() { + private void refreshAndPublish() { refresh(); serverInvokeService.publishOtherSupervisors(new EventParam(EventParam.Type.REFRESH_GROUP)); } diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/ServerInvokeService.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/ServerInvokeService.java index 45c07cbd..fe939feb 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/ServerInvokeService.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/ServerInvokeService.java @@ -21,7 +21,6 @@ import cn.ponfee.disjob.common.base.SingletonClassConstraint; import cn.ponfee.disjob.common.collect.Collects; import cn.ponfee.disjob.common.concurrent.MultithreadExecutors; import cn.ponfee.disjob.common.concurrent.ThreadPoolExecutors; -import cn.ponfee.disjob.common.spring.SpringUtils; import cn.ponfee.disjob.common.util.Numbers; import cn.ponfee.disjob.core.base.*; import cn.ponfee.disjob.core.dto.supervisor.EventParam; @@ -44,7 +43,7 @@ import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.web.ServerProperties; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; @@ -69,12 +68,13 @@ public class ServerInvokeService extends SingletonClassConstraint { public ServerInvokeService(SupervisorRegistry supervisorRegistry, Supervisor.Current currentSupervisor, - @Value("${" + SpringUtils.SPRING_BOOT_CONTEXT_PATH + ":/}") String supervisorContextPath, + ServerProperties serverProperties, SupervisorRpcService localSupervisorRpcProvider, @Qualifier(JobConstants.SPRING_BEAN_NAME_REST_TEMPLATE) RestTemplate restTemplate, DestinationServerInvoker workerRpcClient) { this.supervisorRegistry = supervisorRegistry; this.currentSupervisor = currentSupervisor; + String supervisorContextPath = serverProperties.getServlet().getContextPath(); this.supervisorRpcClient = DestinationServerRestProxy.create( SupervisorRpcService.class, localSupervisorRpcProvider, diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/AbstractJobManager.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/AbstractJobManager.java index c510392a..7f7565a9 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/AbstractJobManager.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/AbstractJobManager.java @@ -108,15 +108,6 @@ public abstract class AbstractJobManager { return isOneAffectedRow(jobMapper.disable(job)); } - public boolean changeJobState(long jobId, JobState to) { - boolean flag = isOneAffectedRow(jobMapper.updateState(jobId, to.value(), 1 ^ to.value())); - if (flag && to == JobState.ENABLE) { - SchedJob job = jobMapper.get(jobId); - updateFixedDelayNextTriggerTime(job, Dates.ofTimeMillis(job.getLastTriggerTime())); - } - return flag; - } - public boolean updateJobNextTriggerTime(SchedJob job) { return isOneAffectedRow(jobMapper.updateNextTriggerTime(job)); } @@ -127,6 +118,16 @@ public abstract class AbstractJobManager { // ------------------------------------------------------------------database operation within spring transactional + @Transactional(transactionManager = SPRING_BEAN_NAME_TX_MANAGER, rollbackFor = Exception.class) + public boolean changeJobState(long jobId, JobState to) { + boolean flag = isOneAffectedRow(jobMapper.updateState(jobId, to.value(), 1 ^ to.value())); + if (flag && to == JobState.ENABLE) { + SchedJob job = jobMapper.get(jobId); + updateFixedDelayNextTriggerTime(job, Dates.ofTimeMillis(job.getLastTriggerTime())); + } + return flag; + } + @Transactional(transactionManager = SPRING_BEAN_NAME_TX_MANAGER, rollbackFor = Exception.class) public Long addJob(SchedJob job) throws JobException { if (jobMapper.exists(job.getGroup(), job.getJobName())) { @@ -185,16 +186,6 @@ public abstract class AbstractJobManager { // ------------------------------------------------------------------others operation - protected boolean updateFixedDelayNextTriggerTime(SchedJob job, Date baseTime) { - TriggerType fixedDelay = TriggerType.FIXED_DELAY; - if (!fixedDelay.equalsValue(job.getTriggerType())) { - return false; - } - Date date = baseTime == null ? null : fixedDelay.computeNextTriggerTime(job.getTriggerValue(), baseTime); - Date nextTriggerTime = Dates.max(new Date(), job.getStartTime(), date); - return isOneAffectedRow(jobMapper.updateFixedDelayNextTriggerTime(job.getJobId(), nextTriggerTime.getTime())); - } - public long generateId() { return idGenerator.generateId(); } @@ -308,6 +299,16 @@ public abstract class AbstractJobManager { return taskDispatcher.dispatch(params); } + protected boolean updateFixedDelayNextTriggerTime(SchedJob job, Date baseTime) { + TriggerType fixedDelay = TriggerType.FIXED_DELAY; + if (!fixedDelay.equalsValue(job.getTriggerType())) { + return false; + } + Date date = baseTime == null ? null : fixedDelay.computeNextTriggerTime(job.getTriggerValue(), baseTime); + Date nextTriggerTime = Dates.max(new Date(), job.getStartTime(), date); + return isOneAffectedRow(jobMapper.updateFixedDelayNextTriggerTime(job.getJobId(), nextTriggerTime.getTime())); + } + /** * Broadcast strategy task after assigned worker. * if the worker was dead, should cancel the task. diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/DistributedJobManager.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/DistributedJobManager.java index 371a6a38..66706294 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/DistributedJobManager.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/DistributedJobManager.java @@ -216,7 +216,7 @@ public class DistributedJobManager extends AbstractJobManager { * @return StartTaskResult, if not null start successfully */ public StartTaskResult startTask(StartTaskParam param) { - return doTransactionLockInSynchronized0(param.getInstanceId(), param.getWnstanceId(), lockedKey -> { + return doInSynchronizedTransaction0(param.getInstanceId(), param.getWnstanceId(), lockedKey -> { log.info("Task trace [{}] starting: {}", param.getTaskId(), param.getWorker()); Date now = new Date(); @@ -239,7 +239,7 @@ public class DistributedJobManager extends AbstractJobManager { SchedTask task = taskMapper.get(param.getTaskId()); List predecessorInstances = null; if (param.getJobType() == JobType.WORKFLOW) { - predecessorInstances = findPredecessorInstances(instance.getWnstanceId(), task.getInstanceId()); + predecessorInstances = findPredecessorInstances(task.getInstanceId(), instance.getWnstanceId()); } return StartTaskResult.success(instance.getJobId(), instance.getWnstanceId(), task, predecessorInstances); }); @@ -248,7 +248,7 @@ public class DistributedJobManager extends AbstractJobManager { public void changeInstanceState(long instanceId, ExecuteState toExecuteState) { RunState toRunState = toExecuteState.runState(); Assert.isTrue(toExecuteState != ExecuteState.EXECUTING, "Cannot force update state to EXECUTING"); - doTransactionLockInSynchronized(instanceId, null, instance -> { + doInSynchronizedTransaction(instanceId, null, instance -> { Assert.notNull(instance, () -> "Sched instance not found: " + instanceId); Assert.isTrue(!instance.isWorkflow(), () -> "Unsupported force change workflow instance state: " + instanceId); @@ -269,7 +269,7 @@ public class DistributedJobManager extends AbstractJobManager { public void deleteInstance(long instanceId) { Long wnstanceId = instanceMapper.getWnstanceId(instanceId); - doTransactionLockInSynchronized(instanceId, wnstanceId, instance -> { + doInSynchronizedTransaction(instanceId, wnstanceId, instance -> { Assert.notNull(instance, () -> "Sched instance not found: " + instanceId); Assert.isTrue(RunState.of(instance.getRunState()).isTerminal(), () -> "Deleting instance must be terminal: " + instance); @@ -318,7 +318,7 @@ public class DistributedJobManager extends AbstractJobManager { long instanceId = param.getInstanceId(); Assert.isTrue(!ExecuteState.Const.PAUSABLE_LIST.contains(toState), () -> "Stop executing invalid to state " + toState); log.info("Task trace [{}] terminating: {}, {}, {}", param.getTaskId(), param.getOperation(), param.getToState(), param.getWorker()); - return doTransactionLockInSynchronized(instanceId, param.getWnstanceId(), instance -> { + return doInSynchronizedTransaction(instanceId, param.getWnstanceId(), instance -> { Assert.notNull(instance, () -> "Terminate executing task failed, instance not found: " + instanceId); Assert.isTrue(!instance.isWorkflowLead(), () -> "Cannot direct terminate workflow lead instance: " + instance); if (RunState.of(instance.getRunState()).isTerminal()) { @@ -375,7 +375,7 @@ public class DistributedJobManager extends AbstractJobManager { public boolean purgeInstance(SchedInstance inst) { log.info("Purge instance: {}", inst.getInstanceId()); Long instanceId = inst.getInstanceId(); - return doTransactionLockInSynchronized(instanceId, inst.getWnstanceId(), instance -> { + return doInSynchronizedTransaction(instanceId, inst.getWnstanceId(), instance -> { Assert.notNull(instance, () -> "Purge instance not found: " + instanceId); Assert.isTrue(!instance.isWorkflowLead(), () -> "Cannot purge workflow lead instance: " + instance); // instance run state must in (10, 20) @@ -434,7 +434,7 @@ public class DistributedJobManager extends AbstractJobManager { if (wnstanceId != null) { Assert.isTrue(instanceId == wnstanceId, () -> "Must pause lead workflow instance: " + instanceId); } - return doTransactionLockInSynchronized(instanceId, wnstanceId, instance -> { + return doInSynchronizedTransaction(instanceId, wnstanceId, instance -> { Assert.notNull(instance, () -> "Pause instance not found: " + instanceId); if (!RUN_STATE_PAUSABLE.contains(instance.getRunState())) { return false; @@ -458,7 +458,7 @@ public class DistributedJobManager extends AbstractJobManager { if (wnstanceId != null) { Assert.isTrue(instanceId == wnstanceId, () -> "Must pause lead workflow instance: " + instanceId); } - return doTransactionLockInSynchronized(instanceId, wnstanceId, instance -> { + return doInSynchronizedTransaction(instanceId, wnstanceId, instance -> { Assert.notNull(instance, () -> "Cancel instance not found: " + instanceId); if (RunState.of(instance.getRunState()).isTerminal()) { return false; @@ -488,7 +488,7 @@ public class DistributedJobManager extends AbstractJobManager { */ public boolean resumeInstance(long instanceId) { Long wnstanceId = instanceMapper.getWnstanceId(instanceId); - return doTransactionLockInSynchronized(instanceId, wnstanceId, instance -> { + return doInSynchronizedTransaction(instanceId, wnstanceId, instance -> { Assert.notNull(instance, () -> "Cancel failed, instance_id not found: " + instanceId); if (!RunState.PAUSED.equalsValue(instance.getRunState())) { return false; @@ -518,7 +518,7 @@ public class DistributedJobManager extends AbstractJobManager { // ------------------------------------------------------------------private methods - private T doTransactionLockInSynchronized0(long instanceId, Long wnstanceId, LongFunction action) { + private T doInSynchronizedTransaction0(long instanceId, Long wnstanceId, LongFunction action) { // Long.toString(lockKey).intern() Long lockedKey = wnstanceId != null ? wnstanceId : (Long) instanceId; synchronized (JobConstants.INSTANCE_LOCK_POOL.intern(lockedKey)) { @@ -526,8 +526,8 @@ public class DistributedJobManager extends AbstractJobManager { } } - private void doTransactionLockInSynchronized(long instanceId, Long wnstanceId, Consumer action) { - doTransactionLockInSynchronized(instanceId, wnstanceId, Functions.convert(action, true)); + private void doInSynchronizedTransaction(long instanceId, Long wnstanceId, Consumer action) { + doInSynchronizedTransaction(instanceId, wnstanceId, Functions.convert(action, true)); } /** @@ -538,8 +538,8 @@ public class DistributedJobManager extends AbstractJobManager { * @param action the action * @return boolean value of action result */ - private boolean doTransactionLockInSynchronized(long instanceId, Long wnstanceId, Predicate action) { - return doTransactionLockInSynchronized0(instanceId, wnstanceId, lockedKey -> { + private boolean doInSynchronizedTransaction(long instanceId, Long wnstanceId, Predicate action) { + return doInSynchronizedTransaction0(instanceId, wnstanceId, lockedKey -> { SchedInstance lockedInstance = instanceMapper.lock(lockedKey); Assert.notNull(lockedInstance, () -> "Locked instance not found: " + lockedKey); SchedInstance instance = (instanceId == lockedKey) ? lockedInstance : instanceMapper.get(instanceId); @@ -1020,32 +1020,18 @@ public class DistributedJobManager extends AbstractJobManager { return Tuple3.of(job, instance, waitingTasks); } - private List findPredecessorInstances(long wnstanceId, long instanceId) { + private List findPredecessorInstances(long instanceId, long wnstanceId) { List workflows = workflowMapper.findByWnstanceId(wnstanceId); - if (CollectionUtils.isEmpty(workflows)) { + SchedWorkflow curWorkflow = Collects.findAny(workflows, e -> Long.valueOf(instanceId).equals(e.getInstanceId())); + if (curWorkflow == null || DAGNode.fromString(curWorkflow.getPreNode()).isStart()) { return null; } - - SchedWorkflow curWorkflow = workflows.stream() - .filter(e -> e.getInstanceId() != null) - .filter(e -> e.getInstanceId() == instanceId) - .findAny() - .orElse(null); - if (curWorkflow == null) { - return null; - } - - if (DAGNode.fromString(curWorkflow.getPreNode()).isStart()) { - return null; - } - DAGNode curNode = DAGNode.fromString(curWorkflow.getCurNode()); WorkflowGraph workflowGraph = new WorkflowGraph(workflows); Map predecessors = workflowGraph.predecessors(curNode); if (MapUtils.isEmpty(predecessors)) { return null; } - return predecessors.values() .stream() .map(e -> { diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/DistributedJobQuerier.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/DistributedJobQuerier.java index dc5b626d..26d8f80e 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/DistributedJobQuerier.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/component/DistributedJobQuerier.java @@ -65,10 +65,18 @@ public class DistributedJobQuerier { return jobMapper.get(jobId); } + public String getJobGroup(long jobId) { + return jobMapper.getGroup(jobId); + } + public SchedInstance getInstance(long instanceId) { return instanceMapper.get(instanceId); } + public Long getInstanceJobId(long instanceId) { + return instanceMapper.getJobId(instanceId); + } + public SchedInstance getInstance(long jobId, long triggerTime, int runType) { return instanceMapper.getByJobIdAndTriggerTimeAndRunType(jobId, triggerTime, runType); } @@ -100,10 +108,6 @@ public class DistributedJobQuerier { return taskMapper.findBaseByInstanceId(instanceId); } - public SchedTask getTask(long taskId) { - return taskMapper.get(taskId); - } - public List findLargeInstanceTasks(long instanceId) { return taskMapper.findLargeByInstanceId(instanceId); } diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/configuration/EnableSupervisor.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/configuration/EnableSupervisor.java index 9e409b8d..3b8e3e39 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/configuration/EnableSupervisor.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/configuration/EnableSupervisor.java @@ -29,7 +29,6 @@ import cn.ponfee.disjob.supervisor.SupervisorStartup; import cn.ponfee.disjob.supervisor.application.SchedGroupService; import cn.ponfee.disjob.supervisor.configuration.EnableSupervisor.EnableSupervisorConfiguration; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.context.WebServerApplicationContext; import org.springframework.context.annotation.Bean; @@ -44,7 +43,8 @@ import java.util.function.Function; import java.util.function.Predicate; import java.util.function.UnaryOperator; -import static cn.ponfee.disjob.core.base.JobConstants.*; +import static cn.ponfee.disjob.core.base.JobConstants.SPRING_BEAN_NAME_CURRENT_SUPERVISOR; +import static cn.ponfee.disjob.core.base.JobConstants.SPRING_BEAN_NAME_REST_TEMPLATE; /** * Enable supervisor role @@ -83,10 +83,9 @@ public @interface EnableSupervisor { class EnableSupervisorConfiguration { @Bean(SPRING_BEAN_NAME_CURRENT_SUPERVISOR) - public Supervisor.Current currentSupervisor(@Value("${" + DISJOB_BOUND_SERVER_HOST + ":}") String boundHost, - WebServerApplicationContext webServerApplicationContext) { + public Supervisor.Current currentSupervisor(WebServerApplicationContext webServerApplicationContext) { UnaryOperator workerCtxPath = group -> SchedGroupService.getGroup(group).getWorkerContextPath(); - String host = DisjobUtils.getLocalHost(boundHost); + String host = DisjobUtils.getLocalHost(); int port = SpringUtils.getActualWebServerPort(webServerApplicationContext); Object[] args = {host, port, workerCtxPath}; try { @@ -94,7 +93,7 @@ public @interface EnableSupervisor { return ClassUtils.invoke(Class.forName(Supervisor.Current.class.getName()), "create", args); } catch (Exception e) { // cannot happen - throw new Error("Setting as current supervisor occur error.", e); + throw new Error("Creates Supervisor.Current instance occur error.", e); } } diff --git a/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/MockitoTestBase.java b/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/MockitoTestBase.java index 16412578..88a07748 100644 --- a/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/MockitoTestBase.java +++ b/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/MockitoTestBase.java @@ -71,9 +71,16 @@ public abstract class MockitoTestBase { static { // Mock DisjobUtils.getLocalHost返回`127.0.0.1`,支持在断网时能跑测试用例 MockedStatic mocked = mockStatic(DisjobUtils.class); + + // Mock DisjobUtils#getLocalHost(String) mocked.when(() -> DisjobUtils.getLocalHost(any())).thenReturn(NetUtils.LOCAL_IP_ADDRESS); Assertions.assertEquals(NetUtils.LOCAL_IP_ADDRESS, DisjobUtils.getLocalHost(null)); mocked.verify(() -> DisjobUtils.getLocalHost(any())); + + // Mock DisjobUtils#getLocalHost() + mocked.when(DisjobUtils::getLocalHost).thenReturn(NetUtils.LOCAL_IP_ADDRESS); + Assertions.assertEquals(NetUtils.LOCAL_IP_ADDRESS, DisjobUtils.getLocalHost()); + mocked.verify(DisjobUtils::getLocalHost); } // Only reset mock field which is defined in MockitoTestBase diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/WorkerTask.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/WorkerTask.java index e7f4c1df..fcce7922 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/WorkerTask.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/WorkerTask.java @@ -17,6 +17,7 @@ package cn.ponfee.disjob.worker.base; import cn.ponfee.disjob.core.base.Worker; +import cn.ponfee.disjob.core.dto.supervisor.StartTaskParam; import cn.ponfee.disjob.core.enums.JobType; import cn.ponfee.disjob.core.enums.Operation; import cn.ponfee.disjob.core.enums.RouteStrategy; @@ -75,6 +76,10 @@ class WorkerTask { // --------------------------------------------------------other methods + StartTaskParam toStartTaskParam() { + return new StartTaskParam(wnstanceId, instanceId, taskId, jobType, worker); + } + Long getLockedKey() { return wnstanceId != null ? wnstanceId : instanceId; } diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/WorkerThreadPool.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/WorkerThreadPool.java index beac4d4e..88b02274 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/WorkerThreadPool.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/WorkerThreadPool.java @@ -27,7 +27,6 @@ import cn.ponfee.disjob.common.util.Jsons; import cn.ponfee.disjob.core.base.JobConstants; import cn.ponfee.disjob.core.base.SupervisorRpcService; import cn.ponfee.disjob.core.base.WorkerMetrics; -import cn.ponfee.disjob.core.dto.supervisor.StartTaskParam; import cn.ponfee.disjob.core.dto.supervisor.StartTaskResult; import cn.ponfee.disjob.core.dto.supervisor.TerminateTaskParam; import cn.ponfee.disjob.core.dto.supervisor.UpdateTaskWorkerParam; @@ -791,10 +790,8 @@ public class WorkerThreadPool extends Thread implements Closeable { ExecuteTask executeTask; try { // update database records start state(sched_instance, sched_task) - // 这里存在调用超时,但实际supervisor启动task成功的情况 - // 后续版本可考虑加一个请求ID标识,返回值也加上启动成功的那个请求ID。在重试时通过判断返回的请求ID是否等于本次的请求ID,来识别是否本次启动成功的 - StartTaskParam param = new StartTaskParam(task.getWnstanceId(), task.getInstanceId(), task.getTaskId(), task.getJobType(), task.getWorker()); - StartTaskResult startTaskResult = supervisorRpcClient.startTask(param); + // 存在调用超时但实际task启动成功的问题:计划增加start_id参数写入sched_task表,接口返回启动成功的start_id,若超时重试成功时可判断返回的start_id是否与本次的相等 + StartTaskResult startTaskResult = supervisorRpcClient.startTask(task.toStartTaskParam()); if (!startTaskResult.isSuccess()) { LOG.warn("Start task failed: {}, {}", task, startTaskResult.getMessage()); return; diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/configuration/EnableWorker.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/configuration/EnableWorker.java index dedefed0..e30e28d5 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/configuration/EnableWorker.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/configuration/EnableWorker.java @@ -28,7 +28,6 @@ import cn.ponfee.disjob.registry.WorkerRegistry; import cn.ponfee.disjob.worker.base.TaskTimingWheel; import cn.ponfee.disjob.worker.configuration.EnableWorker.EnableWorkerConfiguration; import cn.ponfee.disjob.worker.provider.WorkerRpcProvider; -import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.context.WebServerApplicationContext; import org.springframework.context.annotation.Bean; @@ -64,10 +63,9 @@ public @interface EnableWorker { @DependsOn(JobConstants.SPRING_BEAN_NAME_TIMING_WHEEL) @Bean(JobConstants.SPRING_BEAN_NAME_CURRENT_WORKER) public Worker.Current currentWorker(WebServerApplicationContext webServerApplicationContext, - @Value("${" + JobConstants.DISJOB_BOUND_SERVER_HOST + ":}") String boundHost, WorkerProperties config) { config.check(); - String host = DisjobUtils.getLocalHost(boundHost); + String host = DisjobUtils.getLocalHost(); String workerToken = config.getWorkerToken(); String supervisorToken = config.getSupervisorToken(); String supervisorContextPath = config.getSupervisorContextPath(); @@ -79,7 +77,7 @@ public @interface EnableWorker { return ClassUtils.invoke(Class.forName(Worker.Current.class.getName()), "create", args); } catch (Exception e) { // cannot happen - throw new Error("Setting as current worker occur error.", e); + throw new Error("Creates Worker.Current instance occur error.", e); } } diff --git a/docs/images/architecture.jpg b/docs/images/architecture.jpg index 48cd3ed03aa7136eae720d416d29c14cb0184353..b5f694cf6098a76278a476c23cf6af165f952a66 100644 GIT binary patch literal 408309 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

(R7F-LkiETJ+?O>|9XVn-@&r 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�zr)0^(%U>TaDgR+~6ygPf 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ⅅ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Ⓢ!JS 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 {4Z5jh4J&H(4 zHiZQ%LR2crE`Ao@Ue{JrcOPyW=7N`IH+0@tiM0 z-F{g`SK7&=E*F3rGTCd#Er+3s@MSSS$-ABe)56+LUDH*w@<`$EkI=Ji!Xb#gEAOSO z^}ZC9lv(B#W@&jw(Sm_!xUTMWr2k0~({pRdZp&EJAOiXX;S)YGP}1V_-GFz>mnn2M#ew3t~m6b)oSgxX5*-cZqX87i=vAV!zJWouwNq{HY!DsXUdir`A9B)~2 znJC?cW?Xy~q?Ih+N^$5D`=c>!8WR(ms3vWvRK&05fL(OB0=~VfEbhv}ukHwA(~7%6 z^d!*gV_UTmL*XRznhsNUNhOE9Bm_xQe)(Rc&n0Ljlew)rIqlU%mO5- zHuwKg_uf%WrETA+&&)V8_CW-cq9a8lG(n0qeN;Lo2qc6SP-&8oAT2;>�($DFNwH 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⪼rOg2CBHSKOIqO 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 literal 409216 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 r5T=?q_OP1dlv{`_ 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 Y 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⁡A>Cq{+6bO|54Xo7shLGwxO-CmSHbS`WaY@J_8 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 R?{VV&A-=!tkZk+b|2u4Bj?4f6 -- Gitee From 7f2431fc41b4d4c66bc2a9f5afd2e6ce3e0ffdd7 Mon Sep 17 00:00:00 2001 From: Ponfee Date: Sat, 25 May 2024 12:19:47 +0800 Subject: [PATCH 09/19] refactor Snowflake arguments --- .../main/resources/static/ruoyi/js/ry-ui.js | 3 +- .../dispatch/http/HttpTaskDispatcher.java | 8 +- .../dispatch/http/HttpTaskReceiver.java | 21 +++++- .../http/HttpTaskReceiverService.java | 43 ----------- .../dispatch/redis/RedisTaskDispatcher.java | 2 +- .../redis/RedisTaskDispatchingUtils.java | 4 +- .../dispatch/redis/RedisTaskReceiver.java | 2 +- .../ponfee/disjob/id/snowflake/Snowflake.java | 74 +++++++++++-------- .../snowflake/db/DbDistributedSnowflake.java | 10 +-- .../snowflake/db/DbSnowflakeIdGenerator.java | 8 +- .../snowflake/zk/ZkDistributedSnowflake.java | 10 +-- .../disjob/id/snowflake/SnowflakeTest.java | 10 +-- .../application/SchedGroupService.java | 12 +-- .../application/ServerInvokeService.java | 3 +- .../configuration/WorkerProperties.java | 4 +- 15 files changed, 104 insertions(+), 110 deletions(-) delete mode 100644 disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/HttpTaskReceiverService.java diff --git a/disjob-admin/ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js b/disjob-admin/ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js index deff3f03..9efb199b 100644 --- a/disjob-admin/ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js +++ b/disjob-admin/ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js @@ -56,7 +56,7 @@ var table = { paginationLoop: false, pageSize: 10, pageNumber: 1, - pageList: [10, 25, 50], + pageList: [10, 25, 50, 100], toolbar: "toolbar", loadingFontSize: 13, striped: true, @@ -111,6 +111,7 @@ var table = { showFooter: options.showFooter, // 是否显示表尾 iconSize: 'outline', // 图标大小:undefined默认的按钮尺寸 xs超小按钮sm小按钮lg大按钮 toolbar: '#' + options.toolbar, // 指定工作栏 + virtualScroll: options.virtualScroll, // 是否启动虚拟滚动(大量数据纯展示时使用) loadingFontSize: options.loadingFontSize, // 自定义加载文本的字体大小 sidePagination: options.sidePagination, // server启用服务端分页client客户端分页 search: options.search, // 是否显示搜索框功能 diff --git a/disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/HttpTaskDispatcher.java b/disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/HttpTaskDispatcher.java index c9d2b1ba..5f22c279 100644 --- a/disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/HttpTaskDispatcher.java +++ b/disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/HttpTaskDispatcher.java @@ -37,7 +37,7 @@ import static cn.ponfee.disjob.registry.rpc.DestinationServerRestProxy.create; */ public class HttpTaskDispatcher extends TaskDispatcher { - private final DestinationServerInvoker httpTaskReceiverClient; + private final DestinationServerInvoker httpTaskReceiverClient; public HttpTaskDispatcher(ApplicationEventPublisher eventPublisher, Discovery discoveryWorker, @@ -48,9 +48,9 @@ public class HttpTaskDispatcher extends TaskDispatcher { Function workerContextPath = worker -> Supervisor.current().getWorkerContextPath(worker.getGroup()); RetryProperties retry = RetryProperties.of(0, 0); - // `TaskDispatcher#dispatch0`内部有处理本地worker的分派逻辑,这里不需要本地的HttpTaskReceiverService,所以传null - this.httpTaskReceiverClient = create(HttpTaskReceiverService.class, null, null, workerContextPath, restTemplate, retry); - //this.httpTaskReceiverClient = create(HttpTaskReceiverService.class, httpTaskReceiver, Worker.current(), workerContextPath, restTemplate, retry); + // `TaskDispatcher#dispatch0`内部有处理本地worker的分派逻辑,这里不需要本地的`Controller`,所以传null + this.httpTaskReceiverClient = create(Controller.class, null, null, workerContextPath, restTemplate, retry); + //this.httpTaskReceiverClient = create(Controller.class, httpTaskReceiver, Worker.current(), workerContextPath, restTemplate, retry); } @Override diff --git a/disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/HttpTaskReceiver.java b/disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/HttpTaskReceiver.java index ea9bfd83..57d538e7 100644 --- a/disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/HttpTaskReceiver.java +++ b/disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/HttpTaskReceiver.java @@ -19,8 +19,12 @@ package cn.ponfee.disjob.dispatch.http; import cn.ponfee.disjob.common.base.TimingWheel; import cn.ponfee.disjob.common.spring.RpcController; import cn.ponfee.disjob.core.base.Worker; +import cn.ponfee.disjob.core.base.WorkerRpcService; import cn.ponfee.disjob.dispatch.ExecuteTaskParam; import cn.ponfee.disjob.dispatch.TaskReceiver; +import io.swagger.v3.oas.annotations.Hidden; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; /** * Task receiver based http. @@ -28,7 +32,7 @@ import cn.ponfee.disjob.dispatch.TaskReceiver; * @author Ponfee */ @RpcController -public class HttpTaskReceiver extends TaskReceiver implements HttpTaskReceiverService { +public class HttpTaskReceiver extends TaskReceiver implements Controller { public HttpTaskReceiver(Worker.Current currentWorker, TimingWheel timingWheel) { super(currentWorker, timingWheel); @@ -40,3 +44,18 @@ public class HttpTaskReceiver extends TaskReceiver implements HttpTaskReceiverSe } } + +@Hidden +@RequestMapping(WorkerRpcService.PREFIX_PATH) +interface Controller { + + /** + * Receive task http method + * + * @param param the task + * @return {@code true} if received successfully + */ + @PostMapping("/task/receive") + boolean receive(ExecuteTaskParam param); + +} diff --git a/disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/HttpTaskReceiverService.java b/disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/HttpTaskReceiverService.java deleted file mode 100644 index de8a54b3..00000000 --- a/disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/HttpTaskReceiverService.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2022-2024 Ponfee (http://www.ponfee.cn/) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package cn.ponfee.disjob.dispatch.http; - -import cn.ponfee.disjob.core.base.WorkerRpcService; -import cn.ponfee.disjob.dispatch.ExecuteTaskParam; -import io.swagger.v3.oas.annotations.Hidden; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; - -/** - * Http task receiver service - * - * @author Ponfee - */ -@Hidden -@RequestMapping(WorkerRpcService.PREFIX_PATH) -interface HttpTaskReceiverService { - - /** - * Receive task http method - * - * @param param the task - * @return {@code true} if received successfully - */ - @PostMapping("/task/receive") - boolean receive(ExecuteTaskParam param); - -} diff --git a/disjob-dispatch/disjob-dispatch-redis/src/main/java/cn/ponfee/disjob/dispatch/redis/RedisTaskDispatcher.java b/disjob-dispatch/disjob-dispatch-redis/src/main/java/cn/ponfee/disjob/dispatch/redis/RedisTaskDispatcher.java index 236b031a..d106ceb5 100644 --- a/disjob-dispatch/disjob-dispatch-redis/src/main/java/cn/ponfee/disjob/dispatch/redis/RedisTaskDispatcher.java +++ b/disjob-dispatch/disjob-dispatch-redis/src/main/java/cn/ponfee/disjob/dispatch/redis/RedisTaskDispatcher.java @@ -61,7 +61,7 @@ public class RedisTaskDispatcher extends TaskDispatcher { protected final boolean doDispatch(ExecuteTaskParam param) { Worker worker = param.getWorker(); // push to remote worker - String key = RedisTaskDispatchingUtils.buildDispatchTasksKey(worker); + String key = RedisTaskDispatchingUtils.buildTaskDispatchKey(worker); // ret: return list length after call redis rpush command Long ret = redisTemplate.execute((RedisCallback) conn -> conn.rPush(key.getBytes(), param.serialize())); diff --git a/disjob-dispatch/disjob-dispatch-redis/src/main/java/cn/ponfee/disjob/dispatch/redis/RedisTaskDispatchingUtils.java b/disjob-dispatch/disjob-dispatch-redis/src/main/java/cn/ponfee/disjob/dispatch/redis/RedisTaskDispatchingUtils.java index ea4a745a..3c353af5 100644 --- a/disjob-dispatch/disjob-dispatch-redis/src/main/java/cn/ponfee/disjob/dispatch/redis/RedisTaskDispatchingUtils.java +++ b/disjob-dispatch/disjob-dispatch-redis/src/main/java/cn/ponfee/disjob/dispatch/redis/RedisTaskDispatchingUtils.java @@ -26,8 +26,8 @@ import cn.ponfee.disjob.core.base.Worker; */ final class RedisTaskDispatchingUtils { - static String buildDispatchTasksKey(Worker worker) { - return JobConstants.DISJOB_KEY_PREFIX + ".tasks.dispatch." + worker.serialize(); + static String buildTaskDispatchKey(Worker worker) { + return JobConstants.DISJOB_KEY_PREFIX + ".task.dispatch." + worker.serialize(); } } diff --git a/disjob-dispatch/disjob-dispatch-redis/src/main/java/cn/ponfee/disjob/dispatch/redis/RedisTaskReceiver.java b/disjob-dispatch/disjob-dispatch-redis/src/main/java/cn/ponfee/disjob/dispatch/redis/RedisTaskReceiver.java index ead1a499..a2518cec 100644 --- a/disjob-dispatch/disjob-dispatch-redis/src/main/java/cn/ponfee/disjob/dispatch/redis/RedisTaskReceiver.java +++ b/disjob-dispatch/disjob-dispatch-redis/src/main/java/cn/ponfee/disjob/dispatch/redis/RedisTaskReceiver.java @@ -147,7 +147,7 @@ public class RedisTaskReceiver extends TaskReceiver { private final RedisKeyRenewal redisKeyRenewal; private GroupedWorker(Worker worker, RedisTemplate redisTemplate) { - byte[] key = RedisTaskDispatchingUtils.buildDispatchTasksKey(worker).getBytes(); + byte[] key = RedisTaskDispatchingUtils.buildTaskDispatchKey(worker).getBytes(); this.keysAndArgs = new byte[][]{key, LIST_POP_BATCH_SIZE_BYTES}; this.redisKeyRenewal = new RedisKeyRenewal(redisTemplate, key); } diff --git a/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/Snowflake.java b/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/Snowflake.java index 92ff5ffa..f7d0dc7d 100644 --- a/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/Snowflake.java +++ b/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/Snowflake.java @@ -20,7 +20,6 @@ import cn.ponfee.disjob.common.base.IdGenerator; import cn.ponfee.disjob.common.util.Maths; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.util.Assert; /** *

@@ -59,61 +58,78 @@ public final class Snowflake implements IdGenerator {
     private static final long TWEPOCH = 1425139200000L;
 
     /**
-     * 数据中心ID
+     * Timestamp left shift bits length: datacenterIdBitLength + workerIdBitLength + sequenceBitLength
      */
-    private final long datacenterId;
+    private final int timestampShift;
 
     /**
-     * 工作机器ID
+     * Datacenter id left shift bits length: workerIdBitLength + sequenceBitLength
      */
-    private final long workerId;
+    private final int datacenterIdShift;
 
+    /**
+     * Worker id left shift bits length: sequenceBitLength
+     */
     private final int workerIdShift;
-    private final int datacenterIdShift;
-    private final int timestampShift;
 
+    /**
+     * Sequence mask, such as: 1111111111 11
+     */
     private final long sequenceMask;
 
+    /**
+     * 数据中心ID
+     */
+    private final long datacenterId;
+
+    /**
+     * 工作机器ID
+     */
+    private final long workerId;
+
+    /**
+     * Last timestamp
+     */
     private long lastTimestamp = -1L;
-    private long sequence      = 0L;
 
-    public Snowflake(int workerId,
-                     int datacenterId,
-                     int sequenceBitLength,
-                     int workerIdBitLength,
-                     int datacenterIdBitLength) {
-        int len = sequenceBitLength + workerIdBitLength + datacenterIdBitLength;
-        Assert.isTrue(len <= 22, () -> "Bit length(sequence + worker + datacenter) cannot greater than 22, but actual=" + len);
+    /**
+     * Current sequence
+     */
+    private long sequence = 0L;
 
-        long maxWorkerId = Maths.bitsMask(workerIdBitLength);
-        if (workerId > maxWorkerId || workerId < 0) {
-            throw new IllegalArgumentException("Worker id must be range [0, " + maxWorkerId + "], but was " + workerId);
+    public Snowflake(int datacenterIdBitLength, int workerIdBitLength, int sequenceBitLength, int datacenterId, int workerId) {
+        int len = datacenterIdBitLength + workerIdBitLength + sequenceBitLength;
+        if (len > 22) {
+            throw new IllegalArgumentException("Bit length(datacenter + worker + sequence) cannot greater than 22, but actual=" + len);
         }
 
         long maxDatacenterId = Maths.bitsMask(datacenterIdBitLength);
-        if (datacenterId > maxDatacenterId || datacenterId < 0) {
-            throw new IllegalArgumentException("Worker id must be range [0, " + maxDatacenterId + "], but was " + datacenterId);
+        if (datacenterId < 0 || datacenterId > maxDatacenterId) {
+            throw new IllegalArgumentException("Datacenter id must be range [0, " + maxDatacenterId + "], but actual " + datacenterId);
         }
 
-        this.workerIdShift     = sequenceBitLength;
-        this.datacenterIdShift = sequenceBitLength + workerIdBitLength;
-        this.timestampShift    = sequenceBitLength + workerIdBitLength + datacenterIdBitLength;
+        long maxWorkerId = Maths.bitsMask(workerIdBitLength);
+        if (workerId < 0 || workerId > maxWorkerId) {
+            throw new IllegalArgumentException("Worker id must be range [0, " + maxWorkerId + "], but actual " + workerId);
+        }
 
+        this.timestampShift    = datacenterIdBitLength + workerIdBitLength + sequenceBitLength;
+        this.datacenterIdShift = workerIdBitLength + sequenceBitLength;
+        this.workerIdShift     = sequenceBitLength;
         this.sequenceMask      = Maths.bitsMask(sequenceBitLength);
-
-        this.workerId          = workerId;
         this.datacenterId      = datacenterId;
+        this.workerId          = workerId;
     }
 
     /**
      * Without datacenter id
      *
-     * @param workerId          the worker id
-     * @param sequenceBitLength the sequence bit length
      * @param workerIdBitLength the worker id bit length
+     * @param sequenceBitLength the sequence bit length
+     * @param workerId          the worker id
      */
-    public Snowflake(int workerId, int sequenceBitLength, int workerIdBitLength) {
-        this(workerId, 0, sequenceBitLength, workerIdBitLength, 0);
+    public Snowflake(int workerIdBitLength, int sequenceBitLength, int workerId) {
+        this(0, workerIdBitLength, sequenceBitLength, 0, workerId);
     }
 
     @Override
diff --git a/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/db/DbDistributedSnowflake.java b/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/db/DbDistributedSnowflake.java
index 73eaef08..829d4f0f 100644
--- a/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/db/DbDistributedSnowflake.java
+++ b/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/db/DbDistributedSnowflake.java
@@ -109,15 +109,15 @@ public class DbDistributedSnowflake extends SingletonClassConstraint implements
      * @param serverTag    the serverTag
      */
     public DbDistributedSnowflake(JdbcTemplate jdbcTemplate, String bizTag, String serverTag) {
-        this(jdbcTemplate, bizTag, serverTag, 14, 8);
+        this(jdbcTemplate, bizTag, serverTag, 8, 14);
     }
 
     public DbDistributedSnowflake(JdbcTemplate jdbcTemplate,
                                   String bizTag,
                                   String serverTag,
-                                  int sequenceBitLength,
-                                  int workerIdBitLength) {
-        int len = sequenceBitLength + workerIdBitLength;
+                                  int workerIdBitLength,
+                                  int sequenceBitLength) {
+        int len = workerIdBitLength + sequenceBitLength;
         Assert.isTrue(len <= 22, () -> "Bit length(sequence + worker) cannot greater than 22, but actual=" + len);
 
         this.jdbcTemplateWrapper = JdbcTemplateWrapper.of(jdbcTemplate);
@@ -131,7 +131,7 @@ public class DbDistributedSnowflake extends SingletonClassConstraint implements
             // workerId取值范围:[0, workerIdMaxCount)
             int workerIdMaxCount = 1 << workerIdBitLength;
             int workerId = RetryTemplate.execute(() -> registerWorkerId(workerIdMaxCount), 5, 2000L);
-            this.snowflake = new Snowflake(workerId, sequenceBitLength, workerIdBitLength);
+            this.snowflake = new Snowflake(workerIdBitLength, sequenceBitLength, workerId);
         } catch (Throwable e) {
             Threads.interruptIfNecessary(e);
             throw new Error("Db snowflake server initialize error.", e);
diff --git a/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/db/DbSnowflakeIdGenerator.java b/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/db/DbSnowflakeIdGenerator.java
index 3e05435f..cc54e029 100644
--- a/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/db/DbSnowflakeIdGenerator.java
+++ b/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/db/DbSnowflakeIdGenerator.java
@@ -61,10 +61,10 @@ public @interface DbSnowflakeIdGenerator {
 
     String bizTag() default "disjob";
 
-    int sequenceBitLength() default 14;
-
     int workerIdBitLength() default 8;
 
+    int sequenceBitLength() default 14;
+
     /**
      * Basic DbDistributedSnowflake
      */
@@ -136,8 +136,8 @@ public @interface DbSnowflakeIdGenerator {
             }
 
             bd.getConstructorArgumentValues().addIndexedArgumentValue(2, config.bizTag());
-            bd.getConstructorArgumentValues().addIndexedArgumentValue(3, config.sequenceBitLength());
-            bd.getConstructorArgumentValues().addIndexedArgumentValue(4, config.workerIdBitLength());
+            bd.getConstructorArgumentValues().addIndexedArgumentValue(3, config.workerIdBitLength());
+            bd.getConstructorArgumentValues().addIndexedArgumentValue(4, config.sequenceBitLength());
 
             bd.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
             bd.setScope(BeanDefinition.SCOPE_SINGLETON);
diff --git a/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/zk/ZkDistributedSnowflake.java b/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/zk/ZkDistributedSnowflake.java
index 28070a6c..8ba8ab39 100644
--- a/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/zk/ZkDistributedSnowflake.java
+++ b/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/zk/ZkDistributedSnowflake.java
@@ -111,17 +111,17 @@ public class ZkDistributedSnowflake extends SingletonClassConstraint implements
     private volatile boolean closed = false;
 
     public ZkDistributedSnowflake(ZkConfig zkConfig, String bizTag, String serverTag) {
-        this(zkConfig, bizTag, serverTag, 14, 8);
+        this(zkConfig, bizTag, serverTag, 8, 14);
     }
 
     public ZkDistributedSnowflake(ZkConfig zkConfig,
                                   String bizTag,
                                   String serverTag,
-                                  int sequenceBitLength,
-                                  int workerIdBitLength) {
+                                  int workerIdBitLength,
+                                  int sequenceBitLength) {
         Assert.isTrue(!bizTag.contains(SEP), () -> "Biz tag cannot contains '/': " + bizTag);
         Assert.isTrue(!serverTag.contains(SEP), () -> "Server tag cannot contains '/': " + serverTag);
-        int len = sequenceBitLength + workerIdBitLength;
+        int len = workerIdBitLength + sequenceBitLength;
         Assert.isTrue(len <= 22, () -> "Bit length(sequence + worker) cannot greater than 22, but actual=" + len);
         this.serverTag = serverTag;
         String snowflakeRootPath = "/snowflake/" + bizTag;
@@ -144,7 +144,7 @@ public class ZkDistributedSnowflake extends SingletonClassConstraint implements
             int workerIdMaxCount = 1 << workerIdBitLength;
             this.workerId = RetryTemplate.execute(() -> registerWorkerId(workerIdMaxCount), 5, 2000L);
             this.workerIdPath = workerIdParentPath + SEP + workerId;
-            this.snowflake = new Snowflake(workerId, sequenceBitLength, workerIdBitLength);
+            this.snowflake = new Snowflake(workerIdBitLength, sequenceBitLength, workerId);
         } catch (Throwable e) {
             Threads.interruptIfNecessary(e);
             throw new Error("Zk snowflake server registry worker error.", e);
diff --git a/disjob-id/src/test/java/cn/ponfee/disjob/id/snowflake/SnowflakeTest.java b/disjob-id/src/test/java/cn/ponfee/disjob/id/snowflake/SnowflakeTest.java
index 57cc0206..8f92755e 100644
--- a/disjob-id/src/test/java/cn/ponfee/disjob/id/snowflake/SnowflakeTest.java
+++ b/disjob-id/src/test/java/cn/ponfee/disjob/id/snowflake/SnowflakeTest.java
@@ -35,10 +35,10 @@ public class SnowflakeTest {
 
     @Test
     public void testNew() {
-        new Snowflake(0, sequenceBits, workerIdBits);
-        new Snowflake(255, sequenceBits, workerIdBits);
-        Assertions.assertThrows(IllegalArgumentException.class, () -> new Snowflake(256, sequenceBits, workerIdBits));
-        Assertions.assertThrows(IllegalArgumentException.class, () -> new Snowflake(-1, sequenceBits, workerIdBits));
+        new Snowflake(workerIdBits, sequenceBits, 0);
+        new Snowflake(workerIdBits, sequenceBits, 255);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> new Snowflake(workerIdBits, sequenceBits, 256));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> new Snowflake(workerIdBits, sequenceBits, -1));
     }
 
     @Test
@@ -55,7 +55,7 @@ public class SnowflakeTest {
 
     @Test
     public void testGenerateId() {
-        Snowflake snowflake = new Snowflake(16, sequenceBits, workerIdBits);
+        Snowflake snowflake = new Snowflake(workerIdBits, sequenceBits, 16);
         for (int i = 0; i < 10; i++) {
             long num = snowflake.generateId();
             System.out.println(num + ": " + Bytes.toBinary(Bytes.toBytes(num)));
diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/SchedGroupService.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/SchedGroupService.java
index b181d891..2700f8c3 100644
--- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/SchedGroupService.java
+++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/SchedGroupService.java
@@ -67,8 +67,8 @@ public class SchedGroupService extends SingletonClassConstraint {
     private static final Logger LOG = LoggerFactory.getLogger(SchedGroupService.class);
 
     private static final Lock LOCK = new ReentrantLock();
-    private static volatile Map groupMap;
-    private static volatile Map> userMap;
+    private static volatile Map groupCache;
+    private static volatile Map> userCache;
 
     private final SchedGroupMapper groupMapper;
     private final SupervisorRegistry supervisorRegistry;
@@ -156,12 +156,12 @@ public class SchedGroupService extends SingletonClassConstraint {
     // ------------------------------------------------------------other static methods
 
     public static Set myGroups(String user) {
-        Set groups = userMap.get(user);
+        Set groups = userCache.get(user);
         return groups == null ? Collections.emptySet() : groups;
     }
 
     public static DisjobGroup getGroup(String group) {
-        DisjobGroup disjobGroup = groupMap.get(group);
+        DisjobGroup disjobGroup = groupCache.get(group);
         if (disjobGroup == null) {
             throw new GroupNotFoundException("Not found worker group: " + group);
         }
@@ -205,8 +205,8 @@ public class SchedGroupService extends SingletonClassConstraint {
                 Map groupMap0 = list.stream().collect(Collectors.toMap(SchedGroup::getGroup, DisjobGroup::of));
                 Map> userMap0 = toUserMap(list);
 
-                SchedGroupService.groupMap = groupMap0;
-                SchedGroupService.userMap = userMap0;
+                SchedGroupService.groupCache = groupMap0;
+                SchedGroupService.userCache = userMap0;
             } catch (Throwable t) {
                 LOG.error("Refresh sched group error.", t);
                 Threads.interruptIfNecessary(t);
diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/ServerInvokeService.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/ServerInvokeService.java
index fe939feb..fc42041c 100644
--- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/ServerInvokeService.java
+++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/application/ServerInvokeService.java
@@ -22,6 +22,7 @@ import cn.ponfee.disjob.common.collect.Collects;
 import cn.ponfee.disjob.common.concurrent.MultithreadExecutors;
 import cn.ponfee.disjob.common.concurrent.ThreadPoolExecutors;
 import cn.ponfee.disjob.common.util.Numbers;
+import cn.ponfee.disjob.common.util.Strings;
 import cn.ponfee.disjob.core.base.*;
 import cn.ponfee.disjob.core.dto.supervisor.EventParam;
 import cn.ponfee.disjob.core.dto.worker.ConfigureWorkerParam;
@@ -74,7 +75,7 @@ public class ServerInvokeService extends SingletonClassConstraint {
                                DestinationServerInvoker workerRpcClient) {
         this.supervisorRegistry = supervisorRegistry;
         this.currentSupervisor = currentSupervisor;
-        String supervisorContextPath = serverProperties.getServlet().getContextPath();
+        String supervisorContextPath = Strings.trimPath(serverProperties.getServlet().getContextPath());
         this.supervisorRpcClient = DestinationServerRestProxy.create(
             SupervisorRpcService.class,
             localSupervisorRpcProvider,
diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/configuration/WorkerProperties.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/configuration/WorkerProperties.java
index 59c345a4..edcbc822 100644
--- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/configuration/WorkerProperties.java
+++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/configuration/WorkerProperties.java
@@ -91,8 +91,8 @@ public class WorkerProperties extends ToJsonString implements Serializable {
         Assert.isTrue(keepAliveTimeSeconds > 0, "Keep alive time seconds must be greater 0.");
         Assert.isTrue(processThreadPoolSize > 0, "Process thread pool size must be greater than 0.");
         Assert.isTrue(supervisorContextPath.startsWith(Str.SLASH), () -> "Supervisor context-path must start with '/': " + supervisorContextPath);
-        if (supervisorContextPath.length() > 1) {
-            Assert.isTrue(!supervisorContextPath.endsWith(Str.SLASH), "Supervisor context-path cannot end with '/': " + supervisorContextPath);
+        if (supervisorContextPath.length() > 1 && supervisorContextPath.endsWith(Str.SLASH)) {
+            throw new IllegalArgumentException("Supervisor context-path cannot end with '/': " + supervisorContextPath);
         }
     }
 
-- 
Gitee


From 502751f9ebcf0639a022f6cb1fb2d93b62f9b86c Mon Sep 17 00:00:00 2001
From: Ponfee 
Date: Sat, 25 May 2024 13:42:59 +0800
Subject: [PATCH 10/19] upgrade druid version to 1.2.22

---
 disjob-admin/pom.xml                          |  2 +-
 .../com/ruoyi/DisjobAdminApplication.java     |  3 +-
 .../com/ruoyi/common/utils/ExceptionUtil.java | 40 -------------
 .../java/com/ruoyi/common/utils/Threads.java  | 15 -----
 .../concurrent/AbstractHeartbeatThread.java   |  1 -
 .../concurrent/AsyncDelayedExecutor.java      |  1 -
 .../disjob/common/concurrent/LoopThread.java  |  1 -
 .../disjob/common/concurrent/Threads.java     | 28 ++++-----
 .../{base => concurrent}/TripState.java       |  2 +-
 .../cn/ponfee/disjob/common/util/Numbers.java | 59 ++++++++-----------
 .../disjob/common/util/NumbersTest.java       | 50 ++++++++++++++++
 .../disjob/core/base/WorkerMetrics.java       |  2 +-
 .../dispatch/TaskDispatchException.java       |  2 +-
 .../disjob/dispatch/http/Controller.java      | 43 ++++++++++++++
 .../dispatch/http/HttpTaskReceiver.java       | 17 ------
 .../dispatch/redis/RedisTaskReceiver.java     |  2 +-
 .../disjob/registry/ServerRegistry.java       |  2 +-
 .../rpc/DiscoveryServerRestTemplate.java      |  2 -
 .../registry/rpc/RpcInvokeException.java      | 16 -----
 disjob-registry/disjob-registry-etcd/pom.xml  | 10 ++++
 .../disjob/supervisor/SupervisorStartup.java  |  2 +-
 .../configuration/SupervisorLifecycle.java    |  2 +-
 disjob-test/pom.xml                           | 11 ++++
 .../ponfee/disjob/worker/WorkerStartup.java   |  2 +-
 .../disjob/worker/base/WorkerThreadPool.java  |  2 +-
 .../worker/configuration/WorkerLifecycle.java |  4 +-
 .../worker/provider/WorkerRpcProvider.java    |  3 +-
 pom.xml                                       |  2 +-
 28 files changed, 168 insertions(+), 158 deletions(-)
 delete mode 100644 disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/ExceptionUtil.java
 rename disjob-common/src/main/java/cn/ponfee/disjob/common/{base => concurrent}/TripState.java (97%)
 create mode 100644 disjob-common/src/test/java/cn/ponfee/disjob/common/util/NumbersTest.java
 create mode 100644 disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/Controller.java

diff --git a/disjob-admin/pom.xml b/disjob-admin/pom.xml
index b46f6e5b..caef11ab 100644
--- a/disjob-admin/pom.xml
+++ b/disjob-admin/pom.xml
@@ -37,7 +37,7 @@
     2.7.18
     1.13.0
     2.1.0
-    1.2.21
+    1.2.22
     1.21
     2.3.3
     1.4.7
diff --git a/disjob-admin/ruoyi-admin/src/main/java/com/ruoyi/DisjobAdminApplication.java b/disjob-admin/ruoyi-admin/src/main/java/com/ruoyi/DisjobAdminApplication.java
index 34b1700c..340bed7c 100644
--- a/disjob-admin/ruoyi-admin/src/main/java/com/ruoyi/DisjobAdminApplication.java
+++ b/disjob-admin/ruoyi-admin/src/main/java/com/ruoyi/DisjobAdminApplication.java
@@ -1,5 +1,6 @@
 package com.ruoyi;
 
+import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
@@ -10,7 +11,7 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
  * @author ruoyi
  */
 @SpringBootApplication(
-    exclude = {DataSourceAutoConfiguration.class},
+    exclude = {DataSourceAutoConfiguration.class, DruidDataSourceAutoConfigure.class},
     scanBasePackages = {"com.ruoyi", "cn.ponfee.disjob.admin"}
 )
 public class DisjobAdminApplication {
diff --git a/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/ExceptionUtil.java b/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/ExceptionUtil.java
deleted file mode 100644
index 6ae8a4c4..00000000
--- a/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/ExceptionUtil.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.ruoyi.common.utils;
-
-import org.apache.commons.lang3.exception.ExceptionUtils;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
-/**
- * 错误信息处理类。
- *
- * @author ruoyi
- */
-public class ExceptionUtil
-{
-    /**
-     * 获取exception的详细错误信息。
-     */
-    public static String getExceptionMessage(Throwable e)
-    {
-        StringWriter sw = new StringWriter();
-        e.printStackTrace(new PrintWriter(sw, true));
-        return sw.toString();
-    }
-
-    public static String getRootErrorMessage(Exception e)
-    {
-        Throwable root = ExceptionUtils.getRootCause(e);
-        root = (root == null ? e : root);
-        if (root == null)
-        {
-            return "";
-        }
-        String msg = root.getMessage();
-        if (msg == null)
-        {
-            return "null";
-        }
-        return StringUtils.defaultString(msg);
-    }
-}
diff --git a/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java b/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java
index a1736a1e..9b70e0ee 100644
--- a/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java
+++ b/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java
@@ -14,21 +14,6 @@ public class Threads
 {
     private static final Logger logger = LoggerFactory.getLogger(Threads.class);
 
-    /**
-     * sleep等待,单位为毫秒
-     */
-    public static void sleep(long milliseconds)
-    {
-        try
-        {
-            Thread.sleep(milliseconds);
-        }
-        catch (InterruptedException e)
-        {
-            return;
-        }
-    }
-
     /**
      * 停止线程池
      * 先使用shutdown, 停止接收新任务并尝试完成所有已存在任务.
diff --git a/disjob-common/src/main/java/cn/ponfee/disjob/common/concurrent/AbstractHeartbeatThread.java b/disjob-common/src/main/java/cn/ponfee/disjob/common/concurrent/AbstractHeartbeatThread.java
index 8d0a0e33..9a068fb5 100644
--- a/disjob-common/src/main/java/cn/ponfee/disjob/common/concurrent/AbstractHeartbeatThread.java
+++ b/disjob-common/src/main/java/cn/ponfee/disjob/common/concurrent/AbstractHeartbeatThread.java
@@ -16,7 +16,6 @@
 
 package cn.ponfee.disjob.common.concurrent;
 
-import cn.ponfee.disjob.common.base.TripState;
 import com.google.common.base.CaseFormat;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/disjob-common/src/main/java/cn/ponfee/disjob/common/concurrent/AsyncDelayedExecutor.java b/disjob-common/src/main/java/cn/ponfee/disjob/common/concurrent/AsyncDelayedExecutor.java
index c9de4df4..bf75cfb1 100644
--- a/disjob-common/src/main/java/cn/ponfee/disjob/common/concurrent/AsyncDelayedExecutor.java
+++ b/disjob-common/src/main/java/cn/ponfee/disjob/common/concurrent/AsyncDelayedExecutor.java
@@ -16,7 +16,6 @@
 
 package cn.ponfee.disjob.common.concurrent;
 
-import cn.ponfee.disjob.common.base.TripState;
 import cn.ponfee.disjob.common.exception.Throwables.ThrowingRunnable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/disjob-common/src/main/java/cn/ponfee/disjob/common/concurrent/LoopThread.java b/disjob-common/src/main/java/cn/ponfee/disjob/common/concurrent/LoopThread.java
index a01b54b4..a10ad8cd 100644
--- a/disjob-common/src/main/java/cn/ponfee/disjob/common/concurrent/LoopThread.java
+++ b/disjob-common/src/main/java/cn/ponfee/disjob/common/concurrent/LoopThread.java
@@ -16,7 +16,6 @@
 
 package cn.ponfee.disjob.common.concurrent;
 
-import cn.ponfee.disjob.common.base.TripState;
 import cn.ponfee.disjob.common.exception.Throwables.ThrowingRunnable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/disjob-common/src/main/java/cn/ponfee/disjob/common/concurrent/Threads.java b/disjob-common/src/main/java/cn/ponfee/disjob/common/concurrent/Threads.java
index 76118f10..8051523e 100644
--- a/disjob-common/src/main/java/cn/ponfee/disjob/common/concurrent/Threads.java
+++ b/disjob-common/src/main/java/cn/ponfee/disjob/common/concurrent/Threads.java
@@ -146,16 +146,16 @@ public final class Threads {
             return;
         }
 
+        long halfJoinMillis = joinMillis / 2;
+
         // wait joined
-        joinThread(thread, joinMillis / 2);
-        if (isStopped(thread)) {
+        if (isStoppedAfterJoin(thread, halfJoinMillis)) {
             return;
         }
 
         // again wait joined with interrupt
         thread.interrupt();
-        joinThread(thread, joinMillis / 2);
-        if (isStopped(thread)) {
+        if (isStoppedAfterJoin(thread, halfJoinMillis)) {
             return;
         }
 
@@ -164,22 +164,22 @@ public final class Threads {
             // 如果在run方法内用 try{...} catch(Throwable e){} 捕获住,则线程不会停止执行
             LOG.warn("Invoke java.lang.Thread#stop() method begin: {}", thread.getName());
             thread.stop();
-            LOG.warn("Invoke java.lang.Thread#stop() method finished: {}", thread.getName());
+            LOG.warn("Invoke java.lang.Thread#stop() method end: {}", thread.getName());
         } catch (Throwable t) {
             LOG.error("Invoke java.lang.Thread#stop() method failed: " + thread.getName(), t);
         }
     }
 
-    private static void joinThread(Thread thread, long joinTimeoutMills) {
-        if (joinTimeoutMills <= 0) {
-            return;
-        }
-        try {
-            thread.join(joinTimeoutMills);
-        } catch (Throwable e) {
-            LOG.error("Join thread terminal interrupted: " + thread.getName(), e);
-            interruptIfNecessary(e);
+    private static boolean isStoppedAfterJoin(Thread thread, long joinTimeoutMills) {
+        if (joinTimeoutMills > 0) {
+            try {
+                thread.join(joinTimeoutMills);
+            } catch (Throwable e) {
+                LOG.error("Join thread terminal interrupted: " + thread.getName(), e);
+                interruptIfNecessary(e);
+            }
         }
+        return isStopped(thread);
     }
 
 }
diff --git a/disjob-common/src/main/java/cn/ponfee/disjob/common/base/TripState.java b/disjob-common/src/main/java/cn/ponfee/disjob/common/concurrent/TripState.java
similarity index 97%
rename from disjob-common/src/main/java/cn/ponfee/disjob/common/base/TripState.java
rename to disjob-common/src/main/java/cn/ponfee/disjob/common/concurrent/TripState.java
index e77eac1e..999f4b5a 100644
--- a/disjob-common/src/main/java/cn/ponfee/disjob/common/base/TripState.java
+++ b/disjob-common/src/main/java/cn/ponfee/disjob/common/concurrent/TripState.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package cn.ponfee.disjob.common.base;
+package cn.ponfee.disjob.common.concurrent;
 
 import java.util.concurrent.atomic.AtomicInteger;
 
diff --git a/disjob-common/src/main/java/cn/ponfee/disjob/common/util/Numbers.java b/disjob-common/src/main/java/cn/ponfee/disjob/common/util/Numbers.java
index 3d8cd097..cdcbf17a 100644
--- a/disjob-common/src/main/java/cn/ponfee/disjob/common/util/Numbers.java
+++ b/disjob-common/src/main/java/cn/ponfee/disjob/common/util/Numbers.java
@@ -410,15 +410,15 @@ public final class Numbers {
     /**
      * Returns a string value of double
      *
-     * @param d      the double value
-     * @param scale  the scale
+     * @param value the double value
+     * @param scale the scale
      * @return a string
      */
-    public static String format(double d, int scale) {
+    public static String format(double value, int scale) {
         NumberFormat nf = NumberFormat.getInstance();
         nf.setMaximumFractionDigits(scale);
         nf.setGroupingUsed(false);
-        return nf.format(d);
+        return nf.format(value);
     }
 
     /**
@@ -503,56 +503,45 @@ public final class Numbers {
 
         List> result = new ArrayList<>(size);
         int last = -1;
-        for (int a : slice(number, size)) {
-            if (a == 0) {
+        for (int value : slice(number, size)) {
+            if (value == 0) {
                 break;
             }
-            result.add(Tuple2.of(last += 1, last += a - 1));
+            result.add(Tuple2.of(last += 1, last += value - 1));
         }
 
         return result;
     }
 
     /**
-     * Split the bill for coupon amount
- * - * split(new int[]{249, 249, 249, 3}, 748) -> [249, 249, 248, 2] + * Prorate the value for array + *

split(new int[]{249, 249, 249, 3}, 748) -> [249, 249, 248, 2] * - * @param bills the bills - * @param value the coupon amount value - * @return split result + * @param array the array + * @param value the value + * @return prorate result */ - public static int[] split(Long orderId, int[] bills, int value) { - int total = IntStream.of(bills).sum(); - if (total < value) { - // value = total; - LOG.warn("Total bill amount={} cannot less than coupon amount={}: {}", total, value, orderId); - } - - int[] result = new int[bills.length]; - if (bills.length == 0 || value == 0) { + public static int[] prorate(int[] array, int value) { + int[] result = new int[array.length]; + if (array.length == 0 || value == 0) { return result; } - float rate; - int i = 0, n = bills.length - 1; + int total = IntStream.of(array).sum(); + double rate; + int i = 0, n = array.length - 1; for (; i < n; i++) { // rate <= 1.0 - rate = value / (float) total; - - // 不能用Math.round:面值为748分钱的券 去平摊账单 [249, 249, 249, 3],最后金额为3分钱的账单项要平摊掉4分钱 - result[i] = Math.min(Math.round(bills[i] * rate), value); - // 因为result[i]是ceil后的结果,所以按比率上来算value减得会更多,即rate只会递减,所以不会出现溢出(后面的费用项不够抵扣)的情况 - //result[i] = Math.min((int) Math.ceil(bills[i] * rate), value); + rate = value / (double) total; + result[i] = Math.min((int) Math.ceil(array[i] * rate), value); value -= result[i]; - total -= bills[i]; + total -= array[i]; if (value == 0) { break; } } - // the last bill item if (i == n) { result[i] = value; } @@ -576,11 +565,11 @@ public final class Numbers { /** * To upper hex string and remove prefix 0 * - * @param num the BigInteger + * @param value the BigInteger value * @return upper hex string */ - public static String toHex(BigInteger num) { - String hex = Hex.encodeHexString(num.toByteArray(), false); + public static String toHex(BigInteger value) { + String hex = Hex.encodeHexString(value.toByteArray(), false); if (ALL_ZERO_PATTERN.matcher(hex).matches()) { return "0"; } diff --git a/disjob-common/src/test/java/cn/ponfee/disjob/common/util/NumbersTest.java b/disjob-common/src/test/java/cn/ponfee/disjob/common/util/NumbersTest.java new file mode 100644 index 00000000..245dd877 --- /dev/null +++ b/disjob-common/src/test/java/cn/ponfee/disjob/common/util/NumbersTest.java @@ -0,0 +1,50 @@ +/* + * Copyright 2022-2024 Ponfee (http://www.ponfee.cn/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.ponfee.disjob.common.util; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; + +/** + * Numbers test + * + * @author Ponfee + */ +public class NumbersTest { + + @Test + public void testProrate() { + Assertions.assertEquals("[95, 3, 102]", Arrays.toString(Numbers.prorate(new int[]{43, 1, 47}, 200))); + Assertions.assertEquals("[29, 1, 31]", Arrays.toString(Numbers.prorate(new int[]{43, 1, 47}, 61))); + } + + @Test + public void testPartition() { + Assertions.assertEquals("[(0, 0)]", Numbers.partition(0, 2).toString()); + Assertions.assertEquals("[(0, 0), (1, 1)]", Numbers.partition(2, 3).toString()); + Assertions.assertEquals("[(0, 2)]", Numbers.partition(3, 1).toString()); + Assertions.assertEquals("[(0, 3), (4, 7), (8, 10)]", Numbers.partition(11, 3).toString()); + } + + @Test + public void testSlice() { + Assertions.assertEquals("[4, 4, 3]", Arrays.toString(Numbers.slice(11, 3))); + } + +} diff --git a/disjob-core/src/main/java/cn/ponfee/disjob/core/base/WorkerMetrics.java b/disjob-core/src/main/java/cn/ponfee/disjob/core/base/WorkerMetrics.java index acf1e147..c0c2ec30 100644 --- a/disjob-core/src/main/java/cn/ponfee/disjob/core/base/WorkerMetrics.java +++ b/disjob-core/src/main/java/cn/ponfee/disjob/core/base/WorkerMetrics.java @@ -41,7 +41,7 @@ public class WorkerMetrics extends ToJsonString implements Serializable { /** * Worker ID */ - String workerId; + private String workerId; /** * 启动时间 diff --git a/disjob-dispatch/disjob-dispatch-api/src/main/java/cn/ponfee/disjob/dispatch/TaskDispatchException.java b/disjob-dispatch/disjob-dispatch-api/src/main/java/cn/ponfee/disjob/dispatch/TaskDispatchException.java index 6c354092..b07e6655 100644 --- a/disjob-dispatch/disjob-dispatch-api/src/main/java/cn/ponfee/disjob/dispatch/TaskDispatchException.java +++ b/disjob-dispatch/disjob-dispatch-api/src/main/java/cn/ponfee/disjob/dispatch/TaskDispatchException.java @@ -21,7 +21,7 @@ package cn.ponfee.disjob.dispatch; * * @author Ponfee */ -public class TaskDispatchException extends Exception { +class TaskDispatchException extends Exception { private static final long serialVersionUID = 2626305365213783551L; public TaskDispatchException(String msg) { diff --git a/disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/Controller.java b/disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/Controller.java new file mode 100644 index 00000000..6ddca1ab --- /dev/null +++ b/disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/Controller.java @@ -0,0 +1,43 @@ +/* + * Copyright 2022-2024 Ponfee (http://www.ponfee.cn/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.ponfee.disjob.dispatch.http; + +import cn.ponfee.disjob.core.base.WorkerRpcService; +import cn.ponfee.disjob.dispatch.ExecuteTaskParam; +import io.swagger.v3.oas.annotations.Hidden; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +/** + * Http task receiver controller + * + * @author Ponfee + */ +@Hidden +@RequestMapping(WorkerRpcService.PREFIX_PATH) +interface Controller { + + /** + * Receive task http method + * + * @param param the task + * @return {@code true} if received successfully + */ + @PostMapping("/task/receive") + boolean receive(ExecuteTaskParam param); + +} diff --git a/disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/HttpTaskReceiver.java b/disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/HttpTaskReceiver.java index 57d538e7..c30b5086 100644 --- a/disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/HttpTaskReceiver.java +++ b/disjob-dispatch/disjob-dispatch-http/src/main/java/cn/ponfee/disjob/dispatch/http/HttpTaskReceiver.java @@ -19,12 +19,8 @@ package cn.ponfee.disjob.dispatch.http; import cn.ponfee.disjob.common.base.TimingWheel; import cn.ponfee.disjob.common.spring.RpcController; import cn.ponfee.disjob.core.base.Worker; -import cn.ponfee.disjob.core.base.WorkerRpcService; import cn.ponfee.disjob.dispatch.ExecuteTaskParam; import cn.ponfee.disjob.dispatch.TaskReceiver; -import io.swagger.v3.oas.annotations.Hidden; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; /** * Task receiver based http. @@ -45,17 +41,4 @@ public class HttpTaskReceiver extends TaskReceiver implements Controller { } -@Hidden -@RequestMapping(WorkerRpcService.PREFIX_PATH) -interface Controller { - /** - * Receive task http method - * - * @param param the task - * @return {@code true} if received successfully - */ - @PostMapping("/task/receive") - boolean receive(ExecuteTaskParam param); - -} diff --git a/disjob-dispatch/disjob-dispatch-redis/src/main/java/cn/ponfee/disjob/dispatch/redis/RedisTaskReceiver.java b/disjob-dispatch/disjob-dispatch-redis/src/main/java/cn/ponfee/disjob/dispatch/redis/RedisTaskReceiver.java index a2518cec..db4426d4 100644 --- a/disjob-dispatch/disjob-dispatch-redis/src/main/java/cn/ponfee/disjob/dispatch/redis/RedisTaskReceiver.java +++ b/disjob-dispatch/disjob-dispatch-redis/src/main/java/cn/ponfee/disjob/dispatch/redis/RedisTaskReceiver.java @@ -18,8 +18,8 @@ package cn.ponfee.disjob.dispatch.redis; import cn.ponfee.disjob.common.base.SingletonClassConstraint; import cn.ponfee.disjob.common.base.TimingWheel; -import cn.ponfee.disjob.common.base.TripState; import cn.ponfee.disjob.common.concurrent.AbstractHeartbeatThread; +import cn.ponfee.disjob.common.concurrent.TripState; import cn.ponfee.disjob.common.spring.RedisKeyRenewal; import cn.ponfee.disjob.common.spring.RedisTemplateUtils; import cn.ponfee.disjob.core.base.JobConstants; diff --git a/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/ServerRegistry.java b/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/ServerRegistry.java index 8b227398..8c156233 100644 --- a/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/ServerRegistry.java +++ b/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/ServerRegistry.java @@ -16,7 +16,7 @@ package cn.ponfee.disjob.registry; -import cn.ponfee.disjob.common.base.TripState; +import cn.ponfee.disjob.common.concurrent.TripState; import cn.ponfee.disjob.common.util.GenericUtils; import cn.ponfee.disjob.core.base.Server; import cn.ponfee.disjob.registry.discovery.DiscoveryServer; diff --git a/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/DiscoveryServerRestTemplate.java b/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/DiscoveryServerRestTemplate.java index 3a4b17e2..e6b86b82 100644 --- a/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/DiscoveryServerRestTemplate.java +++ b/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/DiscoveryServerRestTemplate.java @@ -47,8 +47,6 @@ import java.util.concurrent.ThreadLocalRandom; final class DiscoveryServerRestTemplate { private static final Logger LOG = LoggerFactory.getLogger(DiscoveryServerRestTemplate.class); - - private final Discovery discoveryServer; private final RestTemplate restTemplate; private final int retryMaxCount; diff --git a/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/RpcInvokeException.java b/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/RpcInvokeException.java index 1be6c7c1..809f2b62 100644 --- a/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/RpcInvokeException.java +++ b/disjob-registry/disjob-registry-api/src/main/java/cn/ponfee/disjob/registry/rpc/RpcInvokeException.java @@ -25,26 +25,10 @@ public class RpcInvokeException extends RuntimeException { private static final long serialVersionUID = -2137715994975702313L; public RpcInvokeException() { - super(); - } - - public RpcInvokeException(String message) { - super(message); - } - - public RpcInvokeException(Throwable cause) { - super(cause); } public RpcInvokeException(String message, Throwable cause) { super(message, cause); } - protected RpcInvokeException(String message, - Throwable cause, - boolean enableSuppression, - boolean writableStackTrace) { - super(message, cause, enableSuppression, writableStackTrace); - } - } diff --git a/disjob-registry/disjob-registry-etcd/pom.xml b/disjob-registry/disjob-registry-etcd/pom.xml index 0ad48bd8..727e2fa8 100644 --- a/disjob-registry/disjob-registry-etcd/pom.xml +++ b/disjob-registry/disjob-registry-etcd/pom.xml @@ -35,6 +35,10 @@ javax.annotation javax.annotation-api + + com.google.guava + guava + @@ -43,6 +47,12 @@ jetcd-launcher ${jetcd.version} test + + + com.google.guava + guava + + diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/SupervisorStartup.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/SupervisorStartup.java index 3d7eaf18..6c9df632 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/SupervisorStartup.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/SupervisorStartup.java @@ -17,7 +17,7 @@ package cn.ponfee.disjob.supervisor; import cn.ponfee.disjob.common.base.Startable; -import cn.ponfee.disjob.common.base.TripState; +import cn.ponfee.disjob.common.concurrent.TripState; import cn.ponfee.disjob.common.exception.Throwables.ThrowingRunnable; import cn.ponfee.disjob.common.lock.DoInLocked; import cn.ponfee.disjob.core.base.Supervisor; diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/configuration/SupervisorLifecycle.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/configuration/SupervisorLifecycle.java index 122bcdef..a8f1e809 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/configuration/SupervisorLifecycle.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/configuration/SupervisorLifecycle.java @@ -16,7 +16,7 @@ package cn.ponfee.disjob.supervisor.configuration; -import cn.ponfee.disjob.common.base.TripState; +import cn.ponfee.disjob.common.concurrent.TripState; import cn.ponfee.disjob.common.lock.DoInLocked; import cn.ponfee.disjob.core.base.Supervisor; import cn.ponfee.disjob.dispatch.TaskDispatcher; diff --git a/disjob-test/pom.xml b/disjob-test/pom.xml index 5f4bbedb..c3459054 100644 --- a/disjob-test/pom.xml +++ b/disjob-test/pom.xml @@ -22,6 +22,7 @@ disjob-worker ${project.parent.version} + com.mysql @@ -49,6 +50,16 @@ cn.ponfee embedded-redis ${embedded-redis.version} + + + com.google.guava + guava + + + commons-io + commons-io + + diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/WorkerStartup.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/WorkerStartup.java index 9a11443d..1b76d532 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/WorkerStartup.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/WorkerStartup.java @@ -17,7 +17,7 @@ package cn.ponfee.disjob.worker; import cn.ponfee.disjob.common.base.Startable; -import cn.ponfee.disjob.common.base.TripState; +import cn.ponfee.disjob.common.concurrent.TripState; import cn.ponfee.disjob.common.exception.Throwables.ThrowingRunnable; import cn.ponfee.disjob.core.base.RetryProperties; import cn.ponfee.disjob.core.base.SupervisorRpcService; diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/WorkerThreadPool.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/WorkerThreadPool.java index 88b02274..c53c3f53 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/WorkerThreadPool.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/base/WorkerThreadPool.java @@ -17,10 +17,10 @@ package cn.ponfee.disjob.worker.base; import cn.ponfee.disjob.common.base.SingletonClassConstraint; -import cn.ponfee.disjob.common.base.TripState; import cn.ponfee.disjob.common.concurrent.LoggedUncaughtExceptionHandler; import cn.ponfee.disjob.common.concurrent.ThreadPoolExecutors; import cn.ponfee.disjob.common.concurrent.Threads; +import cn.ponfee.disjob.common.concurrent.TripState; import cn.ponfee.disjob.common.exception.Throwables; import cn.ponfee.disjob.common.exception.Throwables.ThrowingRunnable; import cn.ponfee.disjob.common.util.Jsons; diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/configuration/WorkerLifecycle.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/configuration/WorkerLifecycle.java index 612589c7..c22926f5 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/configuration/WorkerLifecycle.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/configuration/WorkerLifecycle.java @@ -16,7 +16,7 @@ package cn.ponfee.disjob.worker.configuration; -import cn.ponfee.disjob.common.base.TripState; +import cn.ponfee.disjob.common.concurrent.TripState; import cn.ponfee.disjob.core.base.JobConstants; import cn.ponfee.disjob.core.base.RetryProperties; import cn.ponfee.disjob.core.base.SupervisorRpcService; @@ -51,7 +51,7 @@ public class WorkerLifecycle implements SmartLifecycle { WorkerRegistry workerRegistry, TaskReceiver taskReceiver, @Qualifier(JobConstants.SPRING_BEAN_NAME_REST_TEMPLATE) RestTemplate restTemplate, - // if the current server also is a supervisor -> cn.ponfee.disjob.supervisor.provider.rpc.SupervisorRpcProvider + // if the current server also is a supervisor -> cn.ponfee.disjob.supervisor.provider.SupervisorRpcProvider @Nullable SupervisorRpcService supervisorRpcService) { this.workerStartup = WorkerStartup.builder() .currentWorker(currentWorker) diff --git a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/provider/WorkerRpcProvider.java b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/provider/WorkerRpcProvider.java index 622d6b9d..1703f071 100644 --- a/disjob-worker/src/main/java/cn/ponfee/disjob/worker/provider/WorkerRpcProvider.java +++ b/disjob-worker/src/main/java/cn/ponfee/disjob/worker/provider/WorkerRpcProvider.java @@ -40,8 +40,7 @@ public class WorkerRpcProvider implements WorkerRpcService { private final Worker.Current currentWork; private final WorkerRegistry workerRegistry; - public WorkerRpcProvider(Worker.Current currentWork, - WorkerRegistry workerRegistry) { + public WorkerRpcProvider(Worker.Current currentWork, WorkerRegistry workerRegistry) { this.currentWork = currentWork; this.workerRegistry = workerRegistry; } diff --git a/pom.xml b/pom.xml index 21cea47c..644f9b9b 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ 2.5.3 1.4 0.18.1 - 1.19.7 + 1.19.8 3.2.0 -- Gitee From 4ed4f4bbe56701badbb0bcb2f17d9aa3f480d487 Mon Sep 17 00:00:00 2001 From: Ponfee Date: Sun, 26 May 2024 10:45:10 +0800 Subject: [PATCH 11/19] optimize code --- .../java/com/ruoyi/common/core/domain/R.java | 114 ------------------ .../com/ruoyi/common/utils/StringUtils.java | 5 + .../common/utils/file/FileUploadUtils.java | 3 +- .../ruoyi/common/utils/file/FileUtils.java | 3 +- 4 files changed, 7 insertions(+), 118 deletions(-) delete mode 100644 disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/R.java diff --git a/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/R.java b/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/R.java deleted file mode 100644 index 67337dd7..00000000 --- a/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/R.java +++ /dev/null @@ -1,114 +0,0 @@ -package com.ruoyi.common.core.domain; - -import java.io.Serializable; - -/** - * 响应信息主体 - * - * @author ruoyi - */ -public class R implements Serializable -{ - private static final long serialVersionUID = 1L; - - /** 成功 */ - public static final int SUCCESS = 0; - - /** 失败 */ - public static final int FAIL = 500; - - private int code; - - private String msg; - - private T data; - - public static R ok() - { - return restResult(null, SUCCESS, "操作成功"); - } - - public static R ok(T data) - { - return restResult(data, SUCCESS, "操作成功"); - } - - public static R ok(T data, String msg) - { - return restResult(data, SUCCESS, msg); - } - - public static R fail() - { - return restResult(null, FAIL, "操作失败"); - } - - public static R fail(String msg) - { - return restResult(null, FAIL, msg); - } - - public static R fail(T data) - { - return restResult(data, FAIL, "操作失败"); - } - - public static R fail(T data, String msg) - { - return restResult(data, FAIL, msg); - } - - public static R fail(int code, String msg) - { - return restResult(null, code, msg); - } - - private static R restResult(T data, int code, String msg) - { - R apiResult = new R<>(); - apiResult.setCode(code); - apiResult.setData(data); - apiResult.setMsg(msg); - return apiResult; - } - - public int getCode() - { - return code; - } - - public void setCode(int code) - { - this.code = code; - } - - public String getMsg() - { - return msg; - } - - public void setMsg(String msg) - { - this.msg = msg; - } - - public T getData() - { - return data; - } - - public void setData(T data) - { - this.data = data; - } - - public static Boolean isError(R ret) - { - return !isSuccess(ret); - } - - public static Boolean isSuccess(R ret) - { - return R.SUCCESS == ret.getCode(); - } -} diff --git a/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java b/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java index 7333f86c..3d6b64e7 100644 --- a/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java +++ b/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java @@ -670,4 +670,9 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils } return sb.toString(); } + + public static String uuid32() { + return Constants.UUID_GENERATOR.generateId().toString().replace("-", ""); + } + } diff --git a/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java b/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java index 1486e8b1..b23101e5 100644 --- a/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java +++ b/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java @@ -122,8 +122,7 @@ public class FileUploadUtils */ public static String extractFilename(MultipartFile file) { String baseName = FilenameUtils.getBaseName(file.getOriginalFilename()); - String uuid = Constants.UUID_GENERATOR.generateId().toString().replaceAll("-", ""); - return StringUtils.format("{}/{}_{}.{}", DateUtils.datePath(), baseName, uuid, getExtension(file)); + return StringUtils.format("{}/{}_{}.{}", DateUtils.datePath(), baseName, StringUtils.uuid32(), getExtension(file)); } public static File getAbsoluteFile(String uploadDir, String fileName) throws IOException diff --git a/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java b/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java index f2340f89..a341bb9b 100644 --- a/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java +++ b/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java @@ -1,7 +1,6 @@ package com.ruoyi.common.utils.file; import com.ruoyi.common.config.RuoYiConfig; -import com.ruoyi.common.constant.Constants; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import org.apache.commons.io.FilenameUtils; @@ -86,7 +85,7 @@ public class FileUtils try { String extension = getFileExtendName(data); - pathName = DateUtils.datePath() + "/" + Constants.UUID_GENERATOR.generateId() + "." + extension; + pathName = DateUtils.datePath() + "/" + StringUtils.uuid32() + "." + extension; File file = FileUploadUtils.getAbsoluteFile(uploadDir, pathName); fos = new FileOutputStream(file); fos.write(data); -- Gitee From 80471d3cd57c554c2c302a2f14a22fba4018a1f3 Mon Sep 17 00:00:00 2001 From: Ponfee Date: Sat, 1 Jun 2024 12:54:32 +0800 Subject: [PATCH 12/19] upgrade maven jar version --- disjob-admin/pom.xml | 6 ++-- .../generator/controller/GenController.java | 2 +- .../disjob/common/concurrent/Threads.java | 4 +-- .../common/lock/DoInDatabaseLocked.java | 12 ++++---- .../disjob/common/model/PageRequest.java | 2 +- .../cn/ponfee/disjob/common/util/Numbers.java | 5 +++- .../disjob/common/util/NumbersTest.java | 1 + .../ponfee/disjob/common/util/ThreadTest.java | 8 +++++ .../snowflake/db/DbDistributedSnowflake.java | 2 +- .../database/DatabaseServerRegistry.java | 21 +++++++------- disjob-samples/pom.xml | 2 +- sql/mysql-disjob.sql | 29 +++++++++++++++++++ 12 files changed, 68 insertions(+), 26 deletions(-) diff --git a/disjob-admin/pom.xml b/disjob-admin/pom.xml index caef11ab..593f06f2 100644 --- a/disjob-admin/pom.xml +++ b/disjob-admin/pom.xml @@ -37,20 +37,20 @@ 2.7.18 1.13.0 2.1.0 - 1.2.22 + 1.2.23 1.21 2.3.3 1.4.7 1.2.83 - 6.6.0 + 6.6.1 2.16.1 5.2.5 2.3 1.8.0 - 1.6.0 3.10.1 3.3.2 + 1.6.0 diff --git a/disjob-admin/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java b/disjob-admin/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java index 0c9dadb5..08a3fc87 100644 --- a/disjob-admin/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java +++ b/disjob-admin/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java @@ -206,7 +206,7 @@ public class GenController extends BaseController MySqlCreateTableStatement createTableStatement = (MySqlCreateTableStatement) sqlStatement; if (genTableService.createTable(createTableStatement.toString())) { - String tableName = createTableStatement.getTableName().replaceAll("`", ""); + String tableName = createTableStatement.getTableName().replace("`", ""); tableNames.add(tableName); } } diff --git a/disjob-common/src/main/java/cn/ponfee/disjob/common/concurrent/Threads.java b/disjob-common/src/main/java/cn/ponfee/disjob/common/concurrent/Threads.java index 8051523e..b21e87c9 100644 --- a/disjob-common/src/main/java/cn/ponfee/disjob/common/concurrent/Threads.java +++ b/disjob-common/src/main/java/cn/ponfee/disjob/common/concurrent/Threads.java @@ -81,12 +81,12 @@ public final class Threads { } /** - * 获取堆栈信息 + * 获取栈帧 * * @param depth the depth * @return stack trace */ - public static String getStackTrace(int depth) { + public static String getStackFrame(int depth) { StackTraceElement[] traces = Thread.currentThread().getStackTrace(); return depth < traces.length ? traces[depth].toString() : null; } diff --git a/disjob-common/src/main/java/cn/ponfee/disjob/common/lock/DoInDatabaseLocked.java b/disjob-common/src/main/java/cn/ponfee/disjob/common/lock/DoInDatabaseLocked.java index e5857164..e363b639 100644 --- a/disjob-common/src/main/java/cn/ponfee/disjob/common/lock/DoInDatabaseLocked.java +++ b/disjob-common/src/main/java/cn/ponfee/disjob/common/lock/DoInDatabaseLocked.java @@ -38,12 +38,12 @@ public final class DoInDatabaseLocked implements DoInLocked { private static final String TABLE_NAME = "sched_lock"; private static final String CREATE_TABLE_DDL = - "CREATE TABLE IF NOT EXISTS `" + TABLE_NAME + "` ( \n" + - " `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'auto increment id', \n" + - " `name` VARCHAR(60) NOT NULL COMMENT 'lock name', \n" + - " PRIMARY KEY (`id`), \n" + - " UNIQUE KEY `uk_name` (`name`) \n" + - ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='database lock'; \n" ; + "CREATE TABLE IF NOT EXISTS `" + TABLE_NAME + "` ( \n" + + " `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'auto increment primary key id', \n" + + " `name` VARCHAR(60) NOT NULL COMMENT 'lock name', \n" + + " PRIMARY KEY (`id`), \n" + + " UNIQUE KEY `uk_name` (`name`) \n" + + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='Distributed lock based database'; \n" ; private static final String INSERT_SQL = "INSERT INTO " + TABLE_NAME + " (name) VALUES (?)"; diff --git a/disjob-common/src/main/java/cn/ponfee/disjob/common/model/PageRequest.java b/disjob-common/src/main/java/cn/ponfee/disjob/common/model/PageRequest.java index 4387ebe0..69d1c270 100644 --- a/disjob-common/src/main/java/cn/ponfee/disjob/common/model/PageRequest.java +++ b/disjob-common/src/main/java/cn/ponfee/disjob/common/model/PageRequest.java @@ -62,7 +62,7 @@ public class PageRequest extends ToJsonString implements RemovableTypedKeyValue< /** * Parameter of query condition */ - private Map params; + private Map params = Collections.emptyMap(); @Override public Object getValue(String key) { diff --git a/disjob-common/src/main/java/cn/ponfee/disjob/common/util/Numbers.java b/disjob-common/src/main/java/cn/ponfee/disjob/common/util/Numbers.java index cdcbf17a..3d3f42d2 100644 --- a/disjob-common/src/main/java/cn/ponfee/disjob/common/util/Numbers.java +++ b/disjob-common/src/main/java/cn/ponfee/disjob/common/util/Numbers.java @@ -515,7 +515,10 @@ public final class Numbers { /** * Prorate the value for array - *

split(new int[]{249, 249, 249, 3}, 748) -> [249, 249, 248, 2] + *

+     *  prorate(new int[]{249, 249, 249, 3}, 748) = [249, 249, 248, 2]
+     *  prorate(new int[]{43, 1, 47}       , 61 ) = [29, 1, 31]
+     * 
* * @param array the array * @param value the value diff --git a/disjob-common/src/test/java/cn/ponfee/disjob/common/util/NumbersTest.java b/disjob-common/src/test/java/cn/ponfee/disjob/common/util/NumbersTest.java index 245dd877..b8fe6acf 100644 --- a/disjob-common/src/test/java/cn/ponfee/disjob/common/util/NumbersTest.java +++ b/disjob-common/src/test/java/cn/ponfee/disjob/common/util/NumbersTest.java @@ -32,6 +32,7 @@ public class NumbersTest { public void testProrate() { Assertions.assertEquals("[95, 3, 102]", Arrays.toString(Numbers.prorate(new int[]{43, 1, 47}, 200))); Assertions.assertEquals("[29, 1, 31]", Arrays.toString(Numbers.prorate(new int[]{43, 1, 47}, 61))); + Assertions.assertEquals("[249, 249, 248, 2]", Arrays.toString(Numbers.prorate(new int[]{249, 249, 249, 3}, 748))); } @Test diff --git a/disjob-common/src/test/java/cn/ponfee/disjob/common/util/ThreadTest.java b/disjob-common/src/test/java/cn/ponfee/disjob/common/util/ThreadTest.java index ab824877..83d2841d 100644 --- a/disjob-common/src/test/java/cn/ponfee/disjob/common/util/ThreadTest.java +++ b/disjob-common/src/test/java/cn/ponfee/disjob/common/util/ThreadTest.java @@ -17,6 +17,7 @@ package cn.ponfee.disjob.common.util; import cn.ponfee.disjob.common.concurrent.LoggedUncaughtExceptionHandler; +import cn.ponfee.disjob.common.concurrent.Threads; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.slf4j.Logger; @@ -68,4 +69,11 @@ class ThreadTest { Assertions.assertFalse(t.isAlive()); } + @Test + void testGetStackFrame() { + System.out.println(Threads.getStackFrame(0)); + System.out.println(Threads.getStackFrame(1)); + System.out.println(Threads.getStackFrame(2)); + System.out.println(Threads.getStackFrame(3)); + } } diff --git a/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/db/DbDistributedSnowflake.java b/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/db/DbDistributedSnowflake.java index 829d4f0f..63027433 100644 --- a/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/db/DbDistributedSnowflake.java +++ b/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/db/DbDistributedSnowflake.java @@ -68,7 +68,7 @@ public class DbDistributedSnowflake extends SingletonClassConstraint implements private static final String CREATE_TABLE_DDL = "CREATE TABLE IF NOT EXISTS `" + TABLE_NAME + "` ( \n" + - " `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'auto increment id', \n" + + " `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'auto increment primary key id', \n" + " `biz_tag` VARCHAR(60) NOT NULL COMMENT 'biz tag', \n" + " `server_tag` VARCHAR(128) NOT NULL COMMENT 'server tag, for example ip:port', \n" + " `worker_id` INT UNSIGNED NOT NULL COMMENT 'snowflake worker-id', \n" + diff --git a/disjob-registry/disjob-registry-database/src/main/java/cn/ponfee/disjob/registry/database/DatabaseServerRegistry.java b/disjob-registry/disjob-registry-database/src/main/java/cn/ponfee/disjob/registry/database/DatabaseServerRegistry.java index 66d5af85..3515c6ee 100644 --- a/disjob-registry/disjob-registry-database/src/main/java/cn/ponfee/disjob/registry/database/DatabaseServerRegistry.java +++ b/disjob-registry/disjob-registry-database/src/main/java/cn/ponfee/disjob/registry/database/DatabaseServerRegistry.java @@ -46,15 +46,15 @@ public abstract class DatabaseServerRegistry private static final String TABLE_NAME = "sched_registry"; private static final String CREATE_TABLE_DDL = - "CREATE TABLE IF NOT EXISTS `" + TABLE_NAME + "` ( \n" + - " `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'auto increment id', \n" + - " `namespace` VARCHAR(60) NOT NULL COMMENT 'registry namespace', \n" + - " `role` VARCHAR(30) NOT NULL COMMENT 'role(worker, supervisor)', \n" + - " `server` VARCHAR(255) NOT NULL COMMENT 'server serialization', \n" + - " `heartbeat_time` BIGINT UNSIGNED NOT NULL COMMENT 'last heartbeat time', \n" + - " PRIMARY KEY (`id`), \n" + - " UNIQUE KEY `uk_namespace_role_server` (`namespace`, `role`, `server`) \n" + - ") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='Database registry'; \n" ; + "CREATE TABLE IF NOT EXISTS `" + TABLE_NAME + "` ( \n" + + " `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'auto increment primary key id', \n" + + " `namespace` VARCHAR(60) NOT NULL COMMENT 'registry namespace', \n" + + " `role` VARCHAR(30) NOT NULL COMMENT 'role(worker, supervisor)', \n" + + " `server` VARCHAR(255) NOT NULL COMMENT 'server serialization', \n" + + " `heartbeat_time` BIGINT UNSIGNED NOT NULL COMMENT 'last heartbeat time', \n" + + " PRIMARY KEY (`id`), \n" + + " UNIQUE KEY `uk_namespace_role_server` (`namespace`, `role`, `server`) \n" + + ") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='Disjob registry based database'; \n" ; private static final String REMOVE_DEAD_SQL = "DELETE FROM " + TABLE_NAME + " WHERE namespace=? AND role=? AND heartbeat_time // ------------------------------------------------------------------private methods /** - * 心跳注册,不需要事务及原子性保证 + * 心跳注册 */ private void registerServers() { for (R server : registered) { final String serialize = server.serialize(); RetryTemplate.executeQuietly(() -> { + // 此处不需要使用Spring事务 Object[] updateArgs = {System.currentTimeMillis(), namespace, registerRoleName, serialize}; if (isOneAffectedRow(jdbcTemplateWrapper.update(HEARTBEAT_SQL, updateArgs))) { log.debug("Database heartbeat register update: {}, {}, {}, {}", updateArgs); diff --git a/disjob-samples/pom.xml b/disjob-samples/pom.xml index c72497de..fbec9139 100644 --- a/disjob-samples/pom.xml +++ b/disjob-samples/pom.xml @@ -37,8 +37,8 @@ 3.10.1 - 1.6.0 3.3.0 + 1.6.0 diff --git a/sql/mysql-disjob.sql b/sql/mysql-disjob.sql index 055a4a64..c38a4083 100644 --- a/sql/mysql-disjob.sql +++ b/sql/mysql-disjob.sql @@ -176,6 +176,35 @@ CREATE TABLE `sched_group` ( ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='分组表'; +CREATE TABLE IF NOT EXISTS `sched_lock` ( + `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'auto increment primary key id', + `name` VARCHAR(60) NOT NULL COMMENT 'lock name', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='Distributed lock based database'; + +CREATE TABLE IF NOT EXISTS `sched_snowflake` ( + `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'auto increment primary key id', + `biz_tag` VARCHAR(60) NOT NULL COMMENT 'biz tag', + `server_tag` VARCHAR(128) NOT NULL COMMENT 'server tag, for example ip:port', + `worker_id` INT UNSIGNED NOT NULL COMMENT 'snowflake worker-id', + `heartbeat_time` BIGINT UNSIGNED NOT NULL COMMENT 'last heartbeat time', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_biztag_servertag` (`biz_tag`, `server_tag`), + UNIQUE KEY `uk_biztag_workerid` (`biz_tag`, `worker_id`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='Allocate snowflake worker-id'; + +CREATE TABLE IF NOT EXISTS `sched_registry` ( + `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'auto increment primary key id', + `namespace` VARCHAR(60) NOT NULL COMMENT 'registry namespace', + `role` VARCHAR(30) NOT NULL COMMENT 'role(worker, supervisor)', + `server` VARCHAR(255) NOT NULL COMMENT 'server serialization', + `heartbeat_time` BIGINT UNSIGNED NOT NULL COMMENT 'last heartbeat time', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_namespace_role_server` (`namespace`, `role`, `server`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='Disjob registry based database'; + + -- ---------------------------- -- INITIALIZE TEST SAMPLES JOB -- ---------------------------- -- Gitee From 1655819aca7a8dd587323eca4663186af9fa8cb9 Mon Sep 17 00:00:00 2001 From: Ponfee Date: Sun, 2 Jun 2024 12:02:02 +0800 Subject: [PATCH 13/19] sync ruoyi code --- README.md | 4 +- disjob-admin/pom.xml | 2 +- .../controller/system/SysUserController.java | 6 + .../main/resources/static/ruoyi/css/ry-ui.css | 4 +- .../src/main/resources/templates/main.html | 2 +- .../common/core/domain/entity/SysUser.java | 2 +- .../com/ruoyi/common/utils/DictUtils.java | 8 + .../com/ruoyi/common/utils/poi/ExcelUtil.java | 7 +- .../java/com/ruoyi/common/xss/XssFilter.java | 7 +- .../framework/web/service/CacheService.java | 3 +- .../com/ruoyi/generator/domain/GenTable.java | 13 ++ .../ruoyi/generator/util/VelocityUtils.java | 39 ++++ .../src/main/resources/generator.yml | 2 +- .../mapper/generator/GenTableMapper.xml | 14 +- .../resources/templates/tool/gen/edit.html | 26 ++- .../src/main/resources/vm/html/add.html.vm | 170 ++++++++++-------- .../src/main/resources/vm/html/edit.html.vm | 169 +++++++++-------- .../main/resources/vm/html/list-tree.html.vm | 2 +- .../src/main/resources/vm/html/list.html.vm | 2 +- .../src/main/resources/vm/html/tree.html.vm | 2 +- .../src/main/resources/vm/java/domain.java.vm | 2 +- .../src/main/resources/vm/xml/mapper.xml.vm | 27 +-- .../ruoyi/system/service/ISysRoleService.java | 4 +- .../service/impl/SysDeptServiceImpl.java | 2 +- .../service/impl/SysRoleServiceImpl.java | 14 +- .../service/impl/SysUserServiceImpl.java | 8 +- .../disjob/common/base/ToJsonString.java | 2 +- .../cn/ponfee/disjob/common/date/Dates.java | 15 -- .../disjob/common/date/DateFormatTest.java | 13 -- .../ponfee/disjob/common/date/DatesTest.java | 28 +-- .../common/date/LocalDateTimeFormatTest.java | 2 + .../cn/ponfee/disjob/core/model/SchedJob.java | 96 +++++----- .../component/AbstractJobManager.java | 2 - sql/mysql-disjob_admin.sql | 3 +- 34 files changed, 398 insertions(+), 304 deletions(-) diff --git a/README.md b/README.md index 25961ed9..e7a8c134 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Logo

- 一款分布式的任务调度及分布式计算框架 + 一款分布式的任务调度与分布式计算框架

License @@ -19,7 +19,7 @@ **`简体中文`** | [English](README.en.md) -一款分布式的任务调度及分布式计算框架,除了具备常规的任务调度功能外,还提供暂停/取消运行中的任务、恢复执行被暂停的任务、任务分片、失败重试、广播任务、任务依赖、工作流任务(DAG)、管理器与执行器分离部署、Web管理后台等能力。 +一款分布式的任务调度与分布式计算框架,除了具备常规的任务调度功能外,还提供暂停/取消运行中的任务、恢复执行被暂停的任务、任务分片、失败重试、广播任务、任务依赖、工作流任务(DAG)、管理器与执行器分离部署、Web管理后台等能力。 轻量级,简单易用,特别适合长任务的执行。有较好的伸缩性、扩展性、稳定性,历经生产检验。 diff --git a/disjob-admin/pom.xml b/disjob-admin/pom.xml index 593f06f2..1ee16229 100644 --- a/disjob-admin/pom.xml +++ b/disjob-admin/pom.xml @@ -40,7 +40,7 @@ 1.2.23 1.21 2.3.3 - 1.4.7 + 2.1.0 1.2.83 6.6.1 2.16.1 diff --git a/disjob-admin/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/disjob-admin/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java index 8605b01a..3b2ce102 100644 --- a/disjob-admin/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java +++ b/disjob-admin/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java @@ -127,6 +127,9 @@ public class SysUserController extends BaseController @ResponseBody public AjaxResult addSave(@Validated SysUser user) { + deptService.checkDeptDataScope(user.getDeptId()); + roleService.checkRoleDataScope(user.getRoleIds()); + if (!userService.checkLoginNameUnique(user)) { return error("新增用户'" + user.getLoginName() + "'失败,登录账号已存在"); @@ -186,6 +189,8 @@ public class SysUserController extends BaseController { userService.checkUserAllowed(user); userService.checkUserDataScope(user.getUserId()); + deptService.checkDeptDataScope(user.getDeptId()); + roleService.checkRoleDataScope(user.getRoleIds()); if (!userService.checkLoginNameUnique(user)) { return error("修改用户'" + user.getLoginName() + "'失败,登录账号已存在"); @@ -256,6 +261,7 @@ public class SysUserController extends BaseController public AjaxResult insertAuthRole(Long userId, Long[] roleIds) { userService.checkUserDataScope(userId); + roleService.checkRoleDataScope(roleIds); userService.insertUserAuth(userId, roleIds); AuthorizationUtils.clearAllCachedAuthorizationInfo(); return success(); diff --git a/disjob-admin/ruoyi-admin/src/main/resources/static/ruoyi/css/ry-ui.css b/disjob-admin/ruoyi-admin/src/main/resources/static/ruoyi/css/ry-ui.css index 5abfbb3b..a3b08b76 100644 --- a/disjob-admin/ruoyi-admin/src/main/resources/static/ruoyi/css/ry-ui.css +++ b/disjob-admin/ruoyi-admin/src/main/resources/static/ruoyi/css/ry-ui.css @@ -384,12 +384,12 @@ label.error { position: relative; padding-left: 25px; padding-right: 15px; - padding-top: 8px; + padding-top: 7px; } .icheckbox, .icheckbox-blue, .iradio, .iradio-blue, .iradio-purple { position: absolute; - top: 8px; + top: 7px; left: 0 } diff --git a/disjob-admin/ruoyi-admin/src/main/resources/templates/main.html b/disjob-admin/ruoyi-admin/src/main/resources/templates/main.html index c4803d9c..8e735e09 100644 --- a/disjob-admin/ruoyi-admin/src/main/resources/templates/main.html +++ b/disjob-admin/ruoyi-admin/src/main/resources/templates/main.html @@ -106,7 +106,7 @@

Logo License JDK Maven Central Build status

简体中文 | English

-

一款分布式的任务调度及分布式计算框架,除了具备常规的任务调度功能外,还提供:暂停/取消运行中的任务、恢复执行被暂停的任务、任务分片、失败重试、广播任务、任务依赖、工作流任务(DAG)、管理器与执行器分离部署、Web管理后台等能力。

+

一款分布式的任务调度与分布式计算框架,除了具备常规的任务调度功能外,还提供:暂停/取消运行中的任务、恢复执行被暂停的任务、任务分片、失败重试、广播任务、任务依赖、工作流任务(DAG)、管理器与执行器分离部署、Web管理后台等能力。

轻量级,简单易用,特别适合长任务的执行。有较好的伸缩性、扩展性、稳定性,历经生产检验。

Architecture

    diff --git a/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java index b427a63a..b40e7ad4 100644 --- a/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java +++ b/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java @@ -26,7 +26,7 @@ public class SysUser extends BaseEntity private static final long serialVersionUID = 1L; /** 用户ID */ - @Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号") + @Excel(name = "用户序号", type = Type.EXPORT, cellType = ColumnType.NUMERIC, prompt = "用户编号") private Long userId; /** 部门ID */ diff --git a/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java b/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java index 54f29107..1ce896f6 100644 --- a/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java +++ b/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java @@ -55,6 +55,10 @@ public class DictUtils */ public static String getDictLabel(String dictType, String dictValue) { + if (StringUtils.isEmpty(dictValue)) + { + return StringUtils.EMPTY; + } return getDictLabel(dictType, dictValue, SEPARATOR); } @@ -67,6 +71,10 @@ public class DictUtils */ public static String getDictValue(String dictType, String dictLabel) { + if (StringUtils.isEmpty(dictLabel)) + { + return StringUtils.EMPTY; + } return getDictValue(dictType, dictLabel, SEPARATOR); } diff --git a/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java index 3e7aa916..3b26eac0 100644 --- a/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java +++ b/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java @@ -424,7 +424,12 @@ public class ExcelUtil } else if (StringUtils.isNotEmpty(attr.dictType())) { - val = reverseDictByExp(Convert.toStr(val), attr.dictType(), attr.separator()); + if (!sysDictMap.containsKey(attr.dictType() + val)) + { + String dictValue = reverseDictByExp(Convert.toStr(val), attr.dictType(), attr.separator()); + sysDictMap.put(attr.dictType() + val, dictValue); + } + val = sysDictMap.get(attr.dictType() + val); } else if (!attr.handler().equals(ExcelHandlerAdapter.class)) { diff --git a/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/xss/XssFilter.java b/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/xss/XssFilter.java index 424036f5..51819671 100644 --- a/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/xss/XssFilter.java +++ b/disjob-admin/ruoyi-common/src/main/java/com/ruoyi/common/xss/XssFilter.java @@ -7,6 +7,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** @@ -27,11 +28,7 @@ public class XssFilter implements Filter String tempExcludes = filterConfig.getInitParameter("excludes"); if (StringUtils.isNotEmpty(tempExcludes)) { - String[] url = tempExcludes.split(","); - for (int i = 0; url != null && i < url.length; i++) - { - excludes.add(url[i]); - } + excludes.addAll(Arrays.asList(tempExcludes.split(","))); } } diff --git a/disjob-admin/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/CacheService.java b/disjob-admin/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/CacheService.java index e2102dd9..55070887 100644 --- a/disjob-admin/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/CacheService.java +++ b/disjob-admin/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/CacheService.java @@ -6,6 +6,7 @@ import org.apache.commons.lang3.ArrayUtils; import org.springframework.stereotype.Service; import java.util.Set; +import java.util.TreeSet; /** * 缓存操作处理 @@ -34,7 +35,7 @@ public class CacheService */ public Set getCacheKeys(String cacheName) { - return CacheUtils.getCache(cacheName).keys(); + return new TreeSet<>(CacheUtils.getCache(cacheName).keys()); } /** diff --git a/disjob-admin/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java b/disjob-admin/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java index f8e3a432..82de40dd 100644 --- a/disjob-admin/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java +++ b/disjob-admin/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java @@ -62,6 +62,9 @@ public class GenTable extends BaseEntity @NotBlank(message = "作者不能为空") private String functionAuthor; + /** 表单布局(单列 双列 三列) */ + private int formColNum; + /** 生成代码方式(0zip压缩包 1自定义路径) */ private String genType; @@ -216,6 +219,16 @@ public class GenTable extends BaseEntity this.functionAuthor = functionAuthor; } + public int getFormColNum() + { + return formColNum; + } + + public void setFormColNum(int formColNum) + { + this.formColNum = formColNum; + } + public String getGenType() { return genType; diff --git a/disjob-admin/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java b/disjob-admin/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java index 55395d56..7a882f33 100644 --- a/disjob-admin/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java +++ b/disjob-admin/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java @@ -51,6 +51,8 @@ public class VelocityUtils velocityContext.put("basePackage", getPackagePrefix(packageName)); velocityContext.put("packageName", packageName); velocityContext.put("author", genTable.getFunctionAuthor()); + velocityContext.put("colXsNum", getColXsNum(genTable.getFormColNum())); + velocityContext.put("colSmNum", getColSmNum(genTable.getFormColNum())); velocityContext.put("datetime", DateUtils.getDate()); velocityContext.put("pkColumn", genTable.getPkColumn()); velocityContext.put("importList", getImportList(genTable)); @@ -382,4 +384,41 @@ public class VelocityUtils } return num; } + + /** + * 获取表单排列网格 + * + * @param formColNum 表单布局方式 + * @return 排列类样式 + */ + public static String getColXsNum(int formColNum) + { + String colXsNum = "col-xs-12"; + if (formColNum == 2) + { + return "col-xs-6"; + } + else if (formColNum == 3) + { + return "col-xs-4"; + } + return colXsNum; + } + + /** + * 获取表单label网格 + * + * @param formColNum 表单布局方式 + * @return 网格类样式 + */ + public static String getColSmNum(int formColNum) + { + String colSmNum = "col-sm-3"; + if (formColNum == 2 || formColNum == 3) + { + return "col-sm-4"; + } + return colSmNum; + } + } diff --git a/disjob-admin/ruoyi-generator/src/main/resources/generator.yml b/disjob-admin/ruoyi-generator/src/main/resources/generator.yml index 3111cabe..e5327b6e 100644 --- a/disjob-admin/ruoyi-generator/src/main/resources/generator.yml +++ b/disjob-admin/ruoyi-generator/src/main/resources/generator.yml @@ -8,4 +8,4 @@ gen: # 自动去除表前缀,默认是false autoRemovePre: false # 表前缀(生成类名不会包含表前缀,多个用逗号分隔) - tablePrefix: sched_ \ No newline at end of file + tablePrefix: sched_ diff --git a/disjob-admin/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml b/disjob-admin/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml index bc7cf527..5b7a08c1 100644 --- a/disjob-admin/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml +++ b/disjob-admin/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml @@ -17,6 +17,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -54,7 +55,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select table_id, table_name, table_comment, sub_table_name, sub_table_fk_name, class_name, tpl_category, package_name, module_name, business_name, function_name, function_author, gen_type, gen_path, options, create_by, create_time, update_by, update_time, remark from gen_table + select table_id, table_name, table_comment, sub_table_name, sub_table_fk_name, class_name, tpl_category, package_name, module_name, business_name, function_name, function_author, form_col_num, gen_type, gen_path, options, create_by, create_time, update_by, update_time, remark from gen_table
@@ -135,13 +135,13 @@
- +
- -
- - -
+
@@ -156,6 +156,18 @@ +
+
+ +
+ +
+ + +
+
+
+