From e52431fdca8c3b1adbe2ffc81bc8b4109d64c482 Mon Sep 17 00:00:00 2001 From: lepdou Date: Fri, 11 Mar 2022 19:29:57 +0800 Subject: [PATCH] 1. fix cover existed app when importing app 2. fix import cluster info to all envs when importing cluster --- CHANGES.md | 2 + .../apollo/portal/service/AppService.java | 1 + .../portal/service/ConfigsImportService.java | 81 +++++++++++++------ 3 files changed, 60 insertions(+), 24 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 6aed84d07b2..2d2019ea529 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -44,5 +44,7 @@ Apollo 2.0.0 * [Using commons-lang3 to replace commons-lang](https://github.com/apolloconfig/apollo/pull/4225) * [optimize import/export config](https://github.com/apolloconfig/apollo/pull/4231) * [Configure publish and rollback modal boxes to add scrollbars](https://github.com/apolloconfig/apollo/pull/4251) +* [fix import config bug](https://github.com/apolloconfig/apollo/pull/4262) + ------------------ All issues and pull requests are [here](https://github.com/ctripcorp/apollo/milestone/8?closed=1) diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppService.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppService.java index faaa68fac24..702375d070a 100644 --- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppService.java +++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppService.java @@ -162,6 +162,7 @@ public App importAppInLocal(App app) { return app; } + app.setId(0); App createdApp = appRepository.save(app); roleInitializationService.initAppRoles(createdApp); diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/ConfigsImportService.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/ConfigsImportService.java index f0f74b0d2d9..558e3c8ae79 100644 --- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/ConfigsImportService.java +++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/ConfigsImportService.java @@ -116,8 +116,8 @@ public void importDataFromZipFile(List importEnvs, ZipInputStream dataZip, throws IOException { List toImportApps = Lists.newArrayList(); List toImportAppNSs = Lists.newArrayList(); - List toImportClusters = Lists.newArrayList(); - List toImportNSs = Lists.newArrayList(); + List toImportClusters = Lists.newArrayList(); + List toImportNSs = Lists.newArrayList(); ZipEntry entry; while ((entry = dataZip.getNextEntry()) != null) { @@ -146,17 +146,16 @@ public void importDataFromZipFile(List importEnvs, ZipInputStream dataZip, } else { String env = info[2]; fileName = info[3]; - if (fileName.endsWith(ConfigFileUtils.CLUSTER_METADATA_FILE_SUFFIX)) { - //cluster metadata file. path format : apollo/${appId}/${env}/${clusterName}.cluster.metadata - toImportClusters.add(content); - } else { - //namespace file.path format : apollo/${appId}/${env}/${appId}+${cluster}+${namespaceName} - //only import for selected envs. for (Env importEnv : importEnvs) { if (Objects.equals(importEnv.getName(), env)) { - toImportNSs.add(new NamespaceImportData(Env.valueOf(env), fileName, content, ignoreConflictNamespace)); + if (fileName.endsWith(ConfigFileUtils.CLUSTER_METADATA_FILE_SUFFIX)) { + //cluster metadata file. path format : apollo/${appId}/${env}/${clusterName}.cluster.metadata + toImportClusters.add(new ImportClusterData(Env.transformEnv(env), content)); + } else { + //namespace file.path format : apollo/${appId}/${env}/${appId}+${cluster}+${namespaceName} + toImportNSs.add(new ImportNamespaceData(Env.valueOf(env), fileName, content, ignoreConflictNamespace)); + } } - } } } } @@ -175,7 +174,7 @@ public void importDataFromZipFile(List importEnvs, ZipInputStream dataZip, } private void doImport(List importEnvs, List toImportApps, List toImportAppNSs, - List toImportClusters, List toImportNSs) + List toImportClusters, List toImportNSs) throws InterruptedException { LOGGER.info("Start to import app. size = {}", toImportApps.size()); @@ -217,7 +216,7 @@ private void doImport(List importEnvs, List toImportApps, List { try { - importCluster(cluster, importEnvs, operator); + importCluster(cluster, operator); } catch (Exception e) { LOGGER.error("import cluster error. cluster = {}", cluster, e); } finally { @@ -301,8 +300,9 @@ private void importAppNamespace(String appNamespace, String operator) { } } - private void importCluster(String clusterInfo, List importEnvs, String operator) { - ClusterDTO toImportCluster = gson.fromJson(clusterInfo, ClusterDTO.class); + private void importCluster(ImportClusterData importClusterData, String operator) { + Env env = importClusterData.getEnv(); + ClusterDTO toImportCluster = gson.fromJson(importClusterData.clusterInfo, ClusterDTO.class); toImportCluster.setDataChangeCreatedBy(operator); toImportCluster.setDataChangeLastModifiedBy(operator); @@ -312,14 +312,12 @@ private void importCluster(String clusterInfo, List importEnvs, String oper String appId = toImportCluster.getAppId(); String clusterName = toImportCluster.getName(); - importEnvs.parallelStream().forEach(env -> { - try { - clusterService.loadCluster(appId, env, clusterName); - } catch (Exception e) { - //not existed - clusterService.createCluster(env, toImportCluster); - } - }); + try { + clusterService.loadCluster(appId, env, clusterName); + } catch (Exception e) { + //not existed + clusterService.createCluster(env, toImportCluster); + } } /** @@ -430,14 +428,14 @@ private String readContent(ZipInputStream zipInputStream) { } } - static class NamespaceImportData { + static class ImportNamespaceData { private Env env; private String fileName; private String content; private boolean ignoreConflictNamespace; - public NamespaceImportData(Env env, String fileName, String content, boolean ignoreConflictNamespace) { + public ImportNamespaceData(Env env, String fileName, String content, boolean ignoreConflictNamespace) { this.env = env; this.fileName = fileName; this.content = content; @@ -486,4 +484,39 @@ public String toString() { '}'; } } + + static class ImportClusterData { + + private Env env; + private String clusterInfo; + + public ImportClusterData(Env env, String clusterInfo) { + this.env = env; + this.clusterInfo = clusterInfo; + } + + public Env getEnv() { + return env; + } + + public void setEnv(Env env) { + this.env = env; + } + + public String getClusterInfo() { + return clusterInfo; + } + + public void setClusterInfo(String clusterInfo) { + this.clusterInfo = clusterInfo; + } + + @Override + public String toString() { + return "ImportClusterData{" + + "env=" + env + + ", clusterName='" + clusterInfo + '\'' + + '}'; + } + } }