OCT
REM: 1. 增加REST-ful接口请求超时检查 2. 修正启动处置任务时,未能判断当前相同用户,设备,处置IP的任务是否在运行的问题 3. 系统启动时,根据配置文件配置REST-ful接口请求超时检查开关 4. 修正停止处置任务失败时,恢复任务状态不正确问题
This commit is contained in:
parent
05701262b1
commit
7ac90a3c35
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -130,7 +130,15 @@ public enum ErrorCode {
|
|||
*/
|
||||
ERR_NOSUCHTASK(30, "没有该任务"),
|
||||
|
||||
/**
|
||||
* Err tasknotrunning error code.
|
||||
*/
|
||||
ERR_TASKNOTRUNNING(31, "该任务没有运行"),
|
||||
|
||||
/**
|
||||
* Err requesttimeout error code.
|
||||
*/
|
||||
ERR_REQUESTTIMEOUT(32, "请求超时"),
|
||||
;
|
||||
|
||||
/**
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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,14 +61,20 @@ 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;
|
||||
}
|
||||
|
||||
try {
|
||||
ProtocolReqDTO.token = Objects.
|
||||
requireNonNull(headers.get("Authorization"))
|
||||
.get(0).replaceFirst("Bearer ", "");
|
||||
requireNonNull(headers.get("Authorization"))
|
||||
.get(0).replaceFirst("Bearer ", "");
|
||||
} catch (Exception ex) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
||||
|
@ -114,7 +117,7 @@ public class InitTestEnvironment {
|
|||
Assert.assertEquals(err, ErrorCode.ERR_OK);
|
||||
|
||||
if ((jsonObject.getString("code").length() == 0) ||
|
||||
Long.parseLong(jsonObject.getString("code")) != 200) {
|
||||
Long.parseLong(jsonObject.getString("code")) != 200) {
|
||||
err = ErrorCode.ERR_UNKNOWNCMD;
|
||||
}
|
||||
Assert.assertEquals(err, ErrorCode.ERR_OK);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue