{"record":{"id":"6d31e1f56f8658e5","repo":"floci-io/floci","slug":"pipelinenameinuseexception","errorCode":"PipelineNameInUseException","errorMessage":"Pipeline name already exists: ${name}","messagePattern":"Pipeline name already exists: (.+?)","errorType":"exception","errorClass":"AwsException","httpStatus":400,"severity":"error","filePath":"src/main/java/io/github/hectorvent/floci/services/codepipeline/CodePipelineService.java","lineNumber":163,"sourceCode":"                        execution.setStopRequested(false);\n                        execution.setAbandon(false);\n                        execution.setActionExecutions(new ArrayList<>());\n                        putExecution(execution);\n                        executor.submit(() -> runExecution(pipeline, execution));\n                    }, () -> {\n                        execution.setStatus(\"Failed\");\n                        execution.setStatusSummary(\"Pipeline definition was not found after restart.\");\n                        execution.setLastUpdateTime(now());\n                        putExecution(execution);\n                    });\n        }\n    }\n\n    private ObjectNode createPipeline(JsonNode request, String region, String account) {\n        JsonNode declaration = request.get(\"pipeline\");\n        String name = validatePipelineDeclaration(declaration);\n        if (pipelineStore.getForAccount(account, pipelineKey(region, name)).isPresent()) {\n            throw new AwsException(\"PipelineNameInUseException\", \"Pipeline name already exists: \" + name, 400);\n        }\n        double now = now();\n        CodePipelinePipeline pipeline = new CodePipelinePipeline();\n        pipeline.setAccountId(account);\n        pipeline.setRegion(region);\n        pipeline.setName(name);\n        pipeline.setArn(AwsArnUtils.Arn.of(\"codepipeline\", region, account, name).toString());\n        pipeline.setVersion(1);\n        pipeline.setCreated(now);\n        pipeline.setUpdated(now);\n        pipeline.setDeclaration(normalizeDeclaration(declaration, 1));\n        pipeline.setTags(parseTags(request.path(\"tags\")));\n        initializeTransitions(pipeline);\n        putPipeline(pipeline);\n        ObjectNode response = mapper.createObjectNode();\n        response.set(\"pipeline\", pipeline.getDeclaration());\n        if (!pipeline.getTags().isEmpty()) {\n            response.set(\"tags\", tagsNode(pipeline.getTags()));","sourceCodeStart":145,"sourceCodeEnd":181,"githubUrl":"https://github.com/floci-io/floci/blob/62ff490619e7bd3554597c28c704081b4c15add5/src/main/java/io/github/hectorvent/floci/services/codepipeline/CodePipelineService.java#L145-L181","documentation":"Thrown by createPipeline (CodePipelineService.java:163) when CreatePipeline uses a name already present in the account+region store (pipelineStore.getForAccount(...).isPresent()). Pipeline names are unique per account/region in the emulator, mirroring AWS PipelineNameInUseException.","triggerScenarios":"CreatePipeline with a name that exists; re-running a setup script twice without idempotency guards; concurrent executions of the same IaC template.","commonSituations":"Terraform/CloudFormation re-apply without update-in-place support; CI provisioning pipelines on every push; name collisions between environments because the name lacks an env suffix.","solutions":["Call ListPipelines first and skip creation (or DeletePipeline then recreate) when the name exists.","Use UpdatePipeline to modify an existing pipeline instead of recreating it.","Namespace pipeline names per environment (my-pipeline-staging vs my-pipeline-prod)."],"exampleFix":"// before\nclient.create_pipeline(pipeline=declaration)  # fails if exists\n\n// after\nexisting = {p['name'] for p in client.list_pipelines().get('pipelines', [])}\nif declaration['name'] in existing:\n    client.update_pipeline(pipeline=declaration)\nelse:\n    client.create_pipeline(pipeline=declaration)","handlingStrategy":"validation","validationCode":"names = {p['name'] for p in client.list_pipelines().get('pipelines', [])}\nif declaration['name'] in names:\n    client.update_pipeline(pipeline=declaration)\nelse:\n    client.create_pipeline(pipeline=declaration)","typeGuard":null,"tryCatchPattern":"try:\n    client.create_pipeline(pipeline=declaration)\nexcept ClientError as e:\n    if e.response['Error']['Code'] == 'PipelineNameInUseException':\n        client.update_pipeline(pipeline=declaration)\n    else:\n        raise","preventionTips":["Make provisioning scripts idempotent: list-then-create or catch-and-update.","Suffix pipeline names with environment/team to avoid cross-project collisions.","Never delete+recreate a pipeline just to change its definition — use UpdatePipeline."],"tags":["codepipeline","name-conflict","idempotency","validation"],"backgroundTag":null,"analyzedSha":"62ff490619e7bd3554597c28c704081b4c15add5","analyzedAt":"2026-08-14T14:25:23.764Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}