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);