apache/beam · error
Invalid output type in method %v, return value at index %v (
Error message
Invalid output type in method %v, return value at index %v (type: %v). Output of method %v must implement sdf.RTracker.
What it means
CreateTracker must return a value whose type implements the sdf.RTracker interface. This error fires when the first return value's reflect type does not implement RTracker, so the framework cannot use it to track restriction progress during splitting and bundle processing.
Source
Thrown at sdks/go/pkg/beam/core/graph/fn.go:1061
}
if method.Ret[0].T != reflectx.Float64 {
err := errors.Errorf("invalid output type in method %v, return %v. got: %v, want: %v",
restrictionSizeName, 0, method.Ret[0].T, reflectx.Float64)
return errors.SetTopLevelMsgf(err, "Invalid output type in method %v, "+
"return value at index %v. Got: %v, Want: %v. Sizing information in SDF methods must be in float64.",
restrictionSizeName, 0, method.Ret[0].T, reflectx.Float64)
}
case createTrackerName:
if method.Param[startIdx].T != restrictionT {
err := errors.Errorf("mismatched restriction type in method %v, param %v. got: %v, want: %v",
createTrackerName, startIdx, method.Param[startIdx].T, restrictionT)
return errors.SetTopLevelMsgf(err, "Mismatched restriction type in method %v, "+
"parameter at index %v. Got: %v, Want: %v (from method %v). "+
"Ensure that all restrictions in an SDF are the same type.",
createTrackerName, startIdx, method.Param[startIdx].T, restrictionT, createInitialRestrictionName)
}
if !method.Ret[0].T.Implements(rTrackerT) {
err := errors.Errorf("invalid output type in method %v, return %v: %v does not implement sdf.RTracker",
createTrackerName, 0, method.Ret[0].T)
return errors.SetTopLevelMsgf(err, "Invalid output type in method %v, "+
"return value at index %v (type: %v). Output of method %v must implement sdf.RTracker.",
createTrackerName, 0, method.Ret[0].T, createTrackerName)
}
processFn := fn.methods[processElementName]
pos, _ := processFn.RTracker()
if method.Ret[0].T != processFn.Param[pos].T {
err := errors.Errorf("mismatched output type in method %v, return %v: got: %v, want: %v",
createTrackerName, 0, method.Ret[0].T, processFn.Param[pos].T)
return errors.SetTopLevelMsgf(err, "Mismatched output type in method %v, "+
"return value at index %v. Got: %v, Want: %v (from method %v).",
createTrackerName, 0, method.Ret[0].T, processFn.Param[pos].T, processElementName)
}
}
}
rTrackerImplT := fn.methods[createTrackerName].Ret[0].TView on GitHub (pinned to 12126d8942)
Solutions
- Return a type that implements sdf.RTracker, e.g. wrap your restriction with sdf.NewRestrictionTracker or a LockRTracker.
- Fix method signatures (TryClaim/TrySplit/etc.) so your custom tracker truly satisfies sdf.RTracker.
- Match receiver types: if RTracker methods are defined on *T, return *T.
- Use a compile-time assertion var _ sdf.RTracker = (*myTracker)(nil) to catch this before runtime.
Example fix
// before
func (fn *myFn) CreateTracker(r myRestriction) myRestriction { return r }
// after
func (fn *myFn) CreateTracker(r myRestriction) *sdf.LockRTracker {
return sdf.NewLockRTracker(sdf.NewSliceRestrictionTracker(0, len(r.List)))
} Defensive patterns
Strategy: type-guard
Validate before calling
// Compile-time assertion that the tracker satisfies sdf.RTracker: var _ sdf.RTracker = (*myTracker)(nil)
Type guard
func implementsRTracker(rt any) bool { _, ok := rt.(sdf.RTracker); return ok } Prevention
- Add var _ sdf.RTracker = (*myTracker)(nil) near the tracker definition
- Prefer stock trackers (sdf.NewSliceRestrictionTracker, LockRTracker) over custom ones
- Check receiver types (value vs pointer) when implementing RTracker methods
When it happens
Trigger: CreateTracker returning a custom struct that lacks RTracker methods (TryClaim, TrySplit, GetError, etc.), returning a pointer when methods are on the value receiver (or vice versa), or returning a plain restriction.
Common situations: Implementing a custom tracker with slightly wrong method signatures so it silently fails to satisfy the interface; forgetting to use beam's restriction trackers (e.g. sdf.LockRTracker); value/pointer receiver mismatches.
Understand the failure class
Background: Type mismatch errors: IllegalArgumentException, TypeError and type guards across 150 open-source libraries — this error's family across 150 libraries.
Related errors
- method %v has sdf.RTracker as param %v, expected none
- method %v missing sdf.RTracker, expected one at index %v
- DoFn terminated without fully processing restriction
- Restriction tracker missing.
- not all required SplittableDoFn methods are present. Missing
AI-assisted analysis of apache/beam@12126d8942 (2026-09-13).
Data as JSON: /api/errors/8adf71f76b6575f2.
Report an issue: GitHub.