apache/beam · error
not found. Register DoFns and functions with the the…
Error message
%v not found. Register DoFns and functions with the the beam/register package.
What it means
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.
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.
Example fix
// before
beam.ParDo(s, &myFn{}, input) // unregistered
// after
func init() { register.DoFn2x0[*string, func(string)](&myFn{}) }
beam.ParDo(s, &myFn{}, input) Defensive patterns
Strategy: validation
Validate before calling
// ensure all functions are registered before job submission
for _, fn := range pipelineFunctions {
if !register.IsRegistered(fn) {
return fmt.Errorf("function %T must be registered via beam/register", fn)
}
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Related errors
AI-assisted analysis of apache/beam@12126d8942 (2026-09-13).
Data as JSON: /api/errors/853ce95d800bb853.
Report an issue: GitHub.
Appendix: source
Thrown at sdks/go/pkg/beam/core/runtime/symbols.go:128
defer mu.Unlock()
if val, exists := cache[name]; exists {
return val, nil
}
ptr, err := Resolver.Sym2Addr(name)
if err != nil {
return 0, err
}
val := reflectx.LoadFunction(ptr, t)
cache[name] = val
return val, nil
}
type failResolver bool
func (p failResolver) Sym2Addr(name string) (uintptr, error) {
return 0, errors.Errorf("%v not found. Register DoFns and functions with the the beam/register package.", name)
}
View on GitHub (pinned to 12126d8942)