{"record":{"id":"855a627edfdd5d83","repo":"apache/beam","slug":"could-not-find-a-transform-with-id","errorCode":null,"errorMessage":"Could not find a transform with id ","messagePattern":"Could not find a transform with id ","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"sdks/java/core/src/main/java/org/apache/beam/sdk/util/construction/TransformUpgrader.java","lineNumber":381,"sourceCode":"    newComponentsBuilder.clearTransforms();\n    newComponentsBuilder.putAllTransforms(updatedExpandedTransformMap);\n    newComponentsBuilder.putTransforms(transformId, expandedTransform);\n\n    RunnerApi.Pipeline.Builder newRunnerAPIPipelineBuilder = runnerAPIpipeline.toBuilder();\n    newRunnerAPIPipelineBuilder.clearComponents();\n    newRunnerAPIPipelineBuilder.setComponents(newComponentsBuilder.build());\n\n    newRunnerAPIPipelineBuilder.addAllRequirements(expandedRequirements);\n\n    return newRunnerAPIPipelineBuilder.build();\n  }\n\n  private static void recursivelyFindSubTransforms(\n      String transformId, RunnerApi.Components components, List<String> results) {\n    results.add(transformId);\n    RunnerApi.PTransform transform = components.getTransformsMap().get(transformId);\n    if (transform == null) {\n      throw new IllegalArgumentException(\"Could not find a transform with id \" + transformId);\n    }\n    List<String> subTransforms = transform.getSubtransformsList();\n    if (subTransforms != null) {\n      for (String subTransformId : subTransforms) {\n        recursivelyFindSubTransforms(subTransformId, components, results);\n      }\n    }\n  }\n\n  private static int findAvailablePort() throws IOException {\n    ServerSocket s = new ServerSocket(0);\n    try {\n      return s.getLocalPort();\n    } finally {\n      s.close();\n      try {\n        // Some systems don't free the port for future use immediately.\n        Thread.sleep(100);","sourceCodeStart":363,"sourceCodeEnd":399,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/core/src/main/java/org/apache/beam/sdk/util/construction/TransformUpgrader.java#L363-L399","documentation":"recursivelyFindSubTransforms walks a transform's subtransform tree in the pipeline's Components. When a transform id (root or nested) is not present in components.getTransformsMap(), the graph is inconsistent and an IllegalArgumentException is thrown.","triggerScenarios":"Calling updateTransformViaTransformService / recursivelyFindSubTransforms with a transformId (or any subtransform id listed in a PTransform's subtransforms) that does not exist in RunnerApi.Components.transforms.","commonSituations":"Corrupted or hand-edited pipeline proto files; a transform referencing subtransforms that were pruned or never added to components; mismatched component IDs from an external pipeline exporter.","solutions":["Verify the transform id exists in the pipeline's Components before upgrading (components.getTransformsMap().containsKey(id))","Regenerate the pipeline graph from a supported SDK path rather than editing protos manually","Fix the parent transform's subtransforms list to only reference existing transform ids"],"exampleFix":"// before\nrecursivelyFindSubTransforms(\"missing_transform\", components, results);\n// after\nif (components.getTransformsMap().containsKey(\"missing_transform\")) {\n  recursivelyFindSubTransforms(\"missing_transform\", components, results);\n}","handlingStrategy":"validation","validationCode":"if (!components.getTransformsMap().containsKey(transformId)) {\n  throw new IllegalStateException(\"Transform id not in components: \" + transformId);\n}","typeGuard":null,"tryCatchPattern":"try {\n  upgrader.upgradeTransformsViaTransformService(pipeline, ids, service);\n} catch (IllegalArgumentException e) {\n  // handle missing transform id in components\n}","preventionTips":["Never hand-edit pipeline proto components","Verify all subtransform ids referenced exist in components.transforms before upgrading"],"tags":["java","beam","pipeline-construction","missing-entity"],"backgroundTag":"entity-not-found","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}