{"record":{"id":"dd5b7ed69bfc9a96","repo":"apache/beam","slug":"coder-with-id-v-not-found","errorCode":null,"errorMessage":"coder with id %v not found","messagePattern":"coder with id (.+?) not found","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"sdks/go/pkg/beam/core/runtime/graphx/coder.go","lineNumber":145,"sourceCode":"\tcoders := make([]*coder.Coder, len(ids))\n\tfor i, id := range ids {\n\t\tc, err := b.Coder(id)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tcoders[i] = c\n\t}\n\treturn coders, nil\n}\n\n// Coder unmarshals a coder with the given id.\nfunc (b *CoderUnmarshaller) Coder(id string) (*coder.Coder, error) {\n\tif c, exists := b.coders[id]; exists {\n\t\treturn c, nil\n\t}\n\tc, ok := b.models[id]\n\tif !ok {\n\t\terr := errors.Errorf(\"coder with id %v not found\", id)\n\t\treturn nil, errors.WithContextf(err, \"unmarshalling coder %v\", id)\n\t}\n\n\tret, err := b.makeCoder(id, c)\n\tif err != nil {\n\t\treturn nil, errors.WithContextf(err, \"unmarshalling coder %v\", id)\n\t}\n\tret.ID = id\n\n\tb.coders[id] = ret\n\treturn ret, nil\n}\n\n// WindowCoder unmarshals a window coder with the given id.\nfunc (b *CoderUnmarshaller) WindowCoder(id string) (*coder.WindowCoder, error) {\n\tif w, exists := b.windowCoders[id]; exists {\n\t\treturn w, nil\n\t}","sourceCodeStart":127,"sourceCodeEnd":163,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/go/pkg/beam/core/runtime/graphx/coder.go#L127-L163","documentation":"CoderUnmarshaller.Coder looks up a coder by ID first in the already-unmarshaled coders map, then in the raw model map from the pipeline proto. If the ID is in neither, it throws \"coder with id %v not found\" wrapped with context 'unmarshalling coder <id>'. It means the pipeline graph references a coder that was never (or no longer) included in the coder definitions.","triggerScenarios":"Unmarshaling a pipeline whose components reference a coder ID absent from pipepb components' coders map — via UnmarshalCoders, makeCoderForPCollection, or makeLink during pipeline deserialization.","commonSituations":"A partially constructed or hand-edited pipeline proto; a runner/SDK version mismatch dropping coder definitions; a serialized pipeline (e.g. saved model) truncated or produced by an older SDK that pruned coders.","solutions":["Check the coder ID in the error exists in the pipeline proto's components.coders map; re-marshal the pipeline if it was hand-built.","Regenerate the pipeline with the same Beam SDK version as the runner to avoid dropped/mismatched coders.","If constructing the pipeline programmatically, ensure every PCollection's coder is registered before unmarshaling.","Upgrade or align beam Go SDK versions between job submission and runner/stager."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Before unmarshaling, verify referenced coder IDs exist:\nfor id, pc := range comps.GetPcollections() {\n    if _, ok := comps.GetCoders()[pc.GetCoderId()]; !ok {\n        return fmt.Errorf(\"pcollection %s references missing coder %s\", id, pc.GetCoderId())\n    }\n}","typeGuard":null,"tryCatchPattern":"c, err := um.Coder(id)\nif err != nil && strings.Contains(err.Error(), \"not found\") {\n    log.Printf(\"missing coder %q in pipeline proto: %v\", id, err)\n}","preventionTips":["Never hand-edit or prune coder entries in serialized pipeline protos.","Keep pipeline producer and runner SDK versions aligned.","Validate pipeline protos with graphx round-trip tests before submitting."],"tags":["go","coder","pipeline-unmarshaling","graphx"],"backgroundTag":"resource-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"}