{"record":{"id":"853ce95d800bb853","repo":"apache/beam","slug":"v-not-found-register-dofns-and-functions-with-the-the-beam","errorCode":null,"errorMessage":"%v not found. Register DoFns and functions with the the beam/register package.","messagePattern":"(.+?) not found\\. Register DoFns and functions with the the beam/register package\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"sdks/go/pkg/beam/core/runtime/symbols.go","lineNumber":128,"sourceCode":"\tdefer mu.Unlock()\n\n\tif val, exists := cache[name]; exists {\n\t\treturn val, nil\n\t}\n\n\tptr, err := Resolver.Sym2Addr(name)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tval := reflectx.LoadFunction(ptr, t)\n\tcache[name] = val\n\treturn val, nil\n}\n\ntype failResolver bool\n\nfunc (p failResolver) Sym2Addr(name string) (uintptr, error) {\n\treturn 0, errors.Errorf(\"%v not found. Register DoFns and functions with the the beam/register package.\", name)\n}\n","sourceCodeStart":110,"sourceCodeEnd":130,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/go/pkg/beam/core/runtime/symbols.go#L110-L130","documentation":"The failResolver's Sym2Addr is the fallback symbol resolver used when a function/DoFn was never registered: it always fails for any symbol name. Beam Go serializes graph nodes as symbol names, and at deserialization time the receiving process must map names back to addresses — unregistered functions cannot be resolved.","triggerScenarios":"Submitting a pipeline whose DoFns or helper functions were not passed to beam/register (register.Function / register.DoFn / register.Receiver / register.Emitter), commonly because the functions were constructed via reflection/literal types that were never registered, or registration happened in a package/entrypoint not linked into the worker binary.","commonSituations":"Using anonymous or locally-defined DoFns without registration in cross-language or remote-execution setups, registration calls placed in an init of a file not imported by the worker, upgrades where reflection-based resolution no longer covers the function, running a pipeline across processes so symbol names cannot be resolved in-process.","solutions":["Register every DoFn/function used in the pipeline with the beam/register package (register.DoFn2x0, register.Function, etc.) before submission.","Put registrations in package init() of a file that is actually imported by the worker binary/entrypoint.","Avoid anonymous/unexported DoFn types for remote execution, or register them explicitly.","Check the name in the error against your registration calls — a mismatch (typo, different package path) means the registration didn't apply."],"exampleFix":"// before\nbeam.ParDo(s, &myFn{}, input) // unregistered\n// after\nfunc init() { register.DoFn2x0[*string, func(string)](&myFn{}) }\nbeam.ParDo(s, &myFn{}, input)","handlingStrategy":"validation","validationCode":"// ensure all functions are registered before job submission\nfor _, fn := range pipelineFunctions {\n    if !register.IsRegistered(fn) {\n        return fmt.Errorf(\"function %T must be registered via beam/register\", fn)\n    }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Register every DoFn/emitter in package init()","Ensure the registering package is imported by the worker entrypoint","Avoid anonymous DoFn types for remote execution","Cross-check the symbol name in the error against your register calls"],"tags":["go","beam","registration","deserialization"],"backgroundTag":"class-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"}