Browse Source

任务失败重试优化:收敛并废弃现有失败重试策略,新增任务属性 "失败重试次数",支持自定义失败重试次数,任务失败时将会根据该值进行失败重试;

xuxueli 6 years ago
parent
commit
c2d6b3ac14
20 changed files with 73 additions and 113 deletions
  1. 3 2
      doc/XXL-JOB官方文档.md
  2. 1 1
      doc/db/tables_xxl_job.sql
  3. 3 1
      xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java
  4. 0 36
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/enums/ExecutorFailStrategyEnum.java
  5. 1 1
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java
  6. 0 9
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java
  7. 9 0
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java
  8. 12 5
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java
  9. 21 11
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java
  10. 0 8
      xxl-job-admin/src/main/java/com/xxl/job/admin/service/XxlJobService.java
  11. 13 14
      xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java
  12. 6 8
      xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
  13. 0 1
      xxl-job-admin/src/main/resources/i18n/message.properties
  14. 0 1
      xxl-job-admin/src/main/resources/i18n/message_en.properties
  15. 0 5
      xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml
  16. 4 1
      xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml
  17. 0 2
      xxl-job-admin/src/main/webapp/static/js/joblog.index.1.js
  18. 0 3
      xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobInfoDaoTest.java
  19. 0 2
      xxl-job-core/src/main/java/com/xxl/job/core/handler/IJobHandler.java
  20. 0 2
      xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java

+ 3 - 2
doc/XXL-JOB官方文档.md View File

@@ -951,7 +951,6 @@ echo "分片总数 total = $3"
951 951
 --- | --- | ---
952 952
 成功 | IJobHandler.SUCCESS | 0
953 953
 失败 | IJobHandler.FAIL | -1(其他)
954
-失败重试 | IJobHandler.FAIL_RETRY | 101
955 954
 
956 955
 ### 5.16 任务超时控制
957 956
 支持设置任务超时时间,任务运行超时的情况下,将会主动中断任务;
@@ -1241,7 +1240,9 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
1241 1240
 - 22、告警邮件固定使用 UTF-8 编码格式,修复由机器编码导致的邮件乱码问题;
1242 1241
 - 23、新增任务运行模式 "GLUE模式(PHP) ",支持php脚本任务;
1243 1242
 - 24、执行器手动设置IP时取消绑定Host的操作,该IP仅供执行器注册使用;修复指定外网IP时无法绑定执行器Host的问题;
1244
-- 25、[迭代中]任务失败重试优化:收敛并废弃现有失败重试策略,新增任务属性 "失败重试次数",支持自定义失败重试次数,任务失败时将会根据该值进行失败重试;
1243
+- 25、任务失败重试优化:收敛并废弃现有失败重试策略,如调度失败、执行失败、状态码失败等,新增任务属性 "失败重试次数",支持自定义失败重试次数,任务失败时将会根据该值进行失败重试;
1244
+- 26、【迭代中】父子任务循环限制放开,支持特殊场景;
1245
+- 27、【迭代中】API服务支持动态参数;
1245 1246
 
1246 1247
 
1247 1248
 ### TODO LIST

+ 1 - 1
doc/db/tables_xxl_job.sql View File

@@ -162,7 +162,6 @@ CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_INFO` (
162 162
   `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
163 163
   `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',
164 164
   `executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞处理策略',
165
-  `executor_fail_strategy` varchar(50) DEFAULT NULL COMMENT '失败处理策略',
166 165
   `executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任务执行超时时间,单位秒',
167 166
   `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数',
168 167
   `glue_type` varchar(50) NOT NULL COMMENT 'GLUE类型',
