From e258d1c30a10e98623007b50f4d7be0e147c92ad Mon Sep 17 00:00:00 2001 From: Mengyi Zhou Date: Wed, 16 Sep 2015 18:27:00 +0800 Subject: [PATCH] report misses gs/gvs update --- .../restful/resource/GroupMemberResource.java | 6 ++--- .../resource/VirtualServerResource.java | 6 ++++- .../ctrip/zeus/service/aop/ReportAspect.java | 13 +++++++++ .../zeus/service/model/GroupRepository.java | 4 +-- .../zeus/service/model/SlbRepository.java | 2 +- .../model/impl/GroupRepositoryImpl.java | 27 ++++++++----------- .../service/model/impl/SlbRepositoryImpl.java | 13 +++++---- .../ctrip/zeus/service/ModelServiceTest.java | 15 +++++++---- 8 files changed, 50 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/ctrip/zeus/restful/resource/GroupMemberResource.java b/src/main/java/com/ctrip/zeus/restful/resource/GroupMemberResource.java index 5a7526a5..7b2f7b2e 100644 --- a/src/main/java/com/ctrip/zeus/restful/resource/GroupMemberResource.java +++ b/src/main/java/com/ctrip/zeus/restful/resource/GroupMemberResource.java @@ -60,7 +60,7 @@ public class GroupMemberResource { for (GroupServer groupServer : gsl.getGroupServers()) { groupMemberRepository.addGroupServer(gsl.getGroupId(), groupServer); } - groupRepository.updateVersion(gsl.getGroupId()); + groupRepository.updateVersion(new Long[] {gsl.getGroupId()}); return responseHandler.handle("Successfully added group servers to group with id " + gsl.getGroupId() + ".", hh.getMediaType()); } @@ -75,7 +75,7 @@ public class GroupMemberResource { for (GroupServer groupServer : gsl.getGroupServers()) { groupMemberRepository.updateGroupServer(gsl.getGroupId(), groupServer); } - groupRepository.updateVersion(gsl.getGroupId()); + groupRepository.updateVersion(new Long[] {gsl.getGroupId()}); return responseHandler.handle("Successfully updated group servers to group with id " + gsl.getGroupId() + ".", hh.getMediaType()); } @@ -90,7 +90,7 @@ public class GroupMemberResource { for (String ip : ips) { groupMemberRepository.removeGroupServer(groupId, ip); } - groupRepository.updateVersion(groupId); + groupRepository.updateVersion(new Long[] {groupId}); return responseHandler.handle("Successfully removed " + Joiner.on(",").join(ips) + " from group with id " + groupId + ".", hh.getMediaType()); } diff --git a/src/main/java/com/ctrip/zeus/restful/resource/VirtualServerResource.java b/src/main/java/com/ctrip/zeus/restful/resource/VirtualServerResource.java index 73d11ee5..308e951d 100644 --- a/src/main/java/com/ctrip/zeus/restful/resource/VirtualServerResource.java +++ b/src/main/java/com/ctrip/zeus/restful/resource/VirtualServerResource.java @@ -12,6 +12,7 @@ import com.ctrip.zeus.restful.message.TrimmedQueryParam; import com.ctrip.zeus.service.model.GroupRepository; import com.ctrip.zeus.service.model.SlbRepository; import com.ctrip.zeus.service.model.VirtualServerRepository; +import com.ctrip.zeus.service.query.GroupCriteriaQuery; import com.ctrip.zeus.service.query.VirtualServerCriteriaQuery; import com.ctrip.zeus.tag.PropertyService; import com.ctrip.zeus.tag.TagService; @@ -42,6 +43,8 @@ public class VirtualServerResource { @Resource private VirtualServerCriteriaQuery virtualServerCriteriaQuery; @Resource + private GroupCriteriaQuery groupCriteriaQuery; + @Resource private TagService tagService; @Resource private PropertyService propertyService; @@ -119,7 +122,8 @@ public class VirtualServerResource { throw new ValidationException("Slb id is not provided."); virtualServerRepository.updateVirtualServer(virtualServer); slbRepository.updateVersion(virtualServer.getSlbId()); - groupRepository.updateVersionByVirtualServer(virtualServer.getId()); + Set groupIds = groupCriteriaQuery.queryByVsIds(new Long[] {virtualServer.getId()}); + groupRepository.updateVersion(groupIds.toArray(new Long[groupIds.size()])); return responseHandler.handle(virtualServer, hh.getMediaType()); } diff --git a/src/main/java/com/ctrip/zeus/service/aop/ReportAspect.java b/src/main/java/com/ctrip/zeus/service/aop/ReportAspect.java index 934e9964..cc42637a 100644 --- a/src/main/java/com/ctrip/zeus/service/aop/ReportAspect.java +++ b/src/main/java/com/ctrip/zeus/service/aop/ReportAspect.java @@ -11,6 +11,7 @@ import org.springframework.core.Ordered; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.util.List; /** * Created by zhoumy on 2015/7/9. @@ -39,6 +40,18 @@ public class ReportAspect implements Ordered { } return obj; } + case "updateVersion": { + Object obj = point.proceed(); + try { + List groups = (List) obj; + for (Group group : groups) { + reportService.reportGroup(group); + } + } catch (Exception ex) { + logger.error("Fail to report group to queue.", ex); + } + return obj; + } case "delete": { Object obj = point.proceed(); try { diff --git a/src/main/java/com/ctrip/zeus/service/model/GroupRepository.java b/src/main/java/com/ctrip/zeus/service/model/GroupRepository.java index f901eda8..d0a52b2c 100644 --- a/src/main/java/com/ctrip/zeus/service/model/GroupRepository.java +++ b/src/main/java/com/ctrip/zeus/service/model/GroupRepository.java @@ -27,9 +27,7 @@ public interface GroupRepository extends Repository { Group update(Group group) throws Exception; - void updateVersion(Long groupId) throws Exception; - - void updateVersionByVirtualServer(Long vsId) throws Exception; + List updateVersion(Long[] groupIds) throws Exception; int delete(Long groupId) throws Exception; diff --git a/src/main/java/com/ctrip/zeus/service/model/SlbRepository.java b/src/main/java/com/ctrip/zeus/service/model/SlbRepository.java index 23ca42a4..0029a6ed 100644 --- a/src/main/java/com/ctrip/zeus/service/model/SlbRepository.java +++ b/src/main/java/com/ctrip/zeus/service/model/SlbRepository.java @@ -31,5 +31,5 @@ public interface SlbRepository extends Repository { int delete(Long slbId) throws Exception; - void updateVersion(Long slbId) throws Exception; + Slb updateVersion(Long slbId) throws Exception; } diff --git a/src/main/java/com/ctrip/zeus/service/model/impl/GroupRepositoryImpl.java b/src/main/java/com/ctrip/zeus/service/model/impl/GroupRepositoryImpl.java index c0134727..0c69e252 100644 --- a/src/main/java/com/ctrip/zeus/service/model/impl/GroupRepositoryImpl.java +++ b/src/main/java/com/ctrip/zeus/service/model/impl/GroupRepositoryImpl.java @@ -12,6 +12,7 @@ import com.ctrip.zeus.service.query.GroupCriteriaQuery; import org.springframework.stereotype.Repository; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -79,9 +80,7 @@ public class GroupRepositoryImpl implements GroupRepository { Long groupId = groupSync.add(group); group.setId(groupId); syncVsAndGs(group); - archive(groupId); - return getById(groupId); - + return archive(groupId); } @Override @@ -90,23 +89,18 @@ public class GroupRepositoryImpl implements GroupRepository { Long groupId = groupSync.update(group); group.setId(groupId); syncVsAndGs(group); - archive(groupId); - return getById(groupId); + return archive(groupId); } @Override - public void updateVersion(Long groupId) throws Exception { - groupSync.updateVersion(new Long[]{groupId}); - archive(groupId); - } - - @Override - public void updateVersionByVirtualServer(Long vsId) throws Exception { - Set groupIds = groupCriteriaQuery.queryByVsIds(new Long[] {vsId}); - groupSync.updateVersion(groupIds.toArray(new Long[groupIds.size()])); + public List updateVersion(Long[] groupIds) throws Exception { + List result = new ArrayList<>(); + groupSync.updateVersion(groupIds); for (Long groupId : groupIds) { - archive(groupId); + Group group = archive(groupId); + result.add(group); } + return result; } @Override @@ -123,7 +117,7 @@ public class GroupRepositoryImpl implements GroupRepository { return list(groupIds); } - private void archive(Long groupId) throws Exception { + private Group archive(Long groupId) throws Exception { Group group = groupQuery.getById(groupId); for (GroupVirtualServer groupVirtualServer : virtualServerRepository.listGroupVsByGroups(new Long[]{group.getId()})) { group.addGroupVirtualServer(groupVirtualServer); @@ -132,6 +126,7 @@ public class GroupRepositoryImpl implements GroupRepository { group.addGroupServer(server); } archiveService.archiveGroup(group); + return group; } private void syncVsAndGs(Group group) throws Exception { diff --git a/src/main/java/com/ctrip/zeus/service/model/impl/SlbRepositoryImpl.java b/src/main/java/com/ctrip/zeus/service/model/impl/SlbRepositoryImpl.java index c4dffa5e..bddc841d 100644 --- a/src/main/java/com/ctrip/zeus/service/model/impl/SlbRepositoryImpl.java +++ b/src/main/java/com/ctrip/zeus/service/model/impl/SlbRepositoryImpl.java @@ -93,8 +93,7 @@ public class SlbRepositoryImpl implements SlbRepository { Long slbId = slbSync.add(slb); slb.setId(slbId); addVs(slb); - archive(slbId); - Slb result = getById(slbId); + Slb result = archive(slbId); for (SlbServer slbServer : result.getSlbServers()) { nginxServerDao.insert(new NginxServerDo() @@ -110,8 +109,7 @@ public class SlbRepositoryImpl implements SlbRepository { public Slb update(Slb slb) throws Exception { slbModelValidator.validate(slb); Long slbId = slbSync.update(slb); - archive(slbId); - Slb result = getById(slbId); + Slb result = archive(slbId); for (SlbServer slbServer : result.getSlbServers()) { nginxServerDao.insert(new NginxServerDo() @@ -132,17 +130,18 @@ public class SlbRepositoryImpl implements SlbRepository { } @Override - public void updateVersion(Long slbId) throws Exception { + public Slb updateVersion(Long slbId) throws Exception { slbSync.updateVersion(slbId); - archive(slbId); + return archive(slbId); } - private void archive(Long slbId) throws Exception { + private Slb archive(Long slbId) throws Exception { Slb slb = slbQuery.getById(slbId); for (VirtualServer virtualServer : virtualServerRepository.listVirtualServerBySlb(slb.getId())) { slb.addVirtualServer(virtualServer); } archiveService.archiveSlb(slb); + return slb; } private List batchGet(Long[] slbIds) throws Exception { diff --git a/src/test/java/com/ctrip/zeus/service/ModelServiceTest.java b/src/test/java/com/ctrip/zeus/service/ModelServiceTest.java index 1e7269e4..5990c894 100644 --- a/src/test/java/com/ctrip/zeus/service/ModelServiceTest.java +++ b/src/test/java/com/ctrip/zeus/service/ModelServiceTest.java @@ -3,6 +3,7 @@ package com.ctrip.zeus.service; import com.ctrip.zeus.exceptions.ValidationException; import com.ctrip.zeus.model.entity.*; import com.ctrip.zeus.service.model.*; +import com.ctrip.zeus.service.query.GroupCriteriaQuery; import com.ctrip.zeus.util.ModelAssert; import com.ctrip.zeus.util.S; import org.codehaus.plexus.component.repository.exception.ComponentLifecycleException; @@ -18,6 +19,7 @@ import javax.annotation.Resource; import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.Set; /** * Created by zhoumy on 2015/3/24. @@ -29,6 +31,8 @@ public class ModelServiceTest extends AbstractSpringTest { @Resource private GroupRepository groupRepository; @Resource + private GroupCriteriaQuery groupCriteriaQuery; + @Resource private SlbRepository slbRepository; @Resource private VirtualServerRepository virtualServerRepository; @@ -90,7 +94,7 @@ public class ModelServiceTest extends AbstractSpringTest { @Test public void testListSlbsByGroups() throws Exception { - List slbs = slbRepository.listByGroups(new Long[]{testGroup.getId(), testGroup.getId() + 1}); + List slbs = slbRepository.listByGroups(new Long[]{testGroup.getId(), testGroup.getId() + 1 }); Assert.assertEquals(1, slbs.size()); } @@ -294,7 +298,7 @@ public class ModelServiceTest extends AbstractSpringTest { gvs.add(new GroupVirtualServer().setPath("/testUpdateGroupVsNew").setVirtualServer(new VirtualServer().setId(defaultSlb.getVirtualServers().get(0).getId()))); virtualServerRepository.updateGroupVirtualServers(testGroup.getId(), gvs); - groupRepository.updateVersion(testGroup.getId()); + groupRepository.updateVersion(new Long[] {testGroup.getId()}); Assert.assertEquals(gvs.size(), groupRepository.get(testGroup.getName()).getGroupVirtualServers().size()); Assert.assertEquals(gvs.size(), virtualServerRepository.listGroupVsByGroups(new Long[]{testGroup.getId()}).size()); @@ -305,14 +309,14 @@ public class ModelServiceTest extends AbstractSpringTest { gvs.get(0).setVirtualServer(new VirtualServer().setId(defaultSlb.getVirtualServers().get(1).getId())); try { virtualServerRepository.updateGroupVirtualServers(testGroup.getId(), gvs); - groupRepository.updateVersion(testGroup.getId()); + groupRepository.updateVersion(new Long[] {testGroup.getId()}); Assert.assertTrue(false); } catch (Exception ex) { Assert.assertTrue(ex instanceof ValidationException); } gvs.remove(gvs.get(1)); virtualServerRepository.updateGroupVirtualServers(testGroup.getId(), gvs); - groupRepository.updateVersion(testGroup.getId()); + groupRepository.updateVersion(new Long[] {testGroup.getId()}); gvs = virtualServerRepository.listGroupVsByGroups(new Long[]{testGroup.getId()}); Assert.assertEquals(1, gvs.size()); @@ -348,7 +352,8 @@ public class ModelServiceTest extends AbstractSpringTest { virtualServers.get(1).setName("www.hello.com.cn"); for (VirtualServer virtualServer : virtualServers) { virtualServerRepository.updateVirtualServer(virtualServer); - groupRepository.updateVersionByVirtualServer(virtualServer.getId()); + Set groupIds = groupCriteriaQuery.queryByVsIds(new Long[] {virtualServer.getId()}); + groupRepository.updateVersion(groupIds.toArray(new Long[groupIds.size()])); } slbRepository.updateVersion(created.getId());