NamespaceBranchService { @Transactional public void deleteBranch(String appId, String clusterName, String namespaceName, String branchName, int branchStatus, String operator) { Cluster toDeleteCluster = clusterService.findOne(appId, branchName); if (toDeleteCluster == null) { return; } Release latestBranchRelease = releaseService.findLatestActiveRelease(appId, branchName, namespaceName); long latestBranchReleaseId = latestBranchRelease != null ? latestBranchRelease.getId() : 0; GrayReleaseRule deleteRule = new GrayReleaseRule(); deleteRule.setRules("[]"); deleteRule.setAppId(appId); deleteRule.setClusterName(clusterName); deleteRule.setNamespaceName(namespaceName); deleteRule.setBranchName(branchName); deleteRule.setBranchStatus(branchStatus); deleteRule.setDataChangeLastModifiedBy(operator); deleteRule.setDataChangeCreatedBy(operator); doUpdateBranchGrayRules(appId, clusterName, namespaceName, branchName, deleteRule, false, -1); clusterService.delete(toDeleteCluster.getId(), operator); int releaseOperation = branchStatus == NamespaceBranchStatus.MERGED ? ReleaseOperation .GRAY_RELEASE_DELETED_AFTER_MERGE : ReleaseOperation.ABANDON_GRAY_RELEASE; releaseHistoryService.createReleaseHistory(appId, clusterName, namespaceName, branchName, latestBranchReleaseId, latestBranchReleaseId, releaseOperation, null, operator); auditService.audit("Branch", toDeleteCluster.getId(), Audit.OP.DELETE, operator); } NamespaceBranchService(
      final AuditService auditService,
      final GrayReleaseRuleRepository grayReleaseRuleRepository,
      final ClusterService clusterService,
      final @Lazy ReleaseService releaseService,
      final NamespaceService namespaceService,
      final ReleaseHistoryService releaseHistoryService); @Transactional Namespace createBranch(String appId, String parentClusterName, String namespaceName, String operator); Namespace findBranch(String appId, String parentClusterName, String namespaceName); GrayReleaseRule findBranchGrayRules(String appId, String clusterName, String namespaceName,
                                             String branchName); @Transactional void updateBranchGrayRules(String appId, String clusterName, String namespaceName,
                                    String branchName, GrayReleaseRule newRules); @Transactional GrayReleaseRule updateRulesReleaseId(String appId, String clusterName,
                                   String namespaceName, String branchName,
                                   long latestReleaseId, String operator); @Transactional void deleteBranch(String appId, String clusterName, String namespaceName,
                           String branchName, int branchStatus, String operator);  }
@Test @Sql(scripts = "/sql/namespace-branch-test.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) @Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) public void testDeleteBranch() { GrayReleaseRule rule = instanceGrayReleaseRule(); namespaceBranchService.updateBranchGrayRules(testApp, testCluster, testNamespace, testBranchName, rule); namespaceBranchService.deleteBranch(testApp, testCluster, testNamespace, testBranchName, NamespaceBranchStatus.DELETED, operator); Namespace branch = namespaceBranchService.findBranch(testApp, testCluster, testNamespace); Assert.assertNull(branch); GrayReleaseRule latestRule = namespaceBranchService.findBranchGrayRules(testApp, testCluster, testNamespace, testBranchName); Assert.assertNotNull(latestRule); Assert.assertEquals(NamespaceBranchStatus.DELETED, latestRule.getBranchStatus()); Assert.assertEquals("[]", latestRule.getRules()); Page<ReleaseHistory> releaseHistories = releaseHistoryService.findReleaseHistoriesByNamespace (testApp, testCluster, testNamespace, pageable); ReleaseHistory firstReleaseHistory = releaseHistories.getContent().get(1); ReleaseHistory secondReleaseHistory = releaseHistories.getContent().get(0); Assert.assertEquals(2, releaseHistories.getTotalElements()); Assert.assertEquals(ReleaseOperation.APPLY_GRAY_RULES, firstReleaseHistory.getOperation()); Assert.assertEquals(ReleaseOperation.ABANDON_GRAY_RELEASE, secondReleaseHistory.getOperation()); }