diff --git a/src/main/java/com/ctrip/zeus/executor/impl/TaskExecutorImpl.java b/src/main/java/com/ctrip/zeus/executor/impl/TaskExecutorImpl.java index e18de579..d827a300 100644 --- a/src/main/java/com/ctrip/zeus/executor/impl/TaskExecutorImpl.java +++ b/src/main/java/com/ctrip/zeus/executor/impl/TaskExecutorImpl.java @@ -153,19 +153,15 @@ public class TaskExecutorImpl implements TaskExecutor { //1.4 offline data check List toFetch = new ArrayList<>(); for (OpsTask task : activateGroupOps.values()) { - if (softDeactivateGroupOps.containsKey(task.getGroupId())){ - setTaskFail(task,"Activating Group while soft deactivating group ,groupId[" + task.getGroupId() + "]"); + if (softDeactivateGroupOps.containsKey(task.getGroupId())) { + setTaskFail(task, "Activating Group while soft deactivating group ,groupId[" + task.getGroupId() + "]"); + activateGroupOps.remove(task.getGroupId()); continue; } if (!offlineGroups.get(task.getGroupId()).getVersion().equals(task.getVersion())) { toFetch.add(new IdVersion(task.getId(), task.getVersion())); } } - for (OpsTask task : softDeactivateGroupOps.values()){ - if (!offlineGroups.get(task.getGroupId()).getVersion().equals(task.getVersion())) { - toFetch.add(new IdVersion(task.getId(), task.getVersion())); - } - } List groups = groupRepository.list(toFetch.toArray(new IdVersion[]{})); for (Group group : groups) { offlineGroups.put(group.getId(), group); @@ -194,6 +190,11 @@ public class TaskExecutorImpl implements TaskExecutor { for (Long gid : activateGroupOps.keySet()) { onlineGroups.put(gid, offlineGroups.get(gid)); } + for (Long gid : softDeactivateGroupOps.keySet()) { + if (onlineGroups.containsKey(gid)) { + onlineGroups.remove(gid); + } + } //2.2 merge on/offline vses for (Long sid : activateVsOps.keySet()) { onlineVses.put(sid, offlineVses.get(sid)); @@ -225,7 +226,7 @@ public class TaskExecutorImpl implements TaskExecutor { if (task.getSlbVirtualServerId() != null && onlineVses.containsKey(task.getSlbVirtualServerId())) { needBuildVses.add(task.getSlbVirtualServerId()); } else { - setTaskFail(task,"Not found online vs for soft deactivate group ops. vs="+task.getSlbVirtualServerId()); + setTaskFail(task, "Not found online vs for soft deactivate group ops. vs=" + task.getSlbVirtualServerId()); } } } diff --git a/src/main/java/com/ctrip/zeus/restful/resource/DeactivateResource.java b/src/main/java/com/ctrip/zeus/restful/resource/DeactivateResource.java index 871e1ca8..c2dd5efc 100644 --- a/src/main/java/com/ctrip/zeus/restful/resource/DeactivateResource.java +++ b/src/main/java/com/ctrip/zeus/restful/resource/DeactivateResource.java @@ -150,6 +150,35 @@ public class DeactivateResource { return responseHandler.handle(results, hh.getMediaType()); } + @GET + @Path("/soft/group") + @Authorize(name = "activate") + public Response softDeactivateGroup(@Context HttpServletRequest request, + @Context HttpHeaders hh, + @QueryParam("vsId") Long vsId, + @QueryParam("groupId") Long groupId) throws Exception { + ModelStatusMapping groupMap = entityFactory.getGroupsByIds(new Long[]{groupId}); + if (groupMap.getOfflineMapping() != null && groupMap.getOfflineMapping().size() > 0) { + throw new ValidationException("Not found group."); + } + ModelStatusMapping vsMap = entityFactory.getVsesByIds(new Long[]{vsId}); + if (vsMap.getOnlineMapping() == null || vsMap.getOnlineMapping().get(vsId) == null) { + throw new ValidationException("Vs is not activated.VsId:" + vsId); + } + VirtualServer vs = vsMap.getOnlineMapping().get(vsId); + OpsTask sofDeactivateTask = new OpsTask(); + sofDeactivateTask.setSlbVirtualServerId(vsId); + sofDeactivateTask.setCreateTime(new Date()); + sofDeactivateTask.setOpsType(TaskOpsType.SOFT_DEACTIVATE_GROUP); + sofDeactivateTask.setTargetSlbId(vs.getSlbId()); + sofDeactivateTask.setGroupId(groupId); + sofDeactivateTask.setVersion(groupMap.getOfflineMapping().get(groupId).getVersion()); + Long taskId = taskManager.addTask(sofDeactivateTask); + + TaskResult results = taskManager.getResult(taskId, apiTimeout.get()); + return responseHandler.handle(results, hh.getMediaType()); + } + @GET @Path("/slb") @Authorize(name = "activate")