{"record":{"id":"6bed0f1ed0d03ef5","repo":"apache/beam","slug":"executetransform-gbk-stage-v-transform-q-v-couldn-t-process-6bed0f","errorCode":null,"errorMessage":"ExecuteTransform[GBK] stage %v, transform %q %v: couldn't process value coder:\n%w","messagePattern":"ExecuteTransform\\[GBK\\] stage (.+?), transform %q (.+?): couldn't process value coder:\n%w","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"sdks/go/pkg/beam/runners/prism/internal/handlerunner.go","lineNumber":440,"sourceCode":"\n\tcase urns.TransformGBK:\n\t\tws := windowingStrategy(comps, tid)\n\t\tkvc := onlyInputCoderForTransform(comps, tid)\n\n\t\tcoders := map[string]*pipepb.Coder{}\n\n\t\t// TODO assert this is a KV. It's probably fine, but we should fail anyway.\n\t\twcID, err := lpUnknownCoders(ws.GetWindowCoderId(), coders, comps.GetCoders())\n\t\tif err != nil {\n\t\t\tpanic(fmt.Errorf(\"ExecuteTransform[GBK] stage %v, transform %q %v: couldn't process window coder:\\n%w\", stageID, tid, prototext.Format(t), err))\n\t\t}\n\t\tkcID, err := lpUnknownCoders(kvc.GetComponentCoderIds()[0], coders, comps.GetCoders())\n\t\tif err != nil {\n\t\t\tpanic(fmt.Errorf(\"ExecuteTransform[GBK] stage %v, transform %q %v: couldn't process key coder:\\n%w\", stageID, tid, prototext.Format(t), err))\n\t\t}\n\t\tecID, err := lpUnknownCoders(kvc.GetComponentCoderIds()[1], coders, comps.GetCoders())\n\t\tif err != nil {\n\t\t\tpanic(fmt.Errorf(\"ExecuteTransform[GBK] stage %v, transform %q %v: couldn't process value coder:\\n%w\", stageID, tid, prototext.Format(t), err))\n\t\t}\n\t\treconcileCoders(coders, comps.GetCoders())\n\n\t\twc := coders[wcID]\n\t\tkc := coders[kcID]\n\t\tec := coders[ecID]\n\n\t\tdata = append(data, gbkBytes(ws, wc, kc, ec, inputData, coders))\n\t\tif len(data[0]) == 0 {\n\t\t\tpanic(\"no data for GBK\")\n\t\t}\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"unimplemented runner transform[%v]\", urn))\n\t}\n\n\t// To avoid conflicts with these single transform\n\t// bundles, we suffix the transform IDs.\n\tvar localID string","sourceCodeStart":422,"sourceCodeEnd":458,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/go/pkg/beam/runners/prism/internal/handlerunner.go#L422-L458","documentation":"ExecuteTransform for GBK resolves the KV's value component coder (component 1) last. If lpUnknownCoders fails on it, the runner panics with this message, identifying the stage, transform, and wrapped cause. It means the value side of the grouped KV could not be decoded/encoded as specified.","triggerScenarios":"A GBK whose KV coder's componentCoderIds[1] points to an unresolvable or unsupported coder in comps.GetCoders().","commonSituations":"Custom value coders omitted from the pipeline proto; cross-language pipelines where the value coder isn't registered; malformed CoGroupByKey/GBK graphs.","solutions":["Check the wrapped error for the failing value coder reference.","Make sure value coders for all elements reaching the GBK are registered and emitted into the pipeline.","Regenerate the pipeline with a current SDK, or switch to built-in coders for the value type."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Check the GBK KV's value component coder resolves\nkvc := codersByID[gbkInputCoderID]\nif len(kvc.GetComponentCoderIds()) < 2 {\n    log.Fatalf(\"GBK input coder missing value component\")\n}\nvalID := kvc.GetComponentCoderIds()[1]\nif _, ok := codersByID[valID]; !ok {\n    log.Fatalf(\"value coder %q not registered\", valID)\n}","typeGuard":null,"tryCatchPattern":"defer func() {\n    if r := recover(); r != nil && strings.Contains(fmt.Sprint(r), \"couldn't process value coder\") {\n        log.Fatalf(\"GBK value coder unresolved: %v\", r)\n    }\n}()","preventionTips":["Register custom value coders so they serialize into the pipeline","Test GBK pipelines with built-in types first to isolate custom-coder issues","Verify cross-language expansion emits value coders for grouped inputs"],"tags":["go","beam","gbk","coders"],"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-14T16:17:12.679Z"}