@@ -181,6 +180,7 @@ CREATE TABLE `XXL_JOB_QRTZ_TRIGGER_LOG` (
181 180
   `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址',
182 181
   `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
183 182
   `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',
183
+  `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数',
184 184
   `trigger_time` datetime DEFAULT NULL COMMENT '调度-时间',
185 185
   `trigger_code` int(11) NOT NULL COMMENT '调度-结果',
186 186
   `trigger_msg` varchar(2048) DEFAULT NULL COMMENT '调度-日志',

+ 3 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java View File

@@ -3,6 +3,7 @@ package com.xxl.job.admin.controller;
3 3
 import com.xxl.job.admin.core.model.XxlJobGroup;
4 4
 import com.xxl.job.admin.core.model.XxlJobInfo;
5 5
 import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum;
6
+import com.xxl.job.admin.core.thread.JobTriggerPoolHelper;
6 7
 import com.xxl.job.admin.dao.XxlJobGroupDao;
7 8
 import com.xxl.job.admin.service.XxlJobService;
8 9
 import com.xxl.job.core.biz.model.ReturnT;
@@ -89,7 +90,8 @@ public class JobInfoController {
89 90
 	@RequestMapping("/trigger")
90 91
 	@ResponseBody
91 92
 	public ReturnT<String> triggerJob(int id) {
92
-		return xxlJobService.triggerJob(id);
93
+		JobTriggerPoolHelper.trigger(id, -1);
94
+		return ReturnT.SUCCESS;
93 95
 	}
94 96
 	
95 97
 }

+ 0 - 36
xxl-job-admin/src/main/java/com/xxl/job/admin/core/enums/ExecutorFailStrategyEnum.java View File

@@ -1,36 +0,0 @@
1
-package com.xxl.job.admin.core.enums;
2
-
3
-/**
4
- * Created by xuxueli on 17/5/9.
5
- */
6
-
7
-@Deprecated
8
-public enum ExecutorFailStrategyEnum {
9
-
10
-    NULL("NULL"),
11
-
12
-    FAIL_TRIGGER_RETRY("FAIL_TRIGGER_RETRY"),
13
-
14
-    FAIL_HANDLE_RETRY("FAIL_HANDLE_RETRY");
15
-
16
-    private final String title;
17
-    private ExecutorFailStrategyEnum(String title) {
18
-        this.title = title;
19
-    }
20
-
21
-    public String getTitle() {
22
-        return title;
23
-    }
24
-
25
-    public static ExecutorFailStrategyEnum match(String name, ExecutorFailStrategyEnum defaultItem) {
26
-        if (name != null) {
27
-            for (ExecutorFailStrategyEnum item: ExecutorFailStrategyEnum.values()) {
28
-                if (item.name().equals(name)) {
29
-                    return item;
30
-                }
31
-            }
32
-        }
33
-        return defaultItem;
34
-    }
35
-
36
-}

+ 1 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java View File

@@ -27,7 +27,7 @@ public class RemoteHttpJobBean extends QuartzJobBean {
27 27
 
28 28
 		// trigger
29 29
 		//XxlJobTrigger.trigger(jobId);
30
-		JobTriggerPoolHelper.trigger(jobId);
30
+		JobTriggerPoolHelper.trigger(jobId, -1);
31 31
 	}
32 32
 
33 33
 }

+ 0 - 9
xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java View File

