diff --git a/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/AppNamespaceService.java b/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/AppNamespaceService.java index b31a94311bfb4e56b5a838969b4694216a8b755f..4a78f53aa078e9d083c84cc03375cdebf8cc56c6 100644 --- a/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/AppNamespaceService.java +++ b/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/AppNamespaceService.java @@ -131,6 +131,12 @@ public class AppNamespaceService { List clusters = clusterService.findParentClusters(appId); for (Cluster cluster : clusters) { + + // in case there is some dirty data, e.g. public namespace deleted in other app and now created in this app + if (!namespaceService.isNamespaceUnique(appId, cluster.getName(), namespaceName)) { + continue; + } + Namespace namespace = new Namespace(); namespace.setClusterName(cluster.getName()); namespace.setAppId(appId); diff --git a/apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/service/AppNamespaceServiceWithCache.java b/apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/service/AppNamespaceServiceWithCache.java index 90a6976ea41e26ed24610f15b1f5bf685c8c2037..e0f7479b7d0430d63100a93d093361c9d16ec848 100644 --- a/apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/service/AppNamespaceServiceWithCache.java +++ b/apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/service/AppNamespaceServiceWithCache.java @@ -247,7 +247,11 @@ public class AppNamespaceServiceWithCache implements InitializingBean { } appNamespaceCache.remove(assembleAppNamespaceKey(deleted)); if (deleted.isPublic()) { - publicAppNamespaceCache.remove(deleted.getName()); + AppNamespace publicAppNamespace = publicAppNamespaceCache.get(deleted.getName()); + // in case there is some dirty data, e.g. public namespace deleted in some app and now created in another app + if (publicAppNamespace == deleted) { + publicAppNamespaceCache.remove(deleted.getName()); + } } logger.info("Found AppNamespace deleted, {}", deleted); }