REM:
1. 增加REST-ful接口请求超时检查
2. 修正启动处置任务时,未能判断当前相同用户,设备,处置IP的任务是否在运行的问题
3. 系统启动时,根据配置文件配置REST-ful接口请求超时检查开关
4. 修正停止处置任务失败时,恢复任务状态不正确问题
This commit is contained in:
HuangXin 2020-04-30 17:50:54 +08:00
parent 05701262b1
commit 7ac90a3c35
9 changed files with 60 additions and 22 deletions

View File

@ -54,10 +54,6 @@ public class ConstValue {
* The type Protocol.
*/
public static class Protocol {
/**
* The constant RESP_CMD_BASE.
*/
public static final int RESP_CMD_BASE = 10000;
/**
* The constant VERSION.
*/
@ -74,6 +70,8 @@ public class ConstValue {
* The constant CRYPTO_AES256.
*/
public static final int CRYPTO_AES256 = 2;
public static final int REQUEST_TIMEOUT_MS = 10 * 1000;
}
/**

View File

@ -130,7 +130,15 @@ public enum ErrorCode {
*/
ERR_NOSUCHTASK(30, "没有该任务"),
/**
* Err tasknotrunning error code.
*/
ERR_TASKNOTRUNNING(31, "该任务没有运行"),
/**
* Err requesttimeout error code.
*/
ERR_REQUESTTIMEOUT(32, "请求超时"),
;
/**

View File

@ -25,4 +25,9 @@ public class GlobalVar {
* The constant USED_VIRTUAL_DISPOSE_MODE.
*/
public static volatile boolean USED_VIRTUAL_DISPOSE_MODE = false;
/**
* The constant IS_CHECK_REQUEST_TIMEOUT.
*/
public static volatile boolean IS_CHECK_REQUEST_TIMEOUT = false;
}

View File

@ -1,5 +1,6 @@
package com.dispose.config;
import com.dispose.common.GlobalVar;
import com.dispose.service.DisposeNodeManager;
import com.dispose.service.TaskService;
import javax.annotation.Resource;
@ -13,6 +14,12 @@ import org.springframework.stereotype.Component;
@Component
@Slf4j
public class SetupInit implements CommandLineRunner {
/**
* The Dispose configure.
*/
@Resource
private DisposeConfigure disposeConfigure;
/**
* The Dispose node manager.
*/
@ -33,6 +40,7 @@ public class SetupInit implements CommandLineRunner {
@Override
public void run(String... args) {
// TODO Auto-generated method stub
GlobalVar.IS_CHECK_REQUEST_TIMEOUT = Boolean.parseBoolean(disposeConfigure.getCheckProtocolTimeout());
log.info("System Setup................................................");
disposeNodeManager.loadDisposeNodeFromDB();
taskService.loadTaskFromDatabase();

View File

@ -98,7 +98,7 @@ public class DisposeTaskController {
StartTaskRsp rspInfo = new StartTaskRsp();
TaskInfoDetail task = TaskInfoDetail.builder()
.id(Long.valueOf(reqInfo.getId()))
.deviceId(Long.valueOf(reqInfo.getId()))
.accountId(userAccountService.getUserByToken(mr.getAuthToken()).getId())
.type(reqInfo.getType())
.disposeIp(reqInfo.getDisposeIp())

View File

@ -2,15 +2,17 @@ package com.dispose.pojo.dto;
import com.dispose.common.ConstValue;
import com.dispose.common.ErrorCode;
import com.dispose.common.GlobalVar;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Objects;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.springframework.http.HttpHeaders;
import java.util.Objects;
/**
* The type Protocol req dto.
*/
@ -59,6 +61,12 @@ public class ProtocolReqDTO extends ProtocolDTO {
*/
public ErrorCode verifyRequest(HttpHeaders headers) {
ErrorCode err = verifyRequest();
if (err != ErrorCode.ERR_OK) {
return err;
}
if (headers == null) {
return ErrorCode.ERR_MISSAUTHHEAD;
}
@ -93,6 +101,11 @@ public class ProtocolReqDTO extends ProtocolDTO {
return ErrorCode.ERR_VERSION;
}
if (GlobalVar.IS_CHECK_REQUEST_TIMEOUT
&& System.currentTimeMillis() - this.getTimeStamp() >= ConstValue.Protocol.REQUEST_TIMEOUT_MS) {
return ErrorCode.ERR_REQUESTTIMEOUT;
}
return ErrorCode.ERR_OK;
}
}

View File

@ -131,12 +131,13 @@ public class TaskServiceImpl implements TaskService {
@Override
public MReturnType<ErrorCode, Long> createTask(TaskInfoDetail task) {
DisposeDevice disposeDevice;
Long taskId = task.getDeviceId();
// 首先查找有没有能处置这个ip的能力节点
if (task.getId() == null || task.getId() < 0) { // 没有指定处置能力节点的情况
if (taskId == null || taskId < 0) { // 没有指定处置能力节点的情况
disposeDevice = getDisposeNode(task.getDisposeIp(), task.getType());
} else { // 指定了处置能力节点的情况
disposeDevice = disposeNodeManager.getDisposeDeviceById(task.getId());
disposeDevice = disposeNodeManager.getDisposeDeviceById(taskId);
}
if (disposeDevice == null) {
@ -146,14 +147,14 @@ public class TaskServiceImpl implements TaskService {
.build();
} else {
task.setDeviceId(disposeDevice.getId());
task.setAccountId(task.getAccountId());
}
// 查询当前是否有相同能力节点相同用户相同处置IP的且正在执行的处置任务如果存在则忽略该次任务依照产品需求
List<TaskInfoDetail> taskList = taskCacheManager.getAllTask()
.parallelStream()
.filter(v -> ((v.getId() == null || v.getId() == -1L) || Objects.equals(v.getId(), task.getDeviceId()))
.filter(v -> ((taskId == null || taskId == -1L) || Objects.equals(v.getDeviceId(), task.getDeviceId()))
&& Objects.equals(v.getAccountId(), task.getAccountId())
&& taskIsRunning(v)
&& Objects.equals(v.getType(), task.getType())
&& Objects.equals(v.getDisposeIp(), task.getDisposeIp()))
.collect(Collectors.toList());
@ -241,12 +242,6 @@ public class TaskServiceImpl implements TaskService {
@Override
public ErrorCode stopTask(Long taskId) {
ErrorCode err = taskCacheManager.upgradeTaskStatus(taskId, DisposeTaskStatus.TASK_STOP.getCode());
if (err != ErrorCode.ERR_OK) {
return err;
}
TaskInfoDetail task = taskCacheManager.getTaskById(taskId);
if (task != null) {
@ -258,6 +253,12 @@ public class TaskServiceImpl implements TaskService {
int prdStatus = task.getCurrentStatus();
ErrorCode err = taskCacheManager.upgradeTaskStatus(taskId, DisposeTaskStatus.TASK_STOP.getCode());
if (err != ErrorCode.ERR_OK) {
return err;
}
// 异步启动处置任务
CompletableFuture.supplyAsync(() -> dp.stopDispose(task.getDisposeIp(), DeviceCapacity.values()[task.getType()]))
.whenComplete((v, ex) -> {
@ -276,6 +277,8 @@ public class TaskServiceImpl implements TaskService {
}
}
});
} else {
return ErrorCode.ERR_NOSUCHTASK;
}
return ErrorCode.ERR_OK;

View File

@ -4,8 +4,6 @@ import com.dispose.common.ErrorCode;
import com.dispose.common.GlobalVar;
import com.dispose.pojo.po.MReturnType;
import com.dispose.service.UserAccountService;
import java.util.Iterator;
import javax.annotation.Resource;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.json.JSONException;
@ -15,6 +13,9 @@ import org.junit.Before;
import org.junit.BeforeClass;
import org.springframework.test.context.ActiveProfiles;
import javax.annotation.Resource;
import java.util.Iterator;
/**
* The type Init test environment.
*/
@ -50,6 +51,8 @@ public class InitTestEnvironment {
@BeforeClass
public static void initVirtualDevice() {
GlobalVar.USED_VIRTUAL_DISPOSE_MODE = true;
GlobalVar.IS_CHECK_REQUEST_TIMEOUT = true;
log.warn("Current Used Virtual Dispose Device");
}

View File

@ -30,6 +30,6 @@ public class TaskServiceTest extends InitTestEnvironment {
public void t1_stopTaskTest() {
ErrorCode err = taskService.stopTask(-1L);
Assert.assertEquals(err, ErrorCode.ERR_NOSUCHDEVICE);
Assert.assertNotEquals(err, ErrorCode.ERR_OK);
}
}