提交 e2c8c9ca 编写于 作者: J Jason Song 提交者: GitHub

Merge pull request #527 from lepdou/check_namespace

check namespace and branch exist when update gray rules
...@@ -5,10 +5,12 @@ import com.ctrip.framework.apollo.biz.entity.Namespace; ...@@ -5,10 +5,12 @@ import com.ctrip.framework.apollo.biz.entity.Namespace;
import com.ctrip.framework.apollo.biz.message.MessageSender; import com.ctrip.framework.apollo.biz.message.MessageSender;
import com.ctrip.framework.apollo.biz.message.Topics; import com.ctrip.framework.apollo.biz.message.Topics;
import com.ctrip.framework.apollo.biz.service.NamespaceBranchService; import com.ctrip.framework.apollo.biz.service.NamespaceBranchService;
import com.ctrip.framework.apollo.biz.service.NamespaceService;
import com.ctrip.framework.apollo.biz.utils.ReleaseMessageKeyGenerator; import com.ctrip.framework.apollo.biz.utils.ReleaseMessageKeyGenerator;
import com.ctrip.framework.apollo.common.constants.NamespaceBranchStatus; import com.ctrip.framework.apollo.common.constants.NamespaceBranchStatus;
import com.ctrip.framework.apollo.common.dto.GrayReleaseRuleDTO; import com.ctrip.framework.apollo.common.dto.GrayReleaseRuleDTO;
import com.ctrip.framework.apollo.common.dto.NamespaceDTO; import com.ctrip.framework.apollo.common.dto.NamespaceDTO;
import com.ctrip.framework.apollo.common.exception.BadRequestException;
import com.ctrip.framework.apollo.common.utils.BeanUtils; import com.ctrip.framework.apollo.common.utils.BeanUtils;
import com.ctrip.framework.apollo.common.utils.GrayReleaseRuleItemTransformer; import com.ctrip.framework.apollo.common.utils.GrayReleaseRuleItemTransformer;
...@@ -27,6 +29,8 @@ public class NamespaceBranchController { ...@@ -27,6 +29,8 @@ public class NamespaceBranchController {
private MessageSender messageSender; private MessageSender messageSender;
@Autowired @Autowired
private NamespaceBranchService namespaceBranchService; private NamespaceBranchService namespaceBranchService;
@Autowired
private NamespaceService namespaceService;
@RequestMapping(value = "/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/branches", method = RequestMethod.POST) @RequestMapping(value = "/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/branches", method = RequestMethod.POST)
...@@ -35,14 +39,22 @@ public class NamespaceBranchController { ...@@ -35,14 +39,22 @@ public class NamespaceBranchController {
@PathVariable String namespaceName, @PathVariable String namespaceName,
@RequestParam("operator") String operator) { @RequestParam("operator") String operator) {
checkNamespace(appId, clusterName, namespaceName);
Namespace createdBranch = namespaceBranchService.createBranch(appId, clusterName, namespaceName, operator); Namespace createdBranch = namespaceBranchService.createBranch(appId, clusterName, namespaceName, operator);
return BeanUtils.transfrom(NamespaceDTO.class, createdBranch); return BeanUtils.transfrom(NamespaceDTO.class, createdBranch);
} }
@RequestMapping("/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/branches/{branchName}/rules")
@RequestMapping(value = "/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/branches/{branchName}/rules",
method = RequestMethod.GET)
public GrayReleaseRuleDTO findBranchGrayRules(@PathVariable String appId, public GrayReleaseRuleDTO findBranchGrayRules(@PathVariable String appId,
@PathVariable String clusterName, @PathVariable String clusterName,
@PathVariable String namespaceName, @PathVariable String namespaceName,
@PathVariable String branchName) { @PathVariable String branchName) {
checkBranch(appId, clusterName, namespaceName, branchName);
GrayReleaseRule rules = namespaceBranchService.findBranchGrayRules(appId, clusterName, namespaceName, branchName); GrayReleaseRule rules = namespaceBranchService.findBranchGrayRules(appId, clusterName, namespaceName, branchName);
if (rules == null) { if (rules == null) {
return null; return null;
...@@ -63,6 +75,8 @@ public class NamespaceBranchController { ...@@ -63,6 +75,8 @@ public class NamespaceBranchController {
@PathVariable String namespaceName, @PathVariable String branchName, @PathVariable String namespaceName, @PathVariable String branchName,
@RequestBody GrayReleaseRuleDTO newRuleDto) { @RequestBody GrayReleaseRuleDTO newRuleDto) {
checkBranch(appId, clusterName, namespaceName, branchName);
GrayReleaseRule newRules = BeanUtils.transfrom(GrayReleaseRule.class, newRuleDto); GrayReleaseRule newRules = BeanUtils.transfrom(GrayReleaseRule.class, newRuleDto);
newRules.setRules(GrayReleaseRuleItemTransformer.batchTransformToJSON(newRuleDto.getRuleItems())); newRules.setRules(GrayReleaseRuleItemTransformer.batchTransformToJSON(newRuleDto.getRuleItems()));
newRules.setBranchStatus(NamespaceBranchStatus.ACTIVE); newRules.setBranchStatus(NamespaceBranchStatus.ACTIVE);
...@@ -78,17 +92,22 @@ public class NamespaceBranchController { ...@@ -78,17 +92,22 @@ public class NamespaceBranchController {
@PathVariable String namespaceName, @PathVariable String branchName, @PathVariable String namespaceName, @PathVariable String branchName,
@RequestParam("operator") String operator) { @RequestParam("operator") String operator) {
namespaceBranchService.deleteBranch(appId, clusterName, namespaceName, branchName, NamespaceBranchStatus.DELETED, operator); checkBranch(appId, clusterName, namespaceName, branchName);
namespaceBranchService
.deleteBranch(appId, clusterName, namespaceName, branchName, NamespaceBranchStatus.DELETED, operator);
messageSender.sendMessage(ReleaseMessageKeyGenerator.generate(appId, clusterName, namespaceName), messageSender.sendMessage(ReleaseMessageKeyGenerator.generate(appId, clusterName, namespaceName),
Topics.APOLLO_RELEASE_TOPIC); Topics.APOLLO_RELEASE_TOPIC);
} }
@RequestMapping("/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/branches") @RequestMapping(value = "/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/branches", method = RequestMethod.GET)
public NamespaceDTO loadNamespaceBranch(@PathVariable String appId, @PathVariable String clusterName, public NamespaceDTO loadNamespaceBranch(@PathVariable String appId, @PathVariable String clusterName,
@PathVariable String namespaceName) { @PathVariable String namespaceName) {
checkNamespace(appId, clusterName, namespaceName);
Namespace childNamespace = namespaceBranchService.findBranch(appId, clusterName, namespaceName); Namespace childNamespace = namespaceBranchService.findBranch(appId, clusterName, namespaceName);
if (childNamespace == null) { if (childNamespace == null) {
return null; return null;
...@@ -97,5 +116,27 @@ public class NamespaceBranchController { ...@@ -97,5 +116,27 @@ public class NamespaceBranchController {
return BeanUtils.transfrom(NamespaceDTO.class, childNamespace); return BeanUtils.transfrom(NamespaceDTO.class, childNamespace);
} }
private void checkBranch(String appId, String clusterName, String namespaceName, String branchName) {
//1. check parent namespace
checkNamespace(appId, clusterName, namespaceName);
//2. check child namespace
Namespace childNamespace = namespaceService.findOne(appId, branchName, namespaceName);
if (childNamespace == null) {
throw new BadRequestException(String.format("Namespace's branch not exist. AppId = %s, ClusterName = %s, "
+ "NamespaceName = %s, BranchName = %s",
appId, clusterName, namespaceName, branchName));
}
}
private void checkNamespace(String appId, String clusterName, String namespaceName) {
Namespace parentNamespace = namespaceService.findOne(appId, clusterName, namespaceName);
if (parentNamespace == null) {
throw new BadRequestException(String.format("Namespace not exist. AppId = %s, ClusterName = %s, NamespaceName = %s", appId,
clusterName, namespaceName));
}
}
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册