From f8fec941412e29e6d6d960d9579b76601b7bd617 Mon Sep 17 00:00:00 2001 From: duanguoqiang Date: Sat, 8 Mar 2025 17:06:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=88=A0=E9=99=A4portal?= =?UTF-8?q?=E6=89=80=E5=9C=A8host=E5=90=8E=E6=97=A0=E6=B3=95=E5=81=9C?= =?UTF-8?q?=E6=AD=A2=E8=BF=81=E7=A7=BB=E4=BB=BB=E5=8A=A1=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/core/config/DataSourceConfig.java | 2 +- .../exception/MigrationTaskException.java | 18 +++++++ .../impl/MigrationMainTaskServiceImpl.java | 47 +++++++++++++------ .../impl/MigrationTaskHostRefServiceImpl.java | 6 +++ .../web-ui/src/views/list/index.vue | 8 +++- 5 files changed, 63 insertions(+), 18 deletions(-) create mode 100644 plugins/data-migration/src/main/java/org/opengauss/admin/plugin/exception/MigrationTaskException.java diff --git a/openGauss-datakit/visualtool-api/src/main/java/org/opengauss/admin/web/core/config/DataSourceConfig.java b/openGauss-datakit/visualtool-api/src/main/java/org/opengauss/admin/web/core/config/DataSourceConfig.java index 830ab2b1a..2339eb8cc 100644 --- a/openGauss-datakit/visualtool-api/src/main/java/org/opengauss/admin/web/core/config/DataSourceConfig.java +++ b/openGauss-datakit/visualtool-api/src/main/java/org/opengauss/admin/web/core/config/DataSourceConfig.java @@ -63,7 +63,7 @@ public class DataSourceConfig { String driverClassName = properties.getDriverClassName(); Optional dbDataLocationEnum = DbDataLocationEnum.of(driverClassName); DatabaseInitializationSettings settings = new DatabaseInitializationSettings(); - settings.setContinueOnError(true); + settings.setContinueOnError(false); settings.setSeparator(";"); settings.setMode(DatabaseInitializationMode.ALWAYS); if (dbDataLocationEnum.isEmpty()) { diff --git a/plugins/data-migration/src/main/java/org/opengauss/admin/plugin/exception/MigrationTaskException.java b/plugins/data-migration/src/main/java/org/opengauss/admin/plugin/exception/MigrationTaskException.java new file mode 100644 index 000000000..b62ee99e3 --- /dev/null +++ b/plugins/data-migration/src/main/java/org/opengauss/admin/plugin/exception/MigrationTaskException.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) Huawei Technologies Co., Ltd. 2025-2025. All rights reserved. + */ + +package org.opengauss.admin.plugin.exception; + +import org.opengauss.admin.common.exception.base.BaseException; + +/** + * migration task exception + * + * @since 2025/3/8 + */ +public class MigrationTaskException extends BaseException { + public MigrationTaskException(String defaultMessage) { + super(defaultMessage); + } +} diff --git a/plugins/data-migration/src/main/java/org/opengauss/admin/plugin/service/impl/MigrationMainTaskServiceImpl.java b/plugins/data-migration/src/main/java/org/opengauss/admin/plugin/service/impl/MigrationMainTaskServiceImpl.java index 727971071..a46e560f0 100644 --- a/plugins/data-migration/src/main/java/org/opengauss/admin/plugin/service/impl/MigrationMainTaskServiceImpl.java +++ b/plugins/data-migration/src/main/java/org/opengauss/admin/plugin/service/impl/MigrationMainTaskServiceImpl.java @@ -34,6 +34,7 @@ import com.gitee.starblues.bootstrap.annotation.AutowiredType; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.opengauss.admin.common.core.domain.AjaxResult; +import org.opengauss.admin.common.core.domain.entity.ops.OpsHostEntity; import org.opengauss.admin.common.core.domain.model.LoginUser; import org.opengauss.admin.common.core.dto.ops.ClusterNodeDto; import org.opengauss.admin.common.utils.SecurityUtils; @@ -46,6 +47,7 @@ import org.opengauss.admin.plugin.enums.MigrationErrorCode; import org.opengauss.admin.plugin.enums.ProcessType; import org.opengauss.admin.plugin.enums.TaskOperate; import org.opengauss.admin.plugin.enums.TaskStatus; +import org.opengauss.admin.plugin.exception.MigrationTaskException; import org.opengauss.admin.plugin.handler.PortalHandle; import org.opengauss.admin.plugin.mapper.MigrationMainTaskMapper; import org.opengauss.admin.plugin.service.*; @@ -57,6 +59,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; import java.math.BigDecimal; import java.math.RoundingMode; @@ -282,10 +285,7 @@ public class MigrationMainTaskServiceImpl extends ServiceImpl { - MigrationTaskHostRef hostRef = MigrationTaskHostRef.builder().runHostId(h).mainTaskId(mainTask.getId()).createTime(new Date()).build(); - migrationTaskHostRefService.save(hostRef); - }); + saveRunHosts(taskDto.getHostIds(), mainTask.getId()); taskDto.getGlobalParams().stream().forEach(param -> { param.setId(null); param.setMainTaskId(mainTask.getId()); @@ -331,10 +331,7 @@ public class MigrationMainTaskServiceImpl extends ServiceImpl { - MigrationTaskHostRef hostRef = MigrationTaskHostRef.builder().runHostId(h).mainTaskId(mainTask.getId()).createTime(new Date()).build(); - migrationTaskHostRefService.save(hostRef); - }); + saveRunHosts(taskDto.getHostIds(), mainTask.getId()); migrationTaskGlobalParamService.deleteByMainTaskId(taskDto.getTaskId()); taskDto.getGlobalParams().stream().forEach(param -> { @@ -345,6 +342,20 @@ public class MigrationMainTaskServiceImpl extends ServiceImpl hostIds, Integer mainTaskId) { + hostIds.forEach(hostId -> { + OpsHostEntity opsHost = hostFacade.getById(hostId); + if (ObjectUtils.isEmpty(opsHost)) { + log.error("Cannot get host information by host id: {}", hostId); + throw new MigrationTaskException("The portal host does not exist."); + } + + MigrationTaskHostRef hostRef = MigrationTaskHostRef.builder() + .runHostId(hostId).mainTaskId(mainTaskId).createTime(new Date()).build(); + migrationTaskHostRefService.save(hostRef); + }); + } + @Override public void deleteTask(Integer[] ids) { Arrays.asList(ids).stream().forEach(i -> { @@ -389,6 +400,7 @@ public class MigrationMainTaskServiceImpl extends ServiceImpl tasks = migrationTaskService.listByMainTaskId(id); tasks.forEach(task -> { task.setOrderInvokedTimestamp(finishTaskTimestamp); doFinishTask(task); }); - updateStatus(id, MainTaskStatus.FINISH); } @Override @@ -506,18 +518,23 @@ public class MigrationMainTaskServiceImpl extends ServiceImpl hosts = migrationTaskHostRefMapper.selectByMainTaskId(mainTaskId); hosts.forEach(h -> { OpsHostEntity opsHost = hostFacade.getById(h.getRunHostId()); + if (ObjectUtils.isEmpty(opsHost)) { + log.error("Cannot get host information by host id: {}", h.getRunHostId()); + throw new MigrationTaskException("The portal host does not exist."); + } h.setHostName(opsHost.getHostname()); h.setHost(opsHost.getPublicIp()); h.setPort(opsHost.getPort()); diff --git a/plugins/data-migration/web-ui/src/views/list/index.vue b/plugins/data-migration/web-ui/src/views/list/index.vue index 16e8e01f5..6351f5f67 100644 --- a/plugins/data-migration/web-ui/src/views/list/index.vue +++ b/plugins/data-migration/web-ui/src/views/list/index.vue @@ -268,8 +268,12 @@ const startTask = async row => { // stop task const stopTask = async row => { - await stop(row.id) - Message.success('Stop success') + try { + await stop(row.id) + Message.success('Stop success') + } catch (e) { + Message.warning('Abnormal stop') + } getList() } // reset task -- Gitee