This is an automated email from the ASF dual-hosted git repository.

dockerzhang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/inlong.git


The following commit(s) were added to refs/heads/master by this push:
     new 6b8fed7176 [INLONG-8805][Manager] Check tenant status before deleting 
tenant (#8831)
6b8fed7176 is described below

commit 6b8fed71762e877c0d5311063e3ccbece1ebca56
Author: kamxiao <[email protected]>
AuthorDate: Tue Sep 5 17:01:50 2023 +0800

    [INLONG-8805][Manager] Check tenant status before deleting tenant (#8831)
    
    Co-authored-by: kamxiao <[email protected]>
---
 .../dao/mapper/InlongGroupEntityMapper.java        |  9 +++++
 .../resources/mappers/InlongGroupEntityMapper.xml  | 10 ++++++
 .../service/tenant/InlongTenantServiceImpl.java    | 42 ++++++++++++++++++++++
 3 files changed, 61 insertions(+)

diff --git 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/InlongGroupEntityMapper.java
 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/InlongGroupEntityMapper.java
index 3e8189b301..6d226013c9 100644
--- 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/InlongGroupEntityMapper.java
+++ 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/InlongGroupEntityMapper.java
@@ -106,4 +106,13 @@ public interface InlongGroupEntityMapper {
      */
     int deleteByInlongGroupIds(@Param("groupIdList") List<String> groupIdList);
 
+    /**
+     * Select all groups of the specified tenant
+     *
+     * @param tenant the tenant name
+     * @return all matched groups
+     */
+    @MultiTenantQuery(with = false)
+    List<InlongGroupEntity> selectAllGroupsByTenant(@Param(value = "tenant") 
String tenant);
+
 }
diff --git 
a/inlong-manager/manager-dao/src/main/resources/mappers/InlongGroupEntityMapper.xml
 
b/inlong-manager/manager-dao/src/main/resources/mappers/InlongGroupEntityMapper.xml
index 0d41a28f44..01337bfa3e 100644
--- 
a/inlong-manager/manager-dao/src/main/resources/mappers/InlongGroupEntityMapper.xml
+++ 
b/inlong-manager/manager-dao/src/main/resources/mappers/InlongGroupEntityMapper.xml
@@ -553,4 +553,14 @@
             </if>
         </where>
     </delete>
+    <select id="selectAllGroupsByTenant" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from inlong_group
+        <where>
+            tenant = #{tenant,jdbcType=VARCHAR}
+            and is_deleted = 0
+        </where>
+    </select>
+
 </mapper>
diff --git 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/tenant/InlongTenantServiceImpl.java
 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/tenant/InlongTenantServiceImpl.java
index 018327d11f..a3611a6d0b 100644
--- 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/tenant/InlongTenantServiceImpl.java
+++ 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/tenant/InlongTenantServiceImpl.java
@@ -19,12 +19,18 @@ package org.apache.inlong.manager.service.tenant;
 
 import org.apache.inlong.manager.common.consts.InlongConstants;
 import org.apache.inlong.manager.common.enums.ErrorCodeEnum;
+import org.apache.inlong.manager.common.enums.GroupStatus;
 import org.apache.inlong.manager.common.enums.ProcessName;
+import org.apache.inlong.manager.common.enums.SourceStatus;
 import org.apache.inlong.manager.common.exceptions.BusinessException;
 import org.apache.inlong.manager.common.util.CommonBeanUtils;
 import org.apache.inlong.manager.common.util.Preconditions;
+import org.apache.inlong.manager.dao.entity.InlongGroupEntity;
 import org.apache.inlong.manager.dao.entity.InlongTenantEntity;
+import org.apache.inlong.manager.dao.entity.StreamSourceEntity;
+import org.apache.inlong.manager.dao.mapper.InlongGroupEntityMapper;
 import org.apache.inlong.manager.dao.mapper.InlongTenantEntityMapper;
+import org.apache.inlong.manager.dao.mapper.StreamSourceEntityMapper;
 import org.apache.inlong.manager.pojo.common.PageResult;
 import org.apache.inlong.manager.pojo.tenant.InlongTenantInfo;
 import org.apache.inlong.manager.pojo.tenant.InlongTenantPageRequest;
@@ -45,6 +51,7 @@ import org.springframework.stereotype.Service;
 import java.util.List;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.stream.Collectors;
 
 import static org.apache.inlong.manager.pojo.user.UserRoleCode.INLONG_ADMIN;
 import static org.apache.inlong.manager.pojo.user.UserRoleCode.INLONG_OPERATOR;
@@ -57,6 +64,10 @@ public class InlongTenantServiceImpl implements 
InlongTenantService {
     @Autowired
     private InlongTenantEntityMapper inlongTenantEntityMapper;
     @Autowired
+    private InlongGroupEntityMapper groupMapper;
+    @Autowired
+    private StreamSourceEntityMapper sourceMapper;
+    @Autowired
     private TenantRoleService tenantRoleService;
     @Autowired
     private WorkflowApproverService workflowApproverService;
@@ -156,6 +167,37 @@ public class InlongTenantServiceImpl implements 
InlongTenantService {
         String operator = LoginUserUtils.getLoginUser().getName();
         log.info("begin to delete inlong tenant name={} by user={}", name, 
operator);
         InlongTenantEntity inlongTenantEntity = 
inlongTenantEntityMapper.selectByName(name);
+        // before deleting a tenant, check if all Groups of the tenant are in 
stop status
+        List<InlongGroupEntity> groups = 
groupMapper.selectAllGroupsByTenant(name);
+        List<InlongGroupEntity> notStopGroups =
+                groups.stream().filter(
+                        group -> 
!GroupStatus.DELETED.getCode().equals(group.getStatus()))
+                        .collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(notStopGroups)) {
+            List<String> notStopGroupNames =
+                    
notStopGroups.stream().map(InlongGroupEntity::getName).collect(Collectors.toList());
+            String errMsg = String.format(
+                    "delete inlong tenant name=[%s] failed, the tenant's 
group=%s are not in stop status",
+                    name, notStopGroupNames);
+            log.error(errMsg);
+            throw new BusinessException(errMsg);
+        }
+        // before deleting a tenant, check if all streamSource of the tenant‘s 
groups are in status 99.
+        List<String> groupIds =
+                
groups.stream().map(InlongGroupEntity::getInlongGroupId).collect(Collectors.toList());
+        List<StreamSourceEntity> sourceList = 
sourceMapper.selectByGroupIds(groupIds);
+        List<StreamSourceEntity> noDisabledSources = sourceList.stream()
+                .filter(source -> 
!SourceStatus.SOURCE_DISABLE.getCode().equals(source.getStatus()))
+                .collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(noDisabledSources)) {
+            List<String> noDisabledSourceNames =
+                    
noDisabledSources.stream().map(StreamSourceEntity::getSourceName).collect(Collectors.toList());
+            String errMsg = String.format(
+                    "delete inlong tenant name=[%s] failed, the 
streamSource=%s of the tenant's groups are not in status 99",
+                    name, noDisabledSourceNames);
+            log.error(errMsg);
+            throw new BusinessException(errMsg);
+        }
         int success = 
inlongTenantEntityMapper.deleteById(inlongTenantEntity.getId());
         Preconditions.expectTrue(success == 1, "delete failed");
         log.info("success delete inlong tenant name={} by user={}", name, 
operator);

Reply via email to