|
@@ -45,32 +45,44 @@ public class XxlJobTrigger {
|
45
|
45
|
int finalFailRetryCount = failRetryCount>=0?failRetryCount:jobInfo.getExecutorFailRetryCount();
|
46
|
46
|
XxlJobGroup group = XxlJobDynamicScheduler.xxlJobGroupDao.load(jobInfo.getJobGroup());
|
47
|
47
|
|
48
|
|
- // process trigger
|
49
|
|
- if (triggerType==TriggerTypeEnum.RETRY && executorShardingParam!=null) {
|
|
48
|
+ // sharding param
|
|
49
|
+ int[] shardingParam = null;
|
|
50
|
+ if (executorShardingParam!=null){
|
50
|
51
|
String[] shardingArr = executorShardingParam.split("/");
|
51
|
|
- if (shardingArr.length==2 && StringUtils.isNumeric(shardingArr[0]) && StringUtils.isNumeric(shardingArr[1])); {
|
52
|
|
- processTrigger(group, jobInfo, finalFailRetryCount, triggerType, Integer.valueOf(shardingArr[0]), Integer.valueOf(shardingArr[1]));
|
|
52
|
+ if (shardingArr.length==2 && StringUtils.isNumeric(shardingArr[0]) && StringUtils.isNumeric(shardingArr[1])) {
|
|
53
|
+ shardingParam = new int[2];
|
|
54
|
+ shardingParam[0] = Integer.valueOf(shardingArr[0]);
|
|
55
|
+ shardingParam[1] = Integer.valueOf(shardingArr[1]);
|
|
56
|
+ }
|
|
57
|
+ }
|
|
58
|
+ if (ExecutorRouteStrategyEnum.SHARDING_BROADCAST==ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null)
|
|
59
|
+ && CollectionUtils.isNotEmpty(group.getRegistryList()) && shardingParam==null) {
|
|
60
|
+ for (int i = 0; i < group.getRegistryList().size(); i++) {
|
|
61
|
+ processTrigger(group, jobInfo, finalFailRetryCount, triggerType, i, group.getRegistryList().size());
|
53
|
62
|
}
|
54
|
63
|
} else {
|
55
|
|
- if (CollectionUtils.isNotEmpty(group.getRegistryList())) {
|
56
|
|
- if (ExecutorRouteStrategyEnum.SHARDING_BROADCAST == ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null)) {
|
57
|
|
- for (int i = 0; i < group.getRegistryList().size(); i++) {
|
58
|
|
- processTrigger(group, jobInfo, finalFailRetryCount, triggerType, i, group.getRegistryList().size());
|
59
|
|
- }
|
60
|
|
- } else {
|
61
|
|
- processTrigger(group, jobInfo, finalFailRetryCount, triggerType, 0, 1);
|
62
|
|
- }
|
63
|
|
- } else {
|
64
|
|
- processTrigger(group, jobInfo, finalFailRetryCount, triggerType, 0, 0);
|
|
64
|
+ if (shardingParam == null) {
|
|
65
|
+ shardingParam = new int[]{0, 1};
|
65
|
66
|
}
|
|
67
|
+ processTrigger(group, jobInfo, finalFailRetryCount, triggerType, shardingParam[0], shardingParam[1]);
|
66
|
68
|
}
|
|
69
|
+
|
67
|
70
|
}
|
68
|
71
|
|
|
72
|
+ /**
|
|
73
|
+ * @param group job group, registry list may be empty
|
|
74
|
+ * @param jobInfo
|
|
75
|
+ * @param finalFailRetryCount
|
|
76
|
+ * @param triggerType
|
|
77
|
+ * @param index sharding index
|
|
78
|
+ * @param total sharding index
|
|
79
|
+ */
|
69
|
80
|
private static void processTrigger(XxlJobGroup group, XxlJobInfo jobInfo, int finalFailRetryCount, TriggerTypeEnum triggerType, int index, int total){
|
70
|
81
|
|
71
|
82
|
// param
|
72
|
83
|
ExecutorBlockStrategyEnum blockStrategy = ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), ExecutorBlockStrategyEnum.SERIAL_EXECUTION); // block strategy
|
73
|
84
|
ExecutorRouteStrategyEnum executorRouteStrategyEnum = ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null); // route strategy
|
|
85
|
+ String shardingParam = (ExecutorRouteStrategyEnum.SHARDING_BROADCAST==executorRouteStrategyEnum)?String.valueOf(index).concat("/").concat(String.valueOf(total)):null;
|
74
|
86
|
|
75
|
87
|
// 1、save log-id
|
76
|
88
|
XxlJobLog jobLog = new XxlJobLog();
|
|
@@ -98,10 +110,13 @@ public class XxlJobTrigger {
|
98
|
110
|
// 3、init address
|
99
|
111
|
String address = null;
|
100
|
112
|
ReturnT<String> routeAddressResult = null;
|
101
|
|
- String shardingParam = (ExecutorRouteStrategyEnum.SHARDING_BROADCAST==executorRouteStrategyEnum &&total>0)?String.valueOf(triggerParam.getBroadcastIndex()).concat("/").concat(String.valueOf(triggerParam.getBroadcastTotal())):null;
|
102
|
113
|
if (CollectionUtils.isNotEmpty(group.getRegistryList())) {
|
103
|
114
|
if (ExecutorRouteStrategyEnum.SHARDING_BROADCAST == executorRouteStrategyEnum) {
|
104
|
|
- address = group.getRegistryList().get(index);
|
|
115
|
+ if (index < group.getRegistryList().size()) {
|
|
116
|
+ address = group.getRegistryList().get(index);
|
|
117
|
+ } else {
|
|
118
|
+ address = group.getRegistryList().get(0);
|
|
119
|
+ }
|
105
|
120
|
} else {
|
106
|
121
|
routeAddressResult = executorRouteStrategyEnum.getRouter().route(triggerParam, group.getRegistryList());
|
107
|
122
|
if (routeAddressResult.getCode() == ReturnT.SUCCESS_CODE) {
|