From 1ea36679ba1d8953efe086a3d815f7931d1bb6a6 Mon Sep 17 00:00:00 2001 From: baoliang Date: Thu, 25 Apr 2019 16:51:55 +0800 Subject: [PATCH] add time out for process definition. --- .../api/service/ProcessDefinitionService.java | 1 + .../main/java/cn/escheduler/common/Constants.java | 5 +++++ .../main/java/cn/escheduler/dao/ProcessDao.java | 1 + .../dao/mapper/ProcessDefinitionMapper.java | 5 +++++ .../mapper/ProcessDefinitionMapperProvider.java | 4 +++- .../dao/mapper/ProcessInstanceMapper.java | 11 +++++++++++ .../dao/mapper/ProcessInstanceMapperProvider.java | 2 ++ .../java/cn/escheduler/dao/model/ProcessData.java | 10 ++++++++++ .../escheduler/dao/model/ProcessDefinition.java | 15 +++++++++++++++ .../cn/escheduler/dao/model/ProcessInstance.java | 15 +++++++++++++++ 10 files changed, 68 insertions(+), 1 deletion(-) diff --git a/escheduler-api/src/main/java/cn/escheduler/api/service/ProcessDefinitionService.java b/escheduler-api/src/main/java/cn/escheduler/api/service/ProcessDefinitionService.java index 119c840e5..cbfbcb64a 100644 --- a/escheduler-api/src/main/java/cn/escheduler/api/service/ProcessDefinitionService.java +++ b/escheduler-api/src/main/java/cn/escheduler/api/service/ProcessDefinitionService.java @@ -125,6 +125,7 @@ public class ProcessDefinitionService extends BaseDAGService { processDefine.setDesc(desc); processDefine.setLocations(locations); processDefine.setConnects(connects); + processDefine.setTimeout(processData.getTimeout()); //custom global params List globalParamsList = processData.getGlobalParams(); diff --git a/escheduler-common/src/main/java/cn/escheduler/common/Constants.java b/escheduler-common/src/main/java/cn/escheduler/common/Constants.java index e3c56b8a9..abf29fdc9 100644 --- a/escheduler-common/src/main/java/cn/escheduler/common/Constants.java +++ b/escheduler-common/src/main/java/cn/escheduler/common/Constants.java @@ -331,6 +331,11 @@ public final class Constants { */ public static final int MAX_TASK_TIMEOUT = 24 * 3600; + /** + * max task timeout + */ + public static final int MAX_PROCESS_TIMEOUT = Integer.MAX_VALUE; + /** * heartbeat threads number diff --git a/escheduler-dao/src/main/java/cn/escheduler/dao/ProcessDao.java b/escheduler-dao/src/main/java/cn/escheduler/dao/ProcessDao.java index bb48d8e52..b18fb5e97 100644 --- a/escheduler-dao/src/main/java/cn/escheduler/dao/ProcessDao.java +++ b/escheduler-dao/src/main/java/cn/escheduler/dao/ProcessDao.java @@ -482,6 +482,7 @@ public class ProcessDao extends AbstractBaseDao { // set process instance priority processInstance.setProcessInstancePriority(command.getProcessInstancePriority()); processInstance.setWorkerGroupId(command.getWorkerGroupId()); + processInstance.setTimeout(processDefinition.getTimeout()); return processInstance; } diff --git a/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessDefinitionMapper.java b/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessDefinitionMapper.java index 0484b7ceb..64948f0b7 100644 --- a/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessDefinitionMapper.java +++ b/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessDefinitionMapper.java @@ -94,6 +94,7 @@ public interface ProcessDefinitionMapper { @Result(property = "locations", column = "locations", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "connects", column = "connects", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "projectName", column = "project_name", javaType = String.class, jdbcType = JdbcType.VARCHAR), + @Result(property = "timeout", column = "timeout", javaType = String.class, jdbcType = JdbcType.INTEGER), @Result(property = "receivers", column = "receivers", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "receiversCc", column = "receivers_cc", javaType = String.class, jdbcType = JdbcType.VARCHAR) @@ -121,6 +122,7 @@ public interface ProcessDefinitionMapper { @Result(property = "userName", column = "user_name", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "locations", column = "locations", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "connects", column = "connects", javaType = String.class, jdbcType = JdbcType.VARCHAR), + @Result(property = "timeout", column = "timeout", javaType = String.class, jdbcType = JdbcType.INTEGER), @Result(property = "projectName", column = "project_name", javaType = String.class, jdbcType = JdbcType.VARCHAR) }) @SelectProvider(type = ProcessDefinitionMapperProvider.class, method = "queryByDefineName") @@ -157,6 +159,7 @@ public interface ProcessDefinitionMapper { @Result(property = "updateTime", column = "update_time", javaType = Timestamp.class, jdbcType = JdbcType.DATE), @Result(property = "flag", column = "flag", typeHandler = EnumOrdinalTypeHandler.class, javaType = Flag.class, jdbcType = JdbcType.TINYINT), @Result(property = "userName", column = "user_name", javaType = String.class, jdbcType = JdbcType.VARCHAR), + @Result(property = "timeout", column = "timeout", javaType = String.class, jdbcType = JdbcType.INTEGER), @Result(property = "projectName", column = "project_name", javaType = String.class, jdbcType = JdbcType.VARCHAR) }) @SelectProvider(type = ProcessDefinitionMapperProvider.class, method = "queryAllDefinitionList") @@ -183,6 +186,7 @@ public interface ProcessDefinitionMapper { @Result(property = "flag", column = "flag", typeHandler = EnumOrdinalTypeHandler.class, javaType = Flag.class, jdbcType = JdbcType.TINYINT), @Result(property = "userName", column = "user_name", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "scheduleReleaseState", column = "schedule_release_state", typeHandler = EnumOrdinalTypeHandler.class, javaType = ReleaseState.class, jdbcType = JdbcType.TINYINT), + @Result(property = "timeout", column = "timeout", javaType = String.class, jdbcType = JdbcType.INTEGER), @Result(property = "projectName", column = "project_name", javaType = String.class, jdbcType = JdbcType.VARCHAR) }) @SelectProvider(type = ProcessDefinitionMapperProvider.class, method = "queryDefineListPaging") @@ -211,6 +215,7 @@ public interface ProcessDefinitionMapper { @Result(property = "locations", column = "locations", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "connects", column = "connects", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "userName", column = "user_name", javaType = String.class, jdbcType = JdbcType.VARCHAR), + @Result(property = "timeout", column = "timeout", javaType = String.class, jdbcType = JdbcType.INTEGER), @Result(property = "projectName", column = "project_name", javaType = String.class, jdbcType = JdbcType.VARCHAR) }) @SelectProvider(type = ProcessDefinitionMapperProvider.class, method = "queryDefinitionListByIdList") diff --git a/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessDefinitionMapperProvider.java b/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessDefinitionMapperProvider.java index cefbe14bb..192e46aec 100644 --- a/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessDefinitionMapperProvider.java +++ b/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessDefinitionMapperProvider.java @@ -55,6 +55,7 @@ public class ProcessDefinitionMapperProvider { VALUES("`connects`", "#{processDefinition.connects}"); VALUES("`create_time`", "#{processDefinition.createTime}"); VALUES("`update_time`", "#{processDefinition.updateTime}"); + VALUES("`timeout`", "#{processDefinition.timeout}"); VALUES("`flag`", EnumFieldUtil.genFieldStr("processDefinition.flag", ReleaseState.class)); VALUES("`user_id`", "#{processDefinition.userId}"); @@ -100,6 +101,7 @@ public class ProcessDefinitionMapperProvider { SET("`global_params`=#{processDefinition.globalParams}"); SET("`create_time`=#{processDefinition.createTime}"); SET("`update_time`=#{processDefinition.updateTime}"); + SET("`timeout`=#{processDefinition.timeout}"); SET("`flag`="+EnumFieldUtil.genFieldStr("processDefinition.flag", Flag.class)); SET("`user_id`=#{processDefinition.userId}"); @@ -173,7 +175,7 @@ public class ProcessDefinitionMapperProvider { */ public String queryDefineListPaging(Map parameter) { return new SQL() {{ - SELECT("td.id,td.name,td.version,td.release_state,td.project_id,td.user_id,td.`desc`,td.create_time,td.update_time,td.flag,td.global_params,td.receivers,td.receivers_cc,sc.schedule_release_state"); + SELECT("td.*,sc.schedule_release_state"); FROM(TABLE_NAME + " td"); LEFT_OUTER_JOIN(" (select process_definition_id,release_state as schedule_release_state from `t_escheduler_schedules` " + "group by `process_definition_id`,`release_state`) sc on sc.process_definition_id = td.id"); diff --git a/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessInstanceMapper.java b/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessInstanceMapper.java index b3f9f10b8..03fbd6db2 100644 --- a/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessInstanceMapper.java +++ b/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessInstanceMapper.java @@ -95,6 +95,7 @@ public interface ProcessInstanceMapper { @Result(property = "duration", column = "duration", javaType = Long.class, jdbcType = JdbcType.BIGINT), @Result(property = "tenantCode", column = "tenant_code", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "workerGroupId", column = "worker_group_id", javaType = Integer.class, jdbcType = JdbcType.INTEGER), + @Result(property = "timeout", column = "timeout", javaType = Integer.class, jdbcType = JdbcType.INTEGER), @Result(property = "processInstancePriority", column = "process_instance_priority", javaType = Priority.class, typeHandler = EnumOrdinalTypeHandler.class, jdbcType = JdbcType.TINYINT) }) @SelectProvider(type = ProcessInstanceMapperProvider.class, method = "queryDetailById") @@ -133,6 +134,7 @@ public interface ProcessInstanceMapper { @Result(property = "historyCmd", column = "history_cmd", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "dependenceScheduleTimes", column = "dependence_schedule_times", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "workerGroupId", column = "worker_group_id", javaType = Integer.class, jdbcType = JdbcType.INTEGER), + @Result(property = "timeout", column = "timeout", javaType = Integer.class, jdbcType = JdbcType.INTEGER), @Result(property = "processInstancePriority", column = "process_instance_priority", javaType = Priority.class, typeHandler = EnumOrdinalTypeHandler.class, jdbcType = JdbcType.TINYINT) }) @SelectProvider(type = ProcessInstanceMapperProvider.class, method = "queryById") @@ -171,6 +173,7 @@ public interface ProcessInstanceMapper { @Result(property = "dependenceScheduleTimes", column = "dependence_schedule_times", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "processInstanceJson", column = "process_instance_json", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "workerGroupId", column = "worker_group_id", javaType = Integer.class, jdbcType = JdbcType.INTEGER), + @Result(property = "timeout", column = "timeout", javaType = Integer.class, jdbcType = JdbcType.INTEGER), @Result(property = "processInstancePriority", column = "process_instance_priority", javaType = Priority.class, typeHandler = EnumOrdinalTypeHandler.class, jdbcType = JdbcType.TINYINT) }) @@ -209,6 +212,7 @@ public interface ProcessInstanceMapper { @Result(property = "dependenceScheduleTimes", column = "dependence_schedule_times", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "processInstanceJson", column = "process_instance_json", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "workerGroupId", column = "worker_group_id", javaType = Integer.class, jdbcType = JdbcType.INTEGER), + @Result(property = "timeout", column = "timeout", javaType = Integer.class, jdbcType = JdbcType.INTEGER), @Result(property = "processInstancePriority", column = "process_instance_priority", javaType = Priority.class, typeHandler = EnumOrdinalTypeHandler.class, jdbcType = JdbcType.TINYINT) }) @@ -256,6 +260,7 @@ public interface ProcessInstanceMapper { @Result(property = "duration", column = "duration", javaType = Long.class, jdbcType = JdbcType.BIGINT), @Result(property = "processInstanceJson", column = "process_instance_json", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "workerGroupId", column = "worker_group_id", javaType = Integer.class, jdbcType = JdbcType.INTEGER), + @Result(property = "timeout", column = "timeout", javaType = Integer.class, jdbcType = JdbcType.INTEGER), @Result(property = "processInstancePriority", column = "process_instance_priority", javaType = Priority.class, typeHandler = EnumOrdinalTypeHandler.class, jdbcType = JdbcType.TINYINT) }) @@ -352,6 +357,7 @@ public interface ProcessInstanceMapper { @Result(property = "duration", column = "duration", javaType = Long.class, jdbcType = JdbcType.BIGINT), @Result(property = "processInstanceJson", column = "process_instance_json", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "workerGroupId", column = "worker_group_id", javaType = Integer.class, jdbcType = JdbcType.INTEGER), + @Result(property = "timeout", column = "timeout", javaType = Integer.class, jdbcType = JdbcType.INTEGER), @Result(property = "processInstancePriority", column = "process_instance_priority", javaType = Priority.class, typeHandler = EnumOrdinalTypeHandler.class, jdbcType = JdbcType.TINYINT) }) @@ -444,6 +450,7 @@ public interface ProcessInstanceMapper { @Result(property = "duration", column = "duration", javaType = Long.class, jdbcType = JdbcType.BIGINT), @Result(property = "processInstanceJson", column = "process_instance_json", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "workerGroupId", column = "worker_group_id", javaType = Integer.class, jdbcType = JdbcType.INTEGER), + @Result(property = "timeout", column = "timeout", javaType = Integer.class, jdbcType = JdbcType.INTEGER), @Result(property = "processInstancePriority", column = "process_instance_priority", javaType = Priority.class, typeHandler = EnumOrdinalTypeHandler.class, jdbcType = JdbcType.TINYINT) }) @@ -488,6 +495,7 @@ public interface ProcessInstanceMapper { @Result(property = "duration", column = "duration", javaType = Long.class, jdbcType = JdbcType.BIGINT), @Result(property = "processInstanceJson", column = "process_instance_json", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "workerGroupId", column = "worker_group_id", javaType = Integer.class, jdbcType = JdbcType.INTEGER), + @Result(property = "timeout", column = "timeout", javaType = Integer.class, jdbcType = JdbcType.INTEGER), @Result(property = "processInstancePriority", column = "process_instance_priority", javaType = Priority.class, typeHandler = EnumOrdinalTypeHandler.class, jdbcType = JdbcType.TINYINT) }) @@ -532,6 +540,7 @@ public interface ProcessInstanceMapper { @Result(property = "dependenceScheduleTimes", column = "dependence_schedule_times", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "processInstanceJson", column = "process_instance_json", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "workerGroupId", column = "worker_group_id", javaType = Integer.class, jdbcType = JdbcType.INTEGER), + @Result(property = "timeout", column = "timeout", javaType = Integer.class, jdbcType = JdbcType.INTEGER), @Result(property = "processInstancePriority", column = "process_instance_priority", javaType = Priority.class, typeHandler = EnumOrdinalTypeHandler.class, jdbcType = JdbcType.TINYINT) }) @@ -574,6 +583,7 @@ public interface ProcessInstanceMapper { @Result(property = "dependenceScheduleTimes", column = "dependence_schedule_times", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "processInstanceJson", column = "process_instance_json", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "workerGroupId", column = "worker_group_id", javaType = Integer.class, jdbcType = JdbcType.INTEGER), + @Result(property = "timeout", column = "timeout", javaType = Integer.class, jdbcType = JdbcType.INTEGER), @Result(property = "processInstancePriority", column = "process_instance_priority", javaType = Priority.class, typeHandler = EnumOrdinalTypeHandler.class, jdbcType = JdbcType.TINYINT) }) @SelectProvider(type = ProcessInstanceMapperProvider.class, method = "queryLastRunningProcess") @@ -616,6 +626,7 @@ public interface ProcessInstanceMapper { @Result(property = "dependenceScheduleTimes", column = "dependence_schedule_times", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "processInstanceJson", column = "process_instance_json", javaType = String.class, jdbcType = JdbcType.VARCHAR), @Result(property = "workerGroupId", column = "worker_group_id", javaType = Integer.class, jdbcType = JdbcType.INTEGER), + @Result(property = "timeout", column = "timeout", javaType = Integer.class, jdbcType = JdbcType.INTEGER), @Result(property = "processInstancePriority", column = "process_instance_priority", javaType = Priority.class, typeHandler = EnumOrdinalTypeHandler.class, jdbcType = JdbcType.TINYINT) }) @SelectProvider(type = ProcessInstanceMapperProvider.class, method = "queryLastManualProcess") diff --git a/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessInstanceMapperProvider.java b/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessInstanceMapperProvider.java index 92df76873..cd9daa378 100644 --- a/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessInstanceMapperProvider.java +++ b/escheduler-dao/src/main/java/cn/escheduler/dao/mapper/ProcessInstanceMapperProvider.java @@ -68,6 +68,7 @@ public class ProcessInstanceMapperProvider { VALUES("`is_sub_process`", EnumFieldUtil.genFieldStr("processInstance.isSubProcess", Flag.class)); VALUES("`executor_id`", "#{processInstance.executorId}"); VALUES("`worker_group_id`", "#{processInstance.workerGroupId}"); + VALUES("`timeout`", "#{processInstance.timeout}"); VALUES("`process_instance_priority`", EnumFieldUtil.genFieldStr("processInstance.processInstancePriority", Priority.class)); } }.toString(); @@ -141,6 +142,7 @@ public class ProcessInstanceMapperProvider { SET("`is_sub_process`="+EnumFieldUtil.genFieldStr("processInstance.isSubProcess", Flag.class)); SET("`executor_id`=#{processInstance.executorId}"); SET("`worker_group_id`=#{processInstance.workerGroupId}"); + SET("`timeout`=#{processInstance.timeout}"); WHERE("`id`=#{processInstance.id}"); diff --git a/escheduler-dao/src/main/java/cn/escheduler/dao/model/ProcessData.java b/escheduler-dao/src/main/java/cn/escheduler/dao/model/ProcessData.java index ba967f8be..062314414 100644 --- a/escheduler-dao/src/main/java/cn/escheduler/dao/model/ProcessData.java +++ b/escheduler-dao/src/main/java/cn/escheduler/dao/model/ProcessData.java @@ -37,6 +37,9 @@ public class ProcessData { private List globalParams; + private int timeout; + + public ProcessData() { } @@ -82,4 +85,11 @@ public class ProcessData { this.globalParams = globalParams; } + public int getTimeout() { + return timeout; + } + + public void setTimeout(int timeout) { + this.timeout = timeout; + } } diff --git a/escheduler-dao/src/main/java/cn/escheduler/dao/model/ProcessDefinition.java b/escheduler-dao/src/main/java/cn/escheduler/dao/model/ProcessDefinition.java index 51498f5dd..fb0c1d0f9 100644 --- a/escheduler-dao/src/main/java/cn/escheduler/dao/model/ProcessDefinition.java +++ b/escheduler-dao/src/main/java/cn/escheduler/dao/model/ProcessDefinition.java @@ -136,6 +136,11 @@ public class ProcessDefinition { */ private ReleaseState scheduleReleaseState; + /** + * process warning time out. unit: minute + */ + private int timeout; + public String getName() { return name; @@ -316,6 +321,14 @@ public class ProcessDefinition { this.scheduleReleaseState = scheduleReleaseState; } + public int getTimeout() { + return timeout; + } + + public void setTimeout(int timeout) { + this.timeout = timeout; + } + @Override public String toString() { return "ProcessDefinition{" + @@ -340,6 +353,8 @@ public class ProcessDefinition { ", receivers='" + receivers + '\'' + ", receiversCc='" + receiversCc + '\'' + ", scheduleReleaseState=" + scheduleReleaseState + + ", timeout=" + timeout + '}'; } + } diff --git a/escheduler-dao/src/main/java/cn/escheduler/dao/model/ProcessInstance.java b/escheduler-dao/src/main/java/cn/escheduler/dao/model/ProcessInstance.java index b37450c33..f156752b9 100644 --- a/escheduler-dao/src/main/java/cn/escheduler/dao/model/ProcessInstance.java +++ b/escheduler-dao/src/main/java/cn/escheduler/dao/model/ProcessInstance.java @@ -183,6 +183,11 @@ public class ProcessInstance { */ private int workerGroupId; + /** + * process timeout for warning + */ + private int timeout; + public ProcessInstance(){ } @@ -495,6 +500,14 @@ public class ProcessInstance { this.workerGroupId = workerGroupId; } + public int getTimeout() { + return timeout; + } + + public void setTimeout(int timeout) { + this.timeout = timeout; + } + @Override public String toString() { return "ProcessInstance{" + @@ -528,7 +541,9 @@ public class ProcessInstance { ", historyCmd='" + historyCmd + '\'' + ", dependenceScheduleTimes='" + dependenceScheduleTimes + '\'' + ", duration=" + duration + + ", timeout=" + timeout + ", processInstancePriority=" + processInstancePriority + '}'; } + } -- GitLab