{"record":{"id":"a2e2c0a414b56666","repo":"apache/beam","slug":"unknown-urn-to-prepare","errorCode":null,"errorMessage":"unknown urn to Prepare: ","messagePattern":"unknown urn to Prepare: ","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"sdks/go/pkg/beam/runners/prism/internal/handlerunner.go","lineNumber":90,"sourceCode":"\t\turns.TransformReshuffle,\n\t\turns.TransformRedistributeArbitrarily,\n\t\turns.TransformRedistributeByKey,\n\t\turns.TransformFlatten,\n\t\turns.TransformTestStream,\n\t}\n}\n\n// PrepareTransform handles special processing with respect runner transforms, like reshuffle.\nfunc (h *runner) PrepareTransform(tid string, t *pipepb.PTransform, comps *pipepb.Components) prepareResult {\n\tswitch t.GetSpec().GetUrn() {\n\tcase urns.TransformFlatten:\n\t\treturn h.handleFlatten(tid, t, comps)\n\tcase urns.TransformReshuffle, urns.TransformRedistributeArbitrarily, urns.TransformRedistributeByKey:\n\t\treturn h.handleReshuffle(tid, t, comps)\n\tcase urns.TransformTestStream:\n\t\treturn h.handleTestStream(tid, t, comps)\n\tdefault:\n\t\tpanic(\"unknown urn to Prepare: \" + t.GetSpec().GetUrn())\n\t}\n}\n\nfunc (h *runner) handleFlatten(tid string, t *pipepb.PTransform, comps *pipepb.Components) prepareResult {\n\tif !h.config.SDKFlatten && !strings.HasPrefix(tid, \"ft_\") {\n\t\tforcedRoots := []string{tid} // Have runner side transforms be roots.\n\n\t\t// Force runner flatten consumers to be roots.\n\t\t// This resolves merges between two runner transforms trying\n\t\t// to execute together.\n\t\toutColID := getOnlyValue(t.GetOutputs())\n\t\tfor ctid, t := range comps.GetTransforms() {\n\t\t\tfor _, gi := range t.GetInputs() {\n\t\t\t\tif gi == outColID {\n\t\t\t\t\tforcedRoots = append(forcedRoots, ctid)\n\t\t\t\t}\n\t\t\t}\n\t\t}","sourceCodeStart":72,"sourceCodeEnd":108,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/go/pkg/beam/runners/prism/internal/handlerunner.go#L72-L108","documentation":"PrepareTransform dispatches on the transform's spec URN to a dedicated handler (ParDo, GBK, Flatten, Reshuffle, TestStream, etc.). When the URN does not match any known case, the runner panics because it has no strategy for that transform. This is a hard internal limitation of the prism runner's supported transform set.","triggerScenarios":"Submitting a pipeline containing a transform URN prism does not implement, e.g. a runner-native PTransform URN introduced in a newer SDK, a custom transform URN, or an exotic composite that survives pipeline simplification.","commonSituations":"Cross-language (xlang) pipelines whose external transforms use URNs prism hasn't implemented; SDK and prism from different Beam versions where the SDK emits a newer URN; custom expansion results from a schema-aware or external transform service.","solutions":["Check the transform URN in the pipeline dump and confirm it is in prism's supported set (ParDo, GBK, Flatten, Reshuffle, TestStream, and composites).","Align SDK and prism to the same Beam version so both sides know the same URNs.","Refactor the pipeline to avoid the unsupported transform (e.g. replace a custom URN with standard beam transforms).","If the URN should be supported, report it upstream to the Beam project."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"known := map[string]bool{urns.TransformParDo:true, urns.TransformGBK:true, urns.TransformFlatten:true, urns.TransformReshuffle:true, urns.TransformTestStream:true}\nif !known[t.GetSpec().GetUrn()] { /* unsupported transform for prism */ }","typeGuard":null,"tryCatchPattern":"defer func(){ if r := recover(); r != nil && strings.Contains(fmt.Sprint(r), \"unknown urn to Prepare\") { /* report unsupported transform */ } }()","preventionTips":["Check prism's supported URN list before submitting xlang or custom transforms","Match SDK and runner versions","Avoid custom URN transforms with prism"],"tags":["go","apache-beam","prism-runner","unsupported-transform"],"backgroundTag":"unsupported-operation","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"}