{"record":{"id":"cb1f6b0374535c1a","repo":"apolloconfig/apollo","slug":"create-namespace-failed-for-s","errorCode":null,"errorMessage":"create namespace failed for: %s","messagePattern":"create namespace failed for: (.+?)","errorType":"http","errorClass":"BadRequestException","httpStatus":400,"severity":"error","filePath":"apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/server/service/ServerNamespaceManagementOpenApiService.java","lineNumber":192,"sourceCode":"      namespace.setClusterName(model.getClusterName());\n      namespace.setNamespaceName(namespaceName);\n      namespace.setDataChangeCreatedBy(operator);\n      namespace.setDataChangeLastModifiedBy(operator);\n\n      try {\n        namespaceService.createNamespace(Env.valueOf(model.getEnv()), namespace, operator);\n        namespaceService.assignNamespaceRoleToOperator(appId, namespaceName, operator);\n      } catch (Exception e) {\n        logger.error(\"create namespace fail.\", e);\n        Tracer.logError(String.format(\"create namespace fail. (env=%s namespace=%s)\",\n            model.getEnv(), namespaceName), e);\n        failedNamespaces\n            .add(String.format(\"%s/%s/%s\", model.getEnv(), model.getClusterName(), namespaceName));\n      }\n    }\n\n    if (!failedNamespaces.isEmpty()) {\n      throw new BadRequestException(\"create namespace failed for: %s\",\n          String.join(\", \", failedNamespaces));\n    }\n  }\n\n  @Override\n  public void deleteNamespace(String appId, String env, String clusterName, String namespaceName,\n      String operator) {\n    namespaceService.deleteNamespace(appId, Env.valueOf(env), clusterName, namespaceName, operator);\n  }\n\n  @Override\n  public List<OpenNamespaceUsageDTO> findNamespaceUsage(String appId, String env,\n      String clusterName, String namespaceName) {\n    NamespaceUsage usage = namespaceService.getNamespaceUsageByEnv(appId, namespaceName,\n        Env.valueOf(env), clusterName);\n    return OpenApiModelConverters.fromNamespaceUsages(Collections.singletonList(usage));\n  }\n","sourceCodeStart":174,"sourceCodeEnd":210,"githubUrl":"https://github.com/apolloconfig/apollo/blob/d95fc18d112589efc09ddcbe1507047584d55251/apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/server/service/ServerNamespaceManagementOpenApiService.java#L174-L210","documentation":"Thrown as BadRequestException (HTTP 400) by ServerNamespaceManagementOpenApiService after a multi-environment namespace creation loop where one or more (env/cluster/namespace) tuples failed. The service collects failures per env and, if failedNamespaces is non-empty, throws with the joined list; per-env exceptions are logged and Tracer-tagged, not propagated individually.","triggerScenarios":"Calling createNamespace across multiple envs where at least one env fails (e.g., namespace already exists in that env, env unreachable, role assignment failure). The message lists every failed env/cluster/namespace.","commonSituations":"Partial multi-env provisioning where one env already has the namespace; an env's admin service down; role assignment race in one env.","solutions":["Inspect server logs / Tracer for the per-env 'create namespace fail. (env=... namespace=...)' entries to find the failing env.","Make creation idempotent per env (skip envs where the namespace already exists).","Retry only the failed envs listed in the message, after fixing the root cause for each."],"exampleFix":"// before: bulk create across [DEV,FAT,UAT,PRO] throws listing only failed envs\n// after: handle per-env existence before creating\nfor (Env env : envs) {\n  if (namespaceService.findOne(appId, env, cluster, name) == null) {\n    // create only where absent\n  }\n}","handlingStrategy":"try-catch","validationCode":"for (Env env : envs) {\n  if (namespaceService.findOne(appId, env, clusterName, namespaceName) == null) {\n    // create only where absent to avoid per-env failures\n  }\n}","typeGuard":null,"tryCatchPattern":"try {\n  service.createNamespace(appId, model, operator);\n} catch (BadRequestException e) {\n  if (e.getMessage().startsWith(\"create namespace failed for:\")) {\n    // parse failed envs from message, inspect logs/Tracer, retry only failed envs\n  } else throw e;\n}","preventionTips":["Pre-check namespace existence per env before bulk creation.","Log and surface per-env root causes, not just the aggregated failure list.","Retry only the failed envs after remediation."],"tags":["namespace","create","multi-env","bad-request","apollo-portal","openapi"],"backgroundTag":null,"analyzedSha":"d95fc18d112589efc09ddcbe1507047584d55251","analyzedAt":"2026-08-14T04:00:05.477Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}