mirror of
https://github.com/PowerJob/PowerJob.git
synced 2025-07-17 00:00:04 +08:00
finished step1: ProcessorTracker receive task and execute
This commit is contained in:
parent
a6482edd38
commit
c4a06b52e7
@ -40,73 +40,81 @@ public class ProcessorRunnable implements Runnable {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
|
||||||
// 0. 创建回复
|
log.debug("[ProcessorRunnable] start to run task(instanceId={}&taskId={}&taskName={})", request.getInstanceId(), request.getTaskId(), request.getTaskName());
|
||||||
ProcessorReportTaskStatusReq reportStatus = new ProcessorReportTaskStatusReq();
|
|
||||||
BeanUtils.copyProperties(request, reportStatus);
|
|
||||||
|
|
||||||
// 1. 获取 Processor
|
|
||||||
BasicProcessor processor = getProcessor();
|
|
||||||
if (processor == null) {
|
|
||||||
reportStatus.setStatus(TaskStatus.PROCESS_FAILED.getValue());
|
|
||||||
reportStatus.setResult("NO_PROCESSOR");
|
|
||||||
taskTrackerActor.tell(reportStatus, null);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 2. 根任务特殊处理
|
|
||||||
ExecuteType executeType = ExecuteType.valueOf(request.getExecuteType());
|
|
||||||
if (TaskConstant.ROOT_TASK_ID.equals(request.getTaskId())) {
|
|
||||||
|
|
||||||
// 广播执行:先选本机执行 preProcess,完成后TaskTracker再为所有Worker生成子Task
|
|
||||||
if (executeType == ExecuteType.BROADCAST) {
|
|
||||||
|
|
||||||
BroadcastProcessor broadcastProcessor = (BroadcastProcessor) processor;
|
|
||||||
BroadcastTaskPreExecuteFinishedReq spReq = new BroadcastTaskPreExecuteFinishedReq();
|
|
||||||
BeanUtils.copyProperties(request, reportStatus);
|
|
||||||
try {
|
|
||||||
ProcessResult processResult = broadcastProcessor.preProcess();
|
|
||||||
spReq.setSuccess(processResult.isSuccess());
|
|
||||||
spReq.setMsg(processResult.getMsg());
|
|
||||||
}catch (Exception e) {
|
|
||||||
log.warn("[ProcessorRunnable] broadcast task(jobId={}) preProcess failed.", request.getJobId(), e);
|
|
||||||
spReq.setSuccess(false);
|
|
||||||
spReq.setMsg(e.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
taskTrackerActor.tell(spReq, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 3. 通知 TaskTracker 任务开始运行
|
|
||||||
reportStatus.setStatus(TaskStatus.PROCESSING.getValue());
|
|
||||||
taskTrackerActor.tell(reportStatus, null);
|
|
||||||
|
|
||||||
// 4. 完成提交前准备工作
|
|
||||||
ProcessResult processResult;
|
|
||||||
TaskContext taskContext = new TaskContext();
|
|
||||||
BeanUtils.copyProperties(request, taskContext);
|
|
||||||
taskContext.setSubTask(JSONObject.parse(request.getSubTaskContent()));
|
|
||||||
|
|
||||||
ThreadLocalStore.TASK_CONTEXT_THREAD_LOCAL.set(taskContext);
|
|
||||||
|
|
||||||
// 5. 正式提交运行
|
|
||||||
ProcessorReportTaskStatusReq reportReq = new ProcessorReportTaskStatusReq();
|
|
||||||
BeanUtils.copyProperties(request, reportReq);
|
|
||||||
try {
|
try {
|
||||||
processResult = processor.process(taskContext);
|
// 0. 创建回复
|
||||||
reportReq.setResult(processResult.getMsg());
|
ProcessorReportTaskStatusReq reportStatus = new ProcessorReportTaskStatusReq();
|
||||||
if (processResult.isSuccess()) {
|
BeanUtils.copyProperties(request, reportStatus);
|
||||||
reportReq.setStatus(TaskStatus.PROCESS_SUCCESS.getValue());
|
|
||||||
}else {
|
// 1. 获取 Processor
|
||||||
|
BasicProcessor processor = getProcessor();
|
||||||
|
if (processor == null) {
|
||||||
|
reportStatus.setStatus(TaskStatus.PROCESS_FAILED.getValue());
|
||||||
|
reportStatus.setResult("NO_PROCESSOR");
|
||||||
|
taskTrackerActor.tell(reportStatus, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 根任务特殊处理
|
||||||
|
ExecuteType executeType = ExecuteType.valueOf(request.getExecuteType());
|
||||||
|
if (TaskConstant.ROOT_TASK_ID.equals(request.getTaskId())) {
|
||||||
|
|
||||||
|
// 广播执行:先选本机执行 preProcess,完成后TaskTracker再为所有Worker生成子Task
|
||||||
|
if (executeType == ExecuteType.BROADCAST) {
|
||||||
|
|
||||||
|
BroadcastProcessor broadcastProcessor = (BroadcastProcessor) processor;
|
||||||
|
BroadcastTaskPreExecuteFinishedReq spReq = new BroadcastTaskPreExecuteFinishedReq();
|
||||||
|
BeanUtils.copyProperties(request, reportStatus);
|
||||||
|
try {
|
||||||
|
ProcessResult processResult = broadcastProcessor.preProcess();
|
||||||
|
spReq.setSuccess(processResult.isSuccess());
|
||||||
|
spReq.setMsg(processResult.getMsg());
|
||||||
|
}catch (Exception e) {
|
||||||
|
log.warn("[ProcessorRunnable] broadcast task(jobId={}) preProcess failed.", request.getJobId(), e);
|
||||||
|
spReq.setSuccess(false);
|
||||||
|
spReq.setMsg(e.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
taskTrackerActor.tell(spReq, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. 通知 TaskTracker 任务开始运行
|
||||||
|
reportStatus.setStatus(TaskStatus.PROCESSING.getValue());
|
||||||
|
taskTrackerActor.tell(reportStatus, null);
|
||||||
|
|
||||||
|
// 4. 完成提交前准备工作
|
||||||
|
ProcessResult processResult;
|
||||||
|
TaskContext taskContext = new TaskContext();
|
||||||
|
BeanUtils.copyProperties(request, taskContext);
|
||||||
|
if (request.getSubTaskContent() != null && request.getSubTaskContent().length > 0) {
|
||||||
|
taskContext.setSubTask(JSONObject.parse(request.getSubTaskContent()));
|
||||||
|
}
|
||||||
|
|
||||||
|
ThreadLocalStore.TASK_CONTEXT_THREAD_LOCAL.set(taskContext);
|
||||||
|
|
||||||
|
// 5. 正式提交运行
|
||||||
|
ProcessorReportTaskStatusReq reportReq = new ProcessorReportTaskStatusReq();
|
||||||
|
BeanUtils.copyProperties(request, reportReq);
|
||||||
|
try {
|
||||||
|
processResult = processor.process(taskContext);
|
||||||
|
reportReq.setResult(processResult.getMsg());
|
||||||
|
if (processResult.isSuccess()) {
|
||||||
|
reportReq.setStatus(TaskStatus.PROCESS_SUCCESS.getValue());
|
||||||
|
}else {
|
||||||
|
reportReq.setStatus(TaskStatus.PROCESS_FAILED.getValue());
|
||||||
|
}
|
||||||
|
}catch (Exception e) {
|
||||||
|
log.warn("[ProcessorRunnable] task({}) process failed.", taskContext.getDescription(), e);
|
||||||
|
|
||||||
|
reportReq.setResult(e.toString());
|
||||||
reportReq.setStatus(TaskStatus.PROCESS_FAILED.getValue());
|
reportReq.setStatus(TaskStatus.PROCESS_FAILED.getValue());
|
||||||
}
|
}
|
||||||
|
taskTrackerActor.tell(reportReq, null);
|
||||||
}catch (Exception e) {
|
}catch (Exception e) {
|
||||||
log.warn("[ProcessorRunnable] task({}) process failed.", taskContext.getDescription(), e);
|
log.error("[ProcessorRunnable] execute failed, please fix this bug!", e);
|
||||||
|
|
||||||
reportReq.setResult(e.toString());
|
|
||||||
reportReq.setStatus(TaskStatus.PROCESS_FAILED.getValue());
|
|
||||||
}
|
}
|
||||||
taskTrackerActor.tell(reportReq, null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private BasicProcessor getProcessor() {
|
private BasicProcessor getProcessor() {
|
||||||
|
@ -2,6 +2,8 @@ package com.github.kfcfans.oms.worker.persistence;
|
|||||||
|
|
||||||
import com.zaxxer.hikari.HikariConfig;
|
import com.zaxxer.hikari.HikariConfig;
|
||||||
import com.zaxxer.hikari.HikariDataSource;
|
import com.zaxxer.hikari.HikariDataSource;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.github.kfcfans.oms.worker.persistence;
|
package com.github.kfcfans.oms.worker.persistence;
|
||||||
|
|
||||||
import com.github.kfcfans.oms.worker.common.constants.TaskStatus;
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
@ -5,12 +5,15 @@
|
|||||||
<!-- ConsoleAppender:把日志输出到控制台 -->
|
<!-- ConsoleAppender:把日志输出到控制台 -->
|
||||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
<encoder>
|
<encoder>
|
||||||
<pattern>%d [%t] %-5level %logger{36}.%M\(%file:%line\) - %msg%n</pattern>
|
<pattern>222222%d [%t] %-5level %logger{36}.%M\(%file:%line\) - %msg%n</pattern>
|
||||||
<!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
|
<!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
|
||||||
<charset>UTF-8</charset>
|
<charset>UTF-8</charset>
|
||||||
</encoder>
|
</encoder>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
|
<logger name="com.zaxxer.hikari" level="ERROR">
|
||||||
|
<appender-ref ref="STDOUT"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
<logger name="com.github.kfcfans.oms" level="INFO" additivity="false">
|
<logger name="com.github.kfcfans.oms" level="INFO" additivity="false">
|
||||||
<appender-ref ref="STDOUT"/>
|
<appender-ref ref="STDOUT"/>
|
||||||
|
26
oh-my-scheduler-worker/src/test/resources/logback-test.xml
Normal file
26
oh-my-scheduler-worker/src/test/resources/logback-test.xml
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%i索引【从数字0开始递增】,,, -->
|
||||||
|
<!-- appender是configuration的子节点,是负责写日志的组件。 -->
|
||||||
|
<!-- ConsoleAppender:把日志输出到控制台 -->
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%red(%d{yyyy-MM-dd HH:mm:ss}) %highlight(%-5level) %green([%thread]) - %cyan(%msg%n)</pattern>
|
||||||
|
<!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
|
||||||
|
<charset>UTF-8</charset>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<logger name="com.zaxxer.hikari" level="ERROR">
|
||||||
|
<appender-ref ref="STDOUT"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<logger name="com.github.kfcfans.oms" level="DEBUG" additivity="false">
|
||||||
|
<appender-ref ref="STDOUT"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<!-- 控制台输出日志级别 -->
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT"/>
|
||||||
|
</root>
|
||||||
|
</configuration>
|
Loading…
x
Reference in New Issue
Block a user