{"record":{"id":"870cc6478786d627","repo":"apache/beam","slug":"unable-to-decode-pardopayload-for-transform-v","errorCode":null,"errorMessage":"unable to decode ParDoPayload for transform[%v]","messagePattern":"unable to decode ParDoPayload for transform\\[(.+?)\\]","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"sdks/go/pkg/beam/runners/prism/internal/handlecombine.go","lineNumber":156,"sourceCode":"\t//\n\t// Then we can produce the PCollections.\n\t// We can reuse the INPUT and OUTPUT PCollections.\n\t// We need LIFTED to have KV<K, A>  kv_k_a\n\t// We need GROUPED_A to have KV<K, Iter<A>> kv_k_iter_a\n\t// We need MERGED_A to have KV<K, A> kv_k_a\n\t//\n\t// GROUPED_I ends up unused.\n\t//\n\t// The PCollections inherit the properties of the Input PCollection\n\t// such as Boundedness, and Windowing Strategy.\n\t//\n\t// With these, we can produce the PTransforms with the appropriate URNs for the\n\t// different parts of the composite, and return the new components.\n\n\tcmbPayload := t.GetSpec().GetPayload()\n\tcmb := &pipepb.CombinePayload{}\n\tif err := (proto.UnmarshalOptions{}).Unmarshal(cmbPayload, cmb); err != nil {\n\t\tpanic(fmt.Sprintf(\"unable to decode ParDoPayload for transform[%v]\", t.GetUniqueName()))\n\t}\n\n\t// First lets get the key coder ID.\n\tvar pcolInID string\n\t// There's only one input.\n\tfor _, pcol := range t.GetInputs() {\n\t\tpcolInID = pcol\n\t}\n\tinputPCol := comps.GetPcollections()[pcolInID]\n\tkvkiID := inputPCol.GetCoderId()\n\tkID := comps.GetCoders()[kvkiID].GetComponentCoderIds()[0]\n\n\t// Now we can start synthesis!\n\t// Coder IDs\n\taID := cmb.AccumulatorCoderId\n\n\tckvprefix := \"c\" + tid + \"_kv_\"\n","sourceCodeStart":138,"sourceCodeEnd":174,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/go/pkg/beam/runners/prism/internal/handlecombine.go#L138-L174","documentation":"In handlecombine's PrepareTransform, the transform's spec payload is expected to be a CombinePayload protobuf. If proto.Unmarshal fails, prism panics with a message (misleadingly) naming ParDoPayload, since a Combine transform's spec must always decode as CombinePayload; failure means the job graph's spec bytes are corrupt or the transform is not actually a Combine.","triggerScenarios":"A PTransform routed to the Combine handler whose spec payload is not valid CombinePayload bytes — e.g. wrong URN routing, truncated payload from a malformed submission, or a runner/SDK version mismatch producing an incompatible payload format.","commonSituations":"Cross-language Combine expansion emitting unexpected payloads, submitting a job graph generated by a newer SDK than the prism runner supports, or hand-edited pipeline JSON.","solutions":["Check that the transform's URN actually matches a Combine; report a routing bug to Beam if a non-Combine payload reaches this handler.","Align SDK and prism (runner) versions so payloads serialize compatibly.","Regenerate/re-expand the pipeline rather than hand-editing job JSON.","Inspect the transform payload bytes in the job JSON to confirm corruption."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Verify the payload decodes as CombinePayload before running the stage\ncmb := &pipepb.CombinePayload{}\nif err := (proto.UnmarshalOptions{}).Unmarshal(t.GetSpec().GetPayload(), cmb); err != nil {\n    return fmt.Errorf(\"transform %s is not a valid Combine: %w\", t.GetUniqueName(), err)\n}","typeGuard":null,"tryCatchPattern":"if err := recover(); err != nil { /* around PrepareTransform */ }","preventionTips":["Don't hand-edit pipeline payloads; re-expand the pipeline","Align SDK and prism versions for payload compatibility","Check transform URNs match the handler dispatch"],"tags":["go","panic","protobuf","combine","beam-prism"],"backgroundTag":"protobuf-unmarshal-failed","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"}