|
@@ -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
|
|