@@ -25,7 +25,6 @@ public class XxlJobInfo {
25 25
 	private String executorHandler;		    // 执行器,任务Handler名称
26 26
 	private String executorParam;		    // 执行器,任务参数
27 27
 	private String executorBlockStrategy;	// 阻塞处理策略
28
-	private String executorFailStrategy;	// 失败处理策略
29 28
 	private int executorTimeout;     		// 任务执行超时时间,单位秒
30 29
 	private int executorFailRetryCount;		// 失败重试次数
31 30
 	
@@ -136,14 +135,6 @@ public class XxlJobInfo {
136 135
 		this.executorBlockStrategy = executorBlockStrategy;
137 136
 	}
138 137
 
139
-	public String getExecutorFailStrategy() {
140
-		return executorFailStrategy;
141
-	}
142
-
143
-	public void setExecutorFailStrategy(String executorFailStrategy) {
144
-		this.executorFailStrategy = executorFailStrategy;
145
-	}
146
-
147 138
 	public int getExecutorTimeout() {
148 139
 		return executorTimeout;
149 140
 	}

+ 9 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java View File

@@ -21,6 +21,7 @@ public class XxlJobLog {
21 21
 	private String executorAddress;
22 22
 	private String executorHandler;
23 23
 	private String executorParam;
24
+	private int executorFailRetryCount;
24 25
 	
25 26
 	// trigger info
26 27
 	private Date triggerTime;
@@ -88,6 +89,14 @@ public class XxlJobLog {
88 89
 		this.executorParam = executorParam;
89 90
 	}
90 91
 
92
+	public int getExecutorFailRetryCount() {
93
+		return executorFailRetryCount;
94
+	}
95
+
96
+	public void setExecutorFailRetryCount(int executorFailRetryCount) {
97
+		this.executorFailRetryCount = executorFailRetryCount;
98
+	}
99
+
91 100
 	public Date getTriggerTime() {
92 101
 		return triggerTime;
93 102
 	}

+ 12 - 5
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java View File

@@ -28,11 +28,11 @@ public class JobTriggerPoolHelper {
28 28
             new ThreadPoolExecutor.CallerRunsPolicy());
29 29
 
30 30
 
31
-    public void addTrigger(final int jobId){
31
+    public void addTrigger(final int jobId, final int failRetryCount){
32 32
         triggerPool.execute(new Runnable() {
33 33
             @Override
34 34
             public void run() {
35
-                XxlJobTrigger.trigger(jobId);
35
+                XxlJobTrigger.trigger(jobId, failRetryCount);
36 36
             }
37 37
         });
38 38
     }
@@ -47,9 +47,16 @@ public class JobTriggerPoolHelper {
47 47
 
48 48
     private static JobTriggerPoolHelper helper = new JobTriggerPoolHelper();
49 49
 
50
-
51
-    public static void trigger(int jobId) {
52
-        helper.addTrigger(jobId);
50
+    /**
51
+     *
52
+     * @param jobId
53
+     * @param failRetryCount
54
+     * 			>=0: use this param
55
+     * 			<0: use param from job info config
56
+     *
57
+     */
58
+    public static void trigger(int jobId, int failRetryCount) {
59
+        helper.addTrigger(jobId, failRetryCount);
53 60
     }
54 61
 
55 62
     public static void toStop(){

+ 21 - 11
xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java View File

@@ -1,12 +1,12 @@
1 1
 package com.xxl.job.admin.core.trigger;
2 2
 
3
-import com.xxl.job.admin.core.enums.ExecutorFailStrategyEnum;
4 3
 import com.xxl.job.admin.core.model.XxlJobGroup;
5 4
 import com.xxl.job.admin.core.model.XxlJobInfo;
6 5
 import com.xxl.job.admin.core.model.XxlJobLog;
7 6
 import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum;
8 7
 import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
9 8
 import com.xxl.job.admin.core.thread.JobFailMonitorHelper;
9
+import com.xxl.job.admin.core.thread.JobTriggerPoolHelper;
10 10
 import com.xxl.job.admin.core.util.I18nUtil;
11 11
 import com.xxl.job.core.biz.ExecutorBiz;
12 12
 import com.xxl.job.core.biz.model.ReturnT;
@@ -31,8 +31,12 @@ public class XxlJobTrigger {
31 31
      * trigger job
32 32
      *
33 33
      * @param jobId
34
+     * @param failRetryCount
35
+     * 			>=0: use this param
36
+     * 			<0: use param from job info config
37
+     *
34 38
      */
35
-    public static void trigger(int jobId) {
39
+    public static void trigger(int jobId, int failRetryCount) {
36 40
 
37 41
         // load data
38 42
         XxlJobInfo jobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(jobId);              // job info
@@ -40,10 +44,14 @@ public class XxlJobTrigger {
40 44
             logger.warn(">>>>>>>>>>>> trigger fail, jobId invalid,jobId={}", jobId);
41 45
             return;
42 46
         }
47
+        int finalFailRetryCount = jobInfo.getExecutorFailRetryCount();
48
+        if (failRetryCount >= 0) {
49
+            finalFailRetryCount = failRetryCount;
50
+        }
51
+
43 52
         XxlJobGroup group = XxlJobDynamicScheduler.xxlJobGroupDao.load(jobInfo.getJobGroup());  // group info
44 53
 
45 54
         ExecutorBlockStrategyEnum blockStrategy = ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), ExecutorBlockStrategyEnum.SERIAL_EXECUTION);  // block strategy
46
-        ExecutorFailStrategyEnum failStrategy = ExecutorFailStrategyEnum.match(jobInfo.getExecutorFailStrategy(), ExecutorFailStrategyEnum.NULL);    // fail strategy
47 55
         ExecutorRouteStrategyEnum executorRouteStrategyEnum = ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null);    // route strategy
48 56
         ArrayList<String> addressList = (ArrayList<String>) group.getRegistryList();
49 57
 
@@ -64,6 +72,7 @@ public class XxlJobTrigger {
64 72
                 jobLog.setGlueType(jobInfo.getGlueType());
65 73
                 jobLog.setExecutorHandler(jobInfo.getExecutorHandler());
66 74
                 jobLog.setExecutorParam(jobInfo.getExecutorParam());
75
+                jobLog.setExecutorFailRetryCount(finalFailRetryCount);
67 76
                 jobLog.setTriggerTime(new Date());
68 77
 
69 78
                 ReturnT<String> triggerResult = new ReturnT<String>(null);
@@ -74,7 +83,7 @@ public class XxlJobTrigger {
74 83
                 triggerMsgSb.append("<br>").append(I18nUtil.getString("jobconf_trigger_exe_regaddress")).append(":").append(group.getRegistryList());
75 84
                 triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorRouteStrategy")).append(":").append(executorRouteStrategyEnum.getTitle()).append("("+i+"/"+addressList.size()+")"); // update01
76 85
                 triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorBlockStrategy")).append(":").append(blockStrategy.getTitle());
77
-                triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorFailRetryCount")).append(":").append(jobInfo.getExecutorFailRetryCount());
86
+                triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorFailRetryCount")).append(":").append(finalFailRetryCount);
78 87
                 triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_timeout")).append(":").append(jobInfo.getExecutorTimeout());
79 88
 
80 89
                 // 3、trigger-valid
@@ -104,9 +113,9 @@ public class XxlJobTrigger {
104 113
                     triggerMsgSb.append("<br><br><span style=\"color:#00c0ef;\" > >>>>>>>>>>>"+ I18nUtil.getString("jobconf_trigger_run") +"<<<<<<<<<<< </span><br>").append(triggerResult.getMsg());
105 114
 
106 115
                     // 4.3、trigger (fail retry)
107
-                    if (triggerResult.getCode()!=ReturnT.SUCCESS_CODE && failStrategy == ExecutorFailStrategyEnum.FAIL_TRIGGER_RETRY) {
108
-                        triggerResult = runExecutor(triggerParam, address);  // update04
109
-                        triggerMsgSb.append("<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>"+ I18nUtil.getString("jobconf_fail_trigger_retry") +"<<<<<<<<<<< </span><br>").append(triggerResult.getMsg());
116
+                    if (triggerResult.getCode()!=ReturnT.SUCCESS_CODE && finalFailRetryCount > 0) {
117
+                        JobTriggerPoolHelper.trigger(jobId, (finalFailRetryCount-1));
118
+                        triggerMsgSb.append("<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>"+ I18nUtil.getString("jobconf_fail_trigger_retry") +"<<<<<<<<<<< </span><br>");
110 119
                     }
111 120
                 }
112 121
 
@@ -134,6 +143,7 @@ public class XxlJobTrigger {
134 143
             jobLog.setGlueType(jobInfo.getGlueType());
135 144
             jobLog.setExecutorHandler(jobInfo.getExecutorHandler());
136 145
             jobLog.setExecutorParam(jobInfo.getExecutorParam());
146
+            jobLog.setExecutorFailRetryCount(finalFailRetryCount);
137 147
             jobLog.setTriggerTime(new Date());
138 148
 
139 149
             ReturnT<String> triggerResult = new ReturnT<String>(null);
@@ -144,7 +154,7 @@ public class XxlJobTrigger {
144 154
             triggerMsgSb.append("<br>").append(I18nUtil.getString("jobconf_trigger_exe_regaddress")).append(":").append(group.getRegistryList());
145 155
             triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorRouteStrategy")).append(":").append(executorRouteStrategyEnum.getTitle());
146 156
             triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorBlockStrategy")).append(":").append(blockStrategy.getTitle());
147
-            triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorFailRetryCount")).append(":").append(jobInfo.getExecutorFailRetryCount());
157
+            triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorFailRetryCount")).append(":").append(finalFailRetryCount);
148 158
             triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_timeout")).append(":").append(jobInfo.getExecutorTimeout());
149 159
 
150 160
             // 3、trigger-valid
@@ -174,9 +184,9 @@ public class XxlJobTrigger {
174 184
                 triggerMsgSb.append("<br><br><span style=\"color:#00c0ef;\" > >>>>>>>>>>>"+ I18nUtil.getString("jobconf_trigger_run") +"<<<<<<<<<<< </span><br>").append(triggerResult.getMsg());
175 185
 
176 186
                 // 4.3、trigger (fail retry)
177
-                if (triggerResult.getCode()!=ReturnT.SUCCESS_CODE && failStrategy == ExecutorFailStrategyEnum.FAIL_TRIGGER_RETRY) {
178
-                    triggerResult = executorRouteStrategyEnum.getRouter().routeRun(triggerParam, addressList);
179
-                    triggerMsgSb.append("<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>"+ I18nUtil.getString("jobconf_fail_trigger_retry") +"<<<<<<<<<<< </span><br>").append(triggerResult.getMsg());
187
+                if (triggerResult.getCode()!=ReturnT.SUCCESS_CODE && finalFailRetryCount > 0) {
188
+                    JobTriggerPoolHelper.trigger(jobId, (finalFailRetryCount-1));
189
+                    triggerMsgSb.append("<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>"+ I18nUtil.getString("jobconf_fail_trigger_retry") +"<<<<<<<<<<< </span><br>");
180 190
                 }
181 191
             }
182 192
 

+ 0 - 8
xxl-job-admin/src/main/java/com/xxl/job/admin/service/XxlJobService.java View File

@@ -68,14 +68,6 @@ public interface XxlJobService {
68 68
 	public ReturnT<String> resume(int id);
69 69
 
70 70
 	/**
71
-	 * trigger job
72
-	 *
73
-	 * @param id
74
-	 * @return
75
-	 */
76
-	public ReturnT<String> triggerJob(int id);
77
-
78
-	/**
79 71
 	 * dashboard info
80 72
 	 *
81 73
 	 * @return

+ 13 - 14
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java View File

@@ -1,8 +1,8 @@
1 1
 package com.xxl.job.admin.service.impl;
2 2
 
3
-import com.xxl.job.admin.core.enums.ExecutorFailStrategyEnum;
4 3
 import com.xxl.job.admin.core.model.XxlJobInfo;
5 4
 import com.xxl.job.admin.core.model.XxlJobLog;
5
+import com.xxl.job.admin.core.thread.JobTriggerPoolHelper;
6 6
 import com.xxl.job.admin.core.util.I18nUtil;
7 7
 import com.xxl.job.admin.dao.XxlJobInfoDao;
8 8
 import com.xxl.job.admin.dao.XxlJobLogDao;
@@ -72,7 +72,9 @@ public class AdminBizImpl implements AdminBiz {
72 72
                 for (int i = 0; i < childJobIds.length; i++) {
73 73
                     int childJobId = (StringUtils.isNotBlank(childJobIds[i]) && StringUtils.isNumeric(childJobIds[i]))?Integer.valueOf(childJobIds[i]):-1;
74 74
                     if (childJobId > 0) {
75
-                        ReturnT<String> triggerChildResult = xxlJobService.triggerJob(childJobId);
75
+
76
+                        JobTriggerPoolHelper.trigger(childJobId, 0);
77
+                        ReturnT<String> triggerChildResult = ReturnT.SUCCESS;
76 78
 
77 79
                         // add msg
78 80
                         callbackMsg += MessageFormat.format(I18nUtil.getString("jobconf_callback_child_msg1"),
@@ -91,17 +93,13 @@ public class AdminBizImpl implements AdminBiz {
91 93
 
92 94
             }
93 95
         } else {
94
-            boolean ifHandleRetry = false;
95
-            if (IJobHandler.FAIL_RETRY.getCode() == handleCallbackParam.getExecuteResult().getCode()) {
96
-                ifHandleRetry = true;
97
-            } else {
98
-                XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(log.getJobId());
99
-                if (ExecutorFailStrategyEnum.FAIL_HANDLE_RETRY.name().equals(xxlJobInfo.getExecutorFailStrategy())) {
100
-                    ifHandleRetry = true;
101
-                }
102
-            }
103
-            if (ifHandleRetry){
104
-                ReturnT<String> retryTriggerResult = xxlJobService.triggerJob(log.getJobId());
96
+            XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(log.getJobId());
97
+            if (xxlJobInfo.getExecutorFailRetryCount() > 0) {
98
+                int nextFailRetryCount = xxlJobInfo.getExecutorFailRetryCount()-1;
99
+
100
+                JobTriggerPoolHelper.trigger(log.getJobId(), nextFailRetryCount);
101
+                ReturnT<String> retryTriggerResult = ReturnT.SUCCESS;
102
+
105 103
                 callbackMsg = "<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>"+ I18nUtil.getString("jobconf_fail_handle_retry") +"<<<<<<<<<<< </span><br>";
106 104
 
107 105
                 callbackMsg += MessageFormat.format(I18nUtil.getString("jobconf_callback_msg1"),
@@ -147,7 +145,8 @@ public class AdminBizImpl implements AdminBiz {
147 145
 
148 146
     @Override
149 147
     public ReturnT<String> triggerJob(int jobId) {
150
-        return xxlJobService.triggerJob(jobId);
148
+        JobTriggerPoolHelper.trigger(jobId, -1);
149
+        return ReturnT.SUCCESS;
151 150
     }
152 151
 
153 152
 }

+ 6 - 8
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java View File

@@ -4,7 +4,6 @@ import com.xxl.job.admin.core.model.XxlJobGroup;
4 4
 import com.xxl.job.admin.core.model.XxlJobInfo;
5 5
 import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum;
6 6
 import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
7
-import com.xxl.job.admin.core.thread.JobTriggerPoolHelper;
8 7
 import com.xxl.job.admin.core.util.I18nUtil;
9 8
 import com.xxl.job.admin.dao.XxlJobGroupDao;
10 9
 import com.xxl.job.admin.dao.XxlJobInfoDao;
@@ -201,7 +200,6 @@ public class XxlJobServiceImpl implements XxlJobService {
201 200
 		exists_jobInfo.setExecutorHandler(jobInfo.getExecutorHandler());
202 201
 		exists_jobInfo.setExecutorParam(jobInfo.getExecutorParam());
203 202
 		exists_jobInfo.setExecutorBlockStrategy(jobInfo.getExecutorBlockStrategy());
204
-		exists_jobInfo.setExecutorFailStrategy(jobInfo.getExecutorFailStrategy());
205 203
 		exists_jobInfo.setExecutorTimeout(jobInfo.getExecutorTimeout());
206 204
 		exists_jobInfo.setExecutorFailRetryCount(jobInfo.getExecutorFailRetryCount());
207 205
 		exists_jobInfo.setChildJobId(jobInfo.getChildJobId());
@@ -268,13 +266,13 @@ public class XxlJobServiceImpl implements XxlJobService {
268 266
 		}
269 267
 	}
270 268
 
271
-	@Override
272
-	public ReturnT<String> triggerJob(int id) {
269
+	/*@Override
270
+    public ReturnT<String> triggerJob(int id, int failRetryCount) {
273 271
 
274
-		JobTriggerPoolHelper.trigger(id);
272
+		JobTriggerPoolHelper.trigger(id, failRetryCount);
275 273
 		return ReturnT.SUCCESS;
276 274
 
277
-        /*XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id);
275
+        *//*XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id);
278 276
         if (xxlJobInfo == null) {
279 277
         	return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_id")+I18nUtil.getString("system_unvalid")) );
280 278
 		}
@@ -288,9 +286,9 @@ public class XxlJobServiceImpl implements XxlJobService {
288 286
 		} catch (SchedulerException e) {
289 287
 			logger.error(e.getMessage(), e);
290 288
 			return new ReturnT<String>(ReturnT.FAIL_CODE, e.getMessage());
291
-		}*/
289
+		}*//*
292 290
 
293
-	}
291
+	}*/
294 292
 
295 293
 	@Override
296 294
 	public Map<String, Object> dashboardInfo() {

+ 0 - 1
xxl-job-admin/src/main/resources/i18n/message.properties View File

@@ -162,7 +162,6 @@ joblog_clean_type_unvalid=清理类型参数异常
162 162
 joblog_handleCode_200=成功
163 163
 joblog_handleCode_500=失败
164 164
 joblog_handleCode_502=失败(超时)
165
-joblog_handleCode_501=失败(重试)
166 165
 joblog_kill_log=终止任务
167 166
 joblog_kill_log_limit=调度失败,无法终止日志
168 167
 joblog_kill_log_byman=人为操作主动终止

+ 0 - 1
xxl-job-admin/src/main/resources/i18n/message_en.properties View File

@@ -162,7 +162,6 @@ joblog_clean_type_unvalid=Clean type is illegal
162 162
 joblog_handleCode_200=Success
163 163
 joblog_handleCode_500=Fail
164 164
 joblog_handleCode_502=Timeout
165
-joblog_handleCode_501=Fail retry
166 165
 joblog_kill_log=Kill Job
167 166
 joblog_kill_log_limit=Trigger Fail, can not kill job
168 167
 joblog_kill_log_byman=Manual operation to active kill job

+ 0 - 5
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml View File

@@ -20,7 +20,6 @@
20 20
 		<result column="executor_handler" property="executorHandler" />
21 21
 	    <result column="executor_param" property="executorParam" />
22 22
 		<result column="executor_block_strategy" property="executorBlockStrategy" />
23
-		<result column="executor_fail_strategy" property="executorFailStrategy" />
24 23
 		<result column="executor_timeout" property="executorTimeout" />
25 24
 		<result column="executor_fail_retry_count" property="executorFailRetryCount" />
26 25
 
@@ -45,7 +44,6 @@
45 44
 		t.executor_handler,
46 45
 		t.executor_param,
47 46
 		t.executor_block_strategy,
48
-		t.executor_fail_strategy,
49 47
 		t.executor_timeout,
50 48
 		t.executor_fail_retry_count,
51 49
 		t.glue_type,
@@ -102,7 +100,6 @@
102 100
 			executor_handler,
103 101
 			executor_param,
104 102
 			executor_block_strategy,
105
-			executor_fail_strategy,
106 103
 			executor_timeout,
107 104
 			executor_fail_retry_count,
108 105
 			glue_type,
@@ -122,7 +119,6 @@
122 119
 			#{executorHandler},
123 120
 			#{executorParam},
124 121
 			#{executorBlockStrategy},
125
-			#{executorFailStrategy},
126 122
 			#{executorTimeout},
127 123
 			#{executorFailRetryCount},
128 124
 			#{glueType},
@@ -155,7 +151,6 @@
155 151
 			executor_handler = #{executorHandler},
156 152
 			executor_param = #{executorParam},
157 153
 			executor_block_strategy = #{executorBlockStrategy},
158
-			executor_fail_strategy = #{executorFailStrategy},
159 154
 			executor_timeout = ${executorTimeout},
160 155
 			executor_fail_retry_count = ${executorFailRetryCount},
161 156
 			glue_type = #{glueType},

+ 4 - 1
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml View File

@@ -14,6 +14,7 @@
14 14
 		<result column="executor_address" property="executorAddress" />
15 15
 		<result column="executor_handler" property="executorHandler" />
16 16
 	    <result column="executor_param" property="executorParam" />
17
+		<result column="executor_fail_retry_count" property="executorFailRetryCount" />
17 18
 	    
18 19
 	    <result column="trigger_time" property="triggerTime" />
19 20
 	    <result column="trigger_code" property="triggerCode" />
@@ -33,6 +34,7 @@
33 34
 		t.executor_address,
34 35
 		t.executor_handler,
35 36
 		t.executor_param,
37
+		t.executor_fail_retry_count,
36 38
 		t.trigger_time,
37 39
 		t.trigger_code,
38 40
 		t.trigger_msg,
@@ -140,7 +142,8 @@
140 142
 			`trigger_msg`= #{triggerMsg},
141 143
 			`executor_address`= #{executorAddress},
142 144
 			`executor_handler`=#{executorHandler},
143
-			`executor_param`= #{executorParam}
145
+			`executor_param`= #{executorParam},
146
+			`executor_fail_retry_count`= #{executorFailRetryCount}
144 147
 		WHERE `id`= #{id}
145 148
 	</update>
146 149
 

+ 0 - 2
xxl-job-admin/src/main/webapp/static/js/joblog.index.1.js View File

@@ -157,8 +157,6 @@ $(function() {
157 157
                                 html = '<span style="color: green">'+ I18n.joblog_handleCode_200 +'</span>';
158 158
                             } else if (data == 500) {
159 159
                                 html = '<span style="color: red">'+ I18n.joblog_handleCode_500 +'</span>';
160
-                            } else if (data == 501) {
161
-                                html = '<span style="color: red">'+ I18n.joblog_handleCode_501 +'</span>';
162 160
                             } else if (data == 502) {
163 161
                                 html = '<span style="color: red">'+ I18n.joblog_handleCode_502 +'</span>';
164 162
                             } else if (data == 0) {

+ 0 - 3
xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobInfoDaoTest.java View File

@@ -1,7 +1,6 @@
1 1
 package com.xxl.job.admin.dao;
2 2
 
3 3
 import com.xxl.job.admin.core.model.XxlJobInfo;
4
-import com.xxl.job.admin.dao.XxlJobInfoDao;
5 4
 import org.junit.Test;
6 5
 import org.junit.runner.RunWith;
7 6
 import org.springframework.test.context.ContextConfiguration;
@@ -41,7 +40,6 @@ public class XxlJobInfoDaoTest {
41 40
 		info.setExecutorHandler("setExecutorHandler");
42 41
 		info.setExecutorParam("setExecutorParam");
43 42
 		info.setExecutorBlockStrategy("setExecutorBlockStrategy");
44
-		info.setExecutorFailStrategy("setExecutorFailStrategy");
45 43
 		info.setGlueType("setGlueType");
46 44
 		info.setGlueSource("setGlueSource");
47 45
 		info.setGlueRemark("setGlueRemark");
@@ -58,7 +56,6 @@ public class XxlJobInfoDaoTest {
58 56
 		info2.setExecutorHandler("setExecutorHandler2");
59 57
 		info2.setExecutorParam("setExecutorParam2");
60 58
 		info2.setExecutorBlockStrategy("setExecutorBlockStrategy2");
61
-		info2.setExecutorFailStrategy("setExecutorFailStrategy2");
62 59
 		info2.setGlueType("setGlueType2");
63 60
 		info2.setGlueSource("setGlueSource2");
64 61
 		info2.setGlueRemark("setGlueRemark2");

+ 0 - 2
xxl-job-core/src/main/java/com/xxl/job/core/handler/IJobHandler.java View File

@@ -14,8 +14,6 @@ public abstract class IJobHandler {
14 14
 	public static final ReturnT<String> SUCCESS = new ReturnT<String>(200, null);
15 15
 	/** fail */
16 16
 	public static final ReturnT<String> FAIL = new ReturnT<String>(500, null);
17
-	/** fail retry */
18
-	public static final ReturnT<String> FAIL_RETRY = new ReturnT<String>(501, null);
19 17
 	/** fail timeout */
20 18
 	public static final ReturnT<String> FAIL_TIMEOUT = new ReturnT<String>(502, null);
21 19
 

+ 0 - 2
xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java View File

@@ -66,8 +66,6 @@ public class ScriptJobHandler extends IJobHandler {
66 66
 
67 67
         if (exitValue == 0) {
68 68
             return IJobHandler.SUCCESS;
69
-        } else if (exitValue == 101) {
70
-            return IJobHandler.FAIL_RETRY;
71 69
         } else {
72 70
             return new ReturnT<String>(IJobHandler.FAIL.getCode(), "script exit value("+exitValue+") is failed");
73 71
         }