{"record":{"id":"7ffb34f21efdb559","repo":"apache/beam","slug":"unknown-coder-urn-key-v","errorCode":null,"errorMessage":"unknown coder urn key: %v","messagePattern":"unknown coder urn key: (.+?)","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"sdks/go/pkg/beam/runners/prism/internal/coders.go","lineNumber":384,"sourceCode":"\t\treturn func(r io.Reader) {\n\t\t\ted(r)\n\t\t\twd(r)\n\t\t}\n\tcase urns.CoderShardedKey:\n\t\tccids := c.GetComponentCoderIds()\n\t\tif len(ccids) != 1 {\n\t\t\tpanic(fmt.Sprintf(\"ShardedKey coder must have only 1 component: %s\", prototext.Format(c)))\n\t\t}\n\t\tkd := pullDecoderNoAlloc(coders[ccids[0]], coders)\n\t\treturn func(r io.Reader) {\n\t\t\tl, _ := coder.DecodeVarInt(r)\n\t\t\tioutilx.ReadN(r, int(l))\n\t\t\tkd(r)\n\t\t}\n\tcase urns.CoderRow:\n\t\tpanic(fmt.Sprintf(\"Runner forgot to LP this Row Coder. %v\", prototext.Format(c)))\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"unknown coder urn key: %v\", urn))\n\t}\n}\n\n// debugCoder is developer code to get the structure of a proto coder visible when\n// debugging coder errors in prism. It may sometimes be unused, so we do this to avoid\n// linting errors.\nvar _ = debugCoder\n\nfunc debugCoder(cid string, coders map[string]*pipepb.Coder) string {\n\tvar b strings.Builder\n\tb.WriteString(cid)\n\tb.WriteRune('\\n')\n\tc := coders[cid]\n\tif len(c.ComponentCoderIds) > 0 {\n\t\tb.WriteRune('\\t')\n\t\tb.WriteString(strings.Join(c.ComponentCoderIds, \", \"))\n\t\tb.WriteRune('\\n')\n\t\tfor _, ccid := range c.GetComponentCoderIds() {","sourceCodeStart":366,"sourceCodeEnd":402,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/go/pkg/beam/runners/prism/internal/coders.go#L366-L402","documentation":"prism's pullDecoderNoAlloc switches on the coder URN and panics for any URN it doesn't recognize. This means the SDK sent a coder type prism has no decoding implementation for — usually a newer coder URN unknown to this prism build.","triggerScenarios":"The default branch of the coder URN switch is reached: the proto coder's URN is not one of the handled urns (KV, WindowedValue, ShardedKey, etc.), e.g. an SDK version introduced a coder type this prism doesn't know.","commonSituations":"Version skew: pipeline submitted by a newer SDK than the prism runner; custom/forked coders registered with non-standard URNs; cross-language pipelines where one SDK emits coder types Go prism lacks.","solutions":["Upgrade prism (and the Go SDK) to a version that supports the coder URN in the panic message","Pin SDK and runner to the same Beam release","Check the URN printed in the panic for typos or non-standard custom coders and remove them","Report unsupported URN to the Beam project if it should be supported"],"exampleFix":"// before: custom coder urn injected into pipeline\ncoderUrn := \"beam:coders:my_custom:v1\"\n// after: use standard supported coders or upgrade prism to a version that handles the URN","handlingStrategy":"validation","validationCode":"supported := map[string]bool{\"beam:coders:kv:v1\": true, \"beam:coders:windowed_value:v1\": true, \"beam:coders:sharded_key:v1\": true, /* ... */}\nif !supported[coder.GetUrn()] { return fmt.Errorf(\"unsupported coder urn for prism: %s\", coder.GetUrn()) }","typeGuard":null,"tryCatchPattern":"defer func() { if r := recover(); r != nil { log.Errorf(\"unknown coder urn panicked: %v\", r) } }()","preventionTips":["Pin all SDKs and the runner to the same Beam release","Check cross-language transform docs for coder support before use","Scan pipeline coder URNs against your prism version's supported set"],"tags":["go","beam","prism","coder","unknown-urn","panic"],"backgroundTag":"unsupported-operation","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}