fix: server can't record zero cost processor's status #620

This commit is contained in:
tjq 2023-05-07 22:08:14 +08:00
parent 174696066d
commit a7394e518c
2 changed files with 27 additions and 0 deletions

View File

@ -10,6 +10,7 @@ import tech.powerjob.common.enums.TimeExpressionType;
import tech.powerjob.common.model.LifeCycle;
import tech.powerjob.common.request.ServerStopInstanceReq;
import tech.powerjob.common.request.TaskTrackerReportInstanceStatusReq;
import tech.powerjob.common.utils.CommonUtils;
import tech.powerjob.remote.framework.base.URL;
import tech.powerjob.server.common.module.WorkerInfo;
import tech.powerjob.server.common.timewheel.holder.HashedWheelTimerHolder;
@ -81,6 +82,14 @@ public class InstanceManager implements TransportServiceAware {
log.warn("[InstanceManager-{}] can't find InstanceInfo from database", instanceId);
return;
}
// 考虑极端情况Processor 处理耗时小于 server DB 耗时会导致状态上报时无 taskTracker 地址此处等待后重新从DB获取数据 GitHub#620
if (StringUtils.isEmpty(instanceInfo.getTaskTrackerAddress())) {
log.warn("[InstanceManager-{}] TaskTrackerAddress is empty, server will wait then acquire again!", instanceId);
CommonUtils.easySleep(277);
instanceInfo = instanceInfoRepository.findByInstanceId(instanceId);
}
int originStatus = instanceInfo.getStatus();
// 丢弃过期的上报数据
if (req.getReportTime() <= instanceInfo.getLastReportTime()) {

View File

@ -0,0 +1,18 @@
package tech.powerjob.samples.processors.test;
import tech.powerjob.worker.core.processor.ProcessResult;
import tech.powerjob.worker.core.processor.TaskContext;
import tech.powerjob.worker.core.processor.sdk.BasicProcessor;
/**
* ZeroCostTestProcessor
*
* @author tjq
* @since 2023/5/7
*/
public class ZeroCostTestProcessor implements BasicProcessor {
@Override
public ProcessResult process(TaskContext context) throws Exception {
return new ProcessResult(true, "zero cost");
}
}