{"record":{"id":"197708cf473d015b","repo":"apache/iceberg","slug":"namespace-already-exists-s","errorCode":null,"errorMessage":"Namespace already exists: %s","messagePattern":"Namespace already exists: (.+?)","errorType":"exception","errorClass":"AlreadyExistsException","httpStatus":null,"severity":"error","filePath":"bigquery/src/main/java/org/apache/iceberg/gcp/bigquery/BigQueryMetastoreClientImpl.java","lineNumber":179,"sourceCode":"              bigqueryOptions.getOpenTelemetryTracer());\n    } catch (BigQueryRetryHelper.BigQueryRetryHelperException e) {\n      handleBigQueryRetryException(e);\n    }\n    return response;\n  }\n\n  private Dataset internalCreate(Dataset dataset) {\n    try {\n      HttpResponse response =\n          client\n              .datasets()\n              .insert(dataset.getDatasetReference().getProjectId(), dataset)\n              .executeUnparsed();\n      return convertExceptionIfUnsuccessful(response).parseAs(Dataset.class);\n    } catch (IOException e) {\n      throw new RuntimeIOException(e);\n    } catch (AlreadyExistsException e) {\n      throw new AlreadyExistsException(\"Namespace already exists: %s\", dataset.getId());\n    }\n  }\n\n  @Override\n  public Dataset load(DatasetReference datasetReference) {\n    try {\n      HttpResponse response =\n          client\n              .datasets()\n              .get(datasetReference.getProjectId(), datasetReference.getDatasetId())\n              .executeUnparsed();\n      if (response.getStatusCode() == HttpStatusCodes.STATUS_CODE_NOT_FOUND) {\n        throw new NoSuchNamespaceException(\n            \"Namespace does not exist: %s\", datasetReference.getDatasetId());\n      }\n\n      return convertExceptionIfUnsuccessful(response).parseAs(Dataset.class);\n    } catch (IOException e) {","sourceCodeStart":161,"sourceCodeEnd":197,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/bigquery/src/main/java/org/apache/iceberg/gcp/bigquery/BigQueryMetastoreClientImpl.java#L161-L197","documentation":"AlreadyExistsException from BigQueryMetastoreClientImpl.internalCreate when the BigQuery datasets.insert call reports the dataset already exists (google HTTP AlreadyExistsException). The client converts this into an Iceberg AlreadyExistsException naming the dataset id.","triggerScenarios":"Calling createNamespace / client.create for a dataset id that already exists in the project; two concurrent createNamespace calls racing to create the same dataset.","commonSituations":"Rerunning an initialization script without idempotency, retry logic that re-issues create after a timeout where the first request actually succeeded, concurrent CI pipelines creating the same namespace.","solutions":["Check namespaceExists / dataset existence first and skip creation if present","Catch AlreadyExistsException and treat as success for idempotent setup scripts","Use unique dataset ids per environment/run when creating throwaway datasets","Serialize namespace creation through a single job or lock"],"exampleFix":"// before\nclient.create(dataset); // throws if exists\n// after\ntry {\n  client.create(dataset);\n} catch (AlreadyExistsException e) {\n  // dataset already provisioned; ignore\n}","handlingStrategy":"try-catch","validationCode":"if (!client.namespaceExists(datasetId)) { client.create(dataset); }","typeGuard":null,"tryCatchPattern":"try { client.create(dataset); } catch (AlreadyExistsException e) { /* idempotent no-op */ }","preventionTips":["Make initialization scripts idempotent","Avoid racing createNamespace from concurrent jobs","Use unique dataset ids per run/environment"],"tags":["bigquery","namespace","already-exists","conflict"],"backgroundTag":"file-already-exists","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}