Skip to content

Commit

Permalink
check namespace and branch exist when update gray rules
Browse files Browse the repository at this point in the history
  • Loading branch information
lepdou committed Jan 22, 2017
1 parent b86e754 commit bf4cd7d
Showing 1 changed file with 45 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@
import com.ctrip.framework.apollo.biz.message.MessageSender;
import com.ctrip.framework.apollo.biz.message.Topics;
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.common.constants.NamespaceBranchStatus;
import com.ctrip.framework.apollo.common.dto.GrayReleaseRuleDTO;
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.GrayReleaseRuleItemTransformer;

Expand All @@ -27,6 +29,8 @@ public class NamespaceBranchController {
private MessageSender messageSender;
@Autowired
private NamespaceBranchService namespaceBranchService;
@Autowired
private NamespaceService namespaceService;


@RequestMapping(value = "/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/branches", method = RequestMethod.POST)
Expand All @@ -35,14 +39,22 @@ public NamespaceDTO createBranch(@PathVariable String appId,
@PathVariable String namespaceName,
@RequestParam("operator") String operator) {

checkNamespace(appId, clusterName, namespaceName);

Namespace createdBranch = namespaceBranchService.createBranch(appId, clusterName, namespaceName, operator);

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,
@PathVariable String clusterName,
@PathVariable String namespaceName,
@PathVariable String branchName) {

checkBranch(appId, clusterName, namespaceName, branchName);

GrayReleaseRule rules = namespaceBranchService.findBranchGrayRules(appId, clusterName, namespaceName, branchName);
if (rules == null) {
return null;
Expand All @@ -63,6 +75,8 @@ public void updateBranchGrayRules(@PathVariable String appId, @PathVariable Stri
@PathVariable String namespaceName, @PathVariable String branchName,
@RequestBody GrayReleaseRuleDTO newRuleDto) {

checkBranch(appId, clusterName, namespaceName, branchName);

GrayReleaseRule newRules = BeanUtils.transfrom(GrayReleaseRule.class, newRuleDto);
newRules.setRules(GrayReleaseRuleItemTransformer.batchTransformToJSON(newRuleDto.getRuleItems()));
newRules.setBranchStatus(NamespaceBranchStatus.ACTIVE);
Expand All @@ -78,17 +92,22 @@ public void deleteBranch(@PathVariable String appId, @PathVariable String cluste
@PathVariable String namespaceName, @PathVariable String branchName,
@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),
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,
@PathVariable String namespaceName) {

checkNamespace(appId, clusterName, namespaceName);

Namespace childNamespace = namespaceBranchService.findBranch(appId, clusterName, namespaceName);
if (childNamespace == null) {
return null;
Expand All @@ -97,5 +116,27 @@ public NamespaceDTO loadNamespaceBranch(@PathVariable String appId, @PathVariabl
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));
}
}


}

0 comments on commit bf4cd7d

Please sign in to comment.