Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 89b35c8

Browse files
committed
feat: [officialProcessor] add VerificationProcessor
1 parent 73ebe83 commit 89b35c8

File tree

1 file changed

+154
-0
lines changed

1 file changed

+154
-0
lines changed
Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
package tech.powerjob.official.processors.impl;
2+
3+
import com.alibaba.fastjson.JSONObject;
4+
import lombok.*;
5+
import org.apache.commons.lang3.RandomStringUtils;
6+
import tech.powerjob.common.exception.PowerJobException;
7+
import tech.powerjob.official.processors.CommonBasicProcessor;
8+
import tech.powerjob.official.processors.util.CommonUtils;
9+
import tech.powerjob.worker.core.processor.ProcessResult;
10+
import tech.powerjob.worker.core.processor.TaskContext;
11+
import tech.powerjob.worker.core.processor.TaskResult;
12+
import tech.powerjob.worker.core.processor.sdk.BroadcastProcessor;
13+
import tech.powerjob.worker.core.processor.sdk.MapReduceProcessor;
14+
import tech.powerjob.worker.log.OmsLogger;
15+
16+
import java.io.Serializable;
17+
import java.util.ArrayList;
18+
import java.util.List;
19+
import java.util.Optional;
20+
import java.util.concurrent.ThreadLocalRandom;
21+
22+
/**
23+
* 功能验证用处理器,帮助用户快速验证想要测试的功能
24+
*
25+
* @author tjq
26+
* @since 2023/8/13
27+
*/
28+
public class VerificationProcessor extends CommonBasicProcessor implements MapReduceProcessor, BroadcastProcessor {
29+
30+
@Override
31+
public ProcessResult preProcess(TaskContext context) throws Exception {
32+
return new ProcessResult(true, "preProcess successfully!");
33+
}
34+
35+
@Override
36+
protected ProcessResult process0(TaskContext taskContext) throws Exception {
37+
38+
final OmsLogger omsLogger = taskContext.getOmsLogger();
39+
40+
final String paramsStr = CommonUtils.parseParams(taskContext);
41+
final VerificationParam verificationParam = JSONObject.parseObject(paramsStr, VerificationParam.class);
42+
43+
final Mode mode = Mode.of(verificationParam.getMode());
44+
45+
switch (mode) {
46+
case ERROR:
47+
return new ProcessResult(false, "EXECUTE_FAILED_DUE_TO_CONFIG");
48+
case EXCEPTION:
49+
throw new PowerJobException("exception for test");
50+
case TIMEOUT:
51+
final Long sleepMs = Optional.ofNullable(verificationParam.getSleepMs()).orElse(3600000L);
52+
Thread.sleep(sleepMs);
53+
return new ProcessResult(true, "AFTER_SLEEP_" + sleepMs);
54+
case MR:
55+
if (isRootTask()) {
56+
final int batchNum = Optional.ofNullable(verificationParam.getBatchNum()).orElse(10);
57+
final int batchSize = Optional.ofNullable(verificationParam.getBatchSize()).orElse(100);
58+
omsLogger.info("[VerificationProcessor] start root task~");
59+
List<TestSubTask> subTasks = new ArrayList<>();
60+
for (int a = 0; a < batchNum; a++) {
61+
for (int b = 0; b < batchSize; b++) {
62+
int x = a * batchSize + b;
63+
subTasks.add(new TestSubTask("task_" + x, x));
64+
}
65+
map(subTasks, "MAP_TEST_TASK_" + a);
66+
omsLogger.info("[VerificationProcessor] [{}] map one batch successfully~", batchNum);
67+
subTasks.clear();
68+
}
69+
omsLogger.info("[VerificationProcessor] all map successfully!");
70+
return new ProcessResult(true, "MAP_SUCCESS");
71+
} else {
72+
final Double successRate = Optional.ofNullable(verificationParam.getSubTaskSuccessRate()).orElse(0.5);
73+
final double rd = ThreadLocalRandom.current().nextDouble(0, 1);
74+
boolean success = rd <= successRate;
75+
return new ProcessResult(success, String.format("taskId_%s_success_%s", taskContext.getTaskId(), success));
76+
}
77+
}
78+
79+
return new ProcessResult(true, "EXECUTE_SUCCESSFULLY_" + RandomStringUtils.randomAlphanumeric(Optional.ofNullable(verificationParam.getResponseSize()).orElse(10)));
80+
}
81+
82+
@Override
83+
public ProcessResult reduce(TaskContext context, List<TaskResult> taskResults) {
84+
return new ProcessResult(true, "REDUCE_SUCCESS");
85+
}
86+
87+
enum Mode {
88+
/**
89+
* 常规模式,直接返回响应
90+
*/
91+
BASE,
92+
/**
93+
* 超时,sleep 一段时间测试超时控制
94+
*/
95+
TIMEOUT,
96+
/**
97+
* 测试执行失败,响应返回 success = false
98+
*/
99+
ERROR,
100+
/**
101+
* 测试执行异常,抛出异常
102+
*/
103+
EXCEPTION,
104+
/**
105+
* MapReduce
106+
*/
107+
MR
108+
;
109+
110+
public static Mode of(String v) {
111+
for (Mode m : values()) {
112+
if (m.name().equalsIgnoreCase(v)) {
113+
return m;
114+
}
115+
}
116+
return Mode.BASE;
117+
}
118+
}
119+
120+
@Data
121+
public static class VerificationParam implements Serializable {
122+
/**
123+
* 验证模式
124+
*/
125+
private String mode;
126+
/**
127+
* 休眠时间,用于验证超时
128+
*/
129+
private Long sleepMs;
130+
/**
131+
* 【MR】批次大小,用于验证 MapReduce
132+
*/
133+
private Integer batchSize;
134+
/**
135+
* 【MR】batchNum
136+
*/
137+
private Integer batchNum;
138+
/**
139+
* 【MR】子任务成功率
140+
*/
141+
private Double subTaskSuccessRate;
142+
143+
private Integer responseSize;
144+
}
145+
146+
@Getter
147+
@ToString
148+
@NoArgsConstructor
149+
@AllArgsConstructor
150+
public static class TestSubTask {
151+
private String taskName;
152+
private int id;
153+
}
154+
}

0 commit comments

Comments
 (0)