{"record":{"id":"dd51e820a10f59fc","repo":"apolloconfig/apollo","slug":"public-appnamespace-already-exists-as-private-a","errorCode":null,"errorMessage":"Public AppNamespace {} already exists as private AppNamespace in appId: {}, etc. Please select another name!","messagePattern":"Public AppNamespace (.+?) already exists as private AppNamespace in appId: (.+?), etc\\. Please select another name!","errorType":"validation","errorClass":"BadRequestException","httpStatus":400,"severity":"warning","filePath":"apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppNamespaceService.java","lineNumber":234,"sourceCode":"\n    return createdAppNamespace;\n  }\n\n  private void checkAppNamespaceGlobalUniqueness(AppNamespace appNamespace) {\n    checkPublicAppNamespaceGlobalUniqueness(appNamespace);\n\n    List<AppNamespace> privateAppNamespaces = findAllPrivateAppNamespaces(appNamespace.getName());\n\n    if (!CollectionUtils.isEmpty(privateAppNamespaces)) {\n      Set<String> appIds = Sets.newHashSet();\n      for (AppNamespace ans : privateAppNamespaces) {\n        appIds.add(ans.getAppId());\n        if (appIds.size() == PRIVATE_APP_NAMESPACE_NOTIFICATION_COUNT) {\n          break;\n        }\n      }\n\n      throw new BadRequestException(\"Public AppNamespace \" + appNamespace.getName()\n          + \" already exists as private AppNamespace in appId: \" + APP_NAMESPACE_JOINER.join(appIds)\n          + \", etc. Please select another name!\");\n    }\n  }\n\n  private void checkPublicAppNamespaceGlobalUniqueness(AppNamespace appNamespace) {\n    AppNamespace publicAppNamespace = findPublicAppNamespace(appNamespace.getName());\n    if (publicAppNamespace != null) {\n      throw new BadRequestException(\"AppNamespace \" + appNamespace.getName()\n          + \" already exists as public namespace in appId: \" + publicAppNamespace.getAppId() + \"!\");\n    }\n  }\n\n  @ApolloAuditLog(type = OpType.DELETE, name = \"AppNamespace.delete\",\n      description = \"deleteAppNamespace\")\n  @Transactional\n  public AppNamespace deleteAppNamespace(String appId, String namespaceName, String operator) {\n    AppNamespace appNamespace = appNamespaceRepository.findByAppIdAndName(appId, namespaceName);","sourceCodeStart":216,"sourceCodeEnd":252,"githubUrl":"https://github.com/apolloconfig/apollo/blob/d95fc18d112589efc09ddcbe1507047584d55251/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppNamespaceService.java#L216-L252","documentation":"Thrown by checkAppNamespaceGlobalUniqueness when creating a PUBLIC namespace whose name collides with one or more existing PRIVATE namespaces across apps. It lists up to PRIVATE_APP_NAMESPACE_NOTIFICATION_COUNT colliding appIds. BadRequestException → HTTP 400. First {} is the namespace name; second is the joined appId list. Public namespaces must be globally unique and must not shadow private ones.","triggerScenarios":"Creating/importing a public namespace whose name is already used as a private namespace in any app. The portal collects colliding appIds and reports them.","commonSituations":"Trying to promote a name already in private use to public; teams independently chose the same namespace name; shared-library namespace name collides with an app-private one.","solutions":["Select a globally unique name for the public namespace (e.g. prefix with org/lib name).","Query findAllPrivateAppNamespaces(name) first to detect collisions before attempting creation.","If the private usages are stale, remove or rename them, then retry."],"exampleFix":"// before\nappNamespace.setPublic(true);\nappNamespaceService.create(appNamespace);\n\n// after\nif (!appNamespaceService.findAllPrivateAppNamespaces(appNamespace.getName()).isEmpty()) {\n  throw new IllegalStateException(\"name collides with private namespaces; choose another\");\n}\nappNamespace.setPublic(true);\nappNamespaceService.create(appNamespace);","handlingStrategy":"validation","validationCode":"if (!appNamespaceService.findAllPrivateAppNamespaces(ns.getName()).isEmpty()) {\n  return ResponseEntity.badRequest().body(\"name collides with private namespaces\");\n}","typeGuard":"boolean isPublicNameFreeOfPrivateCollisions(String name, AppNamespaceService svc) {\n  return CollectionUtils.isEmpty(svc.findAllPrivateAppNamespaces(name));\n}","tryCatchPattern":null,"preventionTips":["Namespace public names globally (org/lib prefix) to avoid private collisions.","Run findAllPrivateAppNamespaces(name) before creating a public namespace."],"tags":["apollo-portal","app-namespace","public-namespace","validation","naming-collision"],"backgroundTag":null,"analyzedSha":"d95fc18d112589efc09ddcbe1507047584d55251","analyzedAt":"2026-08-14T04:00:05.477Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}