This commit is contained in:
fanqq 2015-11-20 18:02:11 +08:00
parent 75e0b994c7
commit 942cbd9566
8 changed files with 101 additions and 23 deletions

View file

@ -75,11 +75,7 @@ public class TaskExecutorImpl implements TaskExecutor {
if (resLock.tryLock()){
resLocks.add(resLock);
}else {
for (DistLock lock : resLocks){
lock.unlock();
}
buildLock.unlock();
return;
throw new Exception("Get Resources Failed! ResourceId : " + res);
}
}
executeJob(slbId);
@ -89,12 +85,13 @@ public class TaskExecutorImpl implements TaskExecutor {
} catch (Exception e) {
logger.warn("Executor Job Failed! TaskWorker: " + slbId, e);
} finally {
if (lockflag) {
buildLock.unlock();
}
for (DistLock lock : resLocks){
lock.unlock();
}
if (lockflag) {
buildLock.unlock();
}
}
}

View file

@ -7,11 +7,13 @@ import com.ctrip.zeus.executor.TaskManager;
import com.ctrip.zeus.model.entity.*;
import com.ctrip.zeus.model.transform.DefaultSaxParser;
import com.ctrip.zeus.restful.message.ResponseHandler;
import com.ctrip.zeus.service.activate.ActivateService;
import com.ctrip.zeus.service.activate.ActiveConfService;
import com.ctrip.zeus.service.model.ArchiveService;
import com.ctrip.zeus.service.model.GroupRepository;
import com.ctrip.zeus.service.model.SlbRepository;
import com.ctrip.zeus.service.query.GroupCriteriaQuery;
import com.ctrip.zeus.service.query.SlbCriteriaQuery;
import com.ctrip.zeus.service.task.constant.TaskOpsType;
import com.ctrip.zeus.service.validate.SlbValidator;
import com.ctrip.zeus.tag.TagBox;
@ -32,10 +34,7 @@ import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.Response;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.*;
/**
* Created by fanqq on 2015/3/20.
@ -48,7 +47,7 @@ public class ActivateResource {
@Resource
private TagBox tagBox;
@Resource
private SlbRepository slbRepository;
private SlbCriteriaQuery slbCriteriaQuery;
@Resource
private GroupRepository groupRepository;
@Resource
@ -63,6 +62,8 @@ public class ActivateResource {
private ActiveConfService activeConfService;
@Resource
private GroupCriteriaQuery groupCriteriaQuery;
@Resource
private ActivateService activateService;
private static DynamicIntProperty lockTimeout = DynamicPropertyFactory.getInstance().getIntProperty("lock.timeout", 5000);
@ -82,7 +83,7 @@ public class ActivateResource {
{
for (String slbName : slbNames)
{
_slbIds.add(slbRepository.get(slbName).getId());
_slbIds.add(slbCriteriaQuery.queryByName(slbName));
}
}
for (Long id : _slbIds){
@ -172,5 +173,49 @@ public class ActivateResource {
return responseHandler.handle(resultList,hh.getMediaType());
}
@GET
@Path("/vs")
@Authorize(name="activate")
public Response activateVirtualServer(@Context HttpServletRequest request,
@Context HttpHeaders hh,
@QueryParam("vsId") Long vsId)throws Exception {
Archive archive = archiveService.getLatestVsArchive(vsId);
Long slbId = slbCriteriaQuery.queryByVs(vsId);
List<VirtualServer> vses = activateService.getActivatedVirtualServer(vsId);
List<Long> taskIds = new ArrayList<>();
if ((vses.size()==1&&vses.get(0).getSlbId().equals(slbId))||vses.size() == 0){
OpsTask task = new OpsTask();
task.setSlbVirtualServerId(vsId);
task.setCreateTime(new Date());
task.setOpsType(TaskOpsType.ACTIVATE_VS);
task.setTargetSlbId(slbId);
task.setVersion(archive.getVersion());
taskIds.add(taskManager.addTask(task));
}else if (vses.size()==1 && !vses.get(0).getSlbId().equals(slbId)){
VirtualServer vs = vses.get(0);
OpsTask deactivateTask = new OpsTask();
deactivateTask.setSlbVirtualServerId(vsId);
deactivateTask.setCreateTime(new Date());
deactivateTask.setOpsType(TaskOpsType.DEACTIVATE_VS);
deactivateTask.setTargetSlbId(vs.getSlbId());
taskIds.add(taskManager.addTask(deactivateTask));
OpsTask activateTask = new OpsTask();
activateTask.setSlbVirtualServerId(vsId);
activateTask.setCreateTime(new Date());
activateTask.setOpsType(TaskOpsType.ACTIVATE_VS);
activateTask.setTargetSlbId(slbId);
activateTask.setResources(String.valueOf(vs.getSlbId()));
taskIds.add(taskManager.addTask(activateTask));
}else {
throw new ValidationException("Activated Date Of Virtual Server ["+vsId +"] Is Incorrect.");
}
List<TaskResult> results = taskManager.getResult(taskIds,30000L);
TaskResultList resultList = new TaskResultList();
for (TaskResult t : results){
resultList.addTaskResult(t);
}
resultList.setTotal(results.size());
return responseHandler.handle(resultList,hh.getMediaType());
}
}

View file

@ -1,9 +1,13 @@
package com.ctrip.zeus.restful.resource;
import com.ctrip.zeus.auth.Authorize;
import com.ctrip.zeus.exceptions.ValidationException;
import com.ctrip.zeus.executor.TaskManager;
import com.ctrip.zeus.model.entity.Archive;
import com.ctrip.zeus.model.entity.Group;
import com.ctrip.zeus.model.entity.VirtualServer;
import com.ctrip.zeus.restful.message.ResponseHandler;
import com.ctrip.zeus.service.activate.ActivateService;
import com.ctrip.zeus.service.activate.ActiveConfService;
import com.ctrip.zeus.service.model.GroupRepository;
import com.ctrip.zeus.service.task.constant.TaskOpsType;
@ -25,6 +29,7 @@ import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.Response;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
@ -45,6 +50,8 @@ public class DeactivateResource {
private ActiveConfService activeConfService;
@Resource
private TaskManager taskManager;
@Resource
private ActivateService activateService;
private static DynamicIntProperty lockTimeout = DynamicPropertyFactory.getInstance().getIntProperty("lock.timeout", 5000);
@ -98,4 +105,29 @@ public class DeactivateResource {
return responseHandler.handle(resultList, hh.getMediaType());
}
@GET
@Path("/vs")
@Authorize(name="activate")
public Response deactivateVirtualServer(@Context HttpServletRequest request,
@Context HttpHeaders hh,
@QueryParam("vsId") Long vsId,
@QueryParam("slbId") Long slbId)throws Exception {
List<VirtualServer> vses = activateService.getActivatedVirtualServer(vsId);
Long taskId = null;
for (VirtualServer vs : vses){
if (vs.getSlbId().equals(slbId)){
OpsTask activateTask = new OpsTask();
activateTask.setSlbVirtualServerId(vsId);
activateTask.setCreateTime(new Date());
activateTask.setOpsType(TaskOpsType.DEACTIVATE_VS);
activateTask.setTargetSlbId(slbId);
taskId = taskManager.addTask(activateTask);
}
}
if (taskId == null){
throw new ValidationException("Not Found Activated VsId "+vsId + "In Slb "+ slbId);
}
TaskResult results = taskManager.getResult(taskId,30000L);
return responseHandler.handle(results,hh.getMediaType());
}
}

View file

@ -143,7 +143,7 @@ public interface ActivateService extends Repository {
* @return groups
*/
public VirtualServer getActivatedVirtualServer(Long vsId)throws Exception;
public List<VirtualServer> getActivatedVirtualServer(Long vsId)throws Exception;
/**
* get activated vs by slbId
* @param slbId , the vsId

View file

@ -86,7 +86,7 @@ public class ActivateServiceImpl implements ActivateService {
@Override
public void activeVirtualServer(long vsId, int version, Long slbId) throws Exception {
Archive archive = archiveService.getVirtualServerArchive(vsId,version);
Archive archive = archiveService.getVsArchive(vsId, version);
AssertUtils.assertNotNull(archive, "[activate]get Virtual Server Archive return Null! VsId: " + vsId);
ConfSlbVirtualServerActiveDo confSlbVirtualServerActiveDo = new ConfSlbVirtualServerActiveDo();
confSlbVirtualServerActiveDo.setContent(archive.getContent())
@ -178,7 +178,7 @@ public class ActivateServiceImpl implements ActivateService {
@Override
public VirtualServer getActivatingVirtualServer(Long vsId, int version) {
try {
Archive archive = archiveService.getVirtualServerArchive(vsId, version);
Archive archive = archiveService.getVsArchive(vsId, version);
if (archive == null ){
return null;
}
@ -273,9 +273,13 @@ public class ActivateServiceImpl implements ActivateService {
}
@Override
public VirtualServer getActivatedVirtualServer(Long vsId) throws Exception {
ConfSlbVirtualServerActiveDo confSlbVirtualServerActiveDo = confSlbVirtualServerActiveDao.findBySlbVirtualServerId(vsId,ConfSlbVirtualServerActiveEntity.READSET_FULL);
return DefaultSaxParser.parseEntity(VirtualServer.class, confSlbVirtualServerActiveDo.getContent());
public List<VirtualServer> getActivatedVirtualServer(Long vsId) throws Exception {
List<VirtualServer>res = new ArrayList<>();
List<ConfSlbVirtualServerActiveDo> confSlbVirtualServerActiveDos = confSlbVirtualServerActiveDao.findBySlbVirtualServerId(vsId,ConfSlbVirtualServerActiveEntity.READSET_FULL);
for (ConfSlbVirtualServerActiveDo c : confSlbVirtualServerActiveDos){
res.add(DefaultSaxParser.parseEntity(VirtualServer.class, c.getContent()));
}
return res;
}
@Override

View file

@ -41,5 +41,5 @@ public interface ArchiveService {
Archive getVsArchive(Long vsId, int version) throws Exception;
Archive getLatestArchive(Long vsId) throws Exception;
Archive getLatestVsArchive(Long vsId) throws Exception;
}

View file

@ -137,7 +137,7 @@ public class ArchiveServiceImpl implements ArchiveService {
}
@Override
public Archive getLatestArchive(Long vsId) throws Exception {
public Archive getLatestVsArchive(Long vsId) throws Exception {
MetaVsArchiveDo d = archiveVsDao.findMaxVersionByVs(vsId, ArchiveVsEntity.READSET_FULL);
return new Archive().setId(d.getVsId()).setContent(d.getContent()).setVersion(d.getVersion());
}

View file

@ -128,7 +128,7 @@
]]>
</statement>
</query>
<query name="find-by-slb-virtual-server-id" type="SELECT">
<query name="find-by-slb-virtual-server-id" type="SELECT" multiple="true">
<param name="slb-virtual-server-id"/>
<statement>
<![CDATA[