apache/beam · error
invalid status for combine convert %v: %v
Error message
invalid status for combine convert %v: %v
What it means
ConvertToAccumulators.ProcessElement (which wraps a single input value into an accumulator) requires the node to be Active inside a started bundle. Any other status means ProcessElement was called out of lifecycle order.
Source
Thrown at sdks/go/pkg/beam/core/runtime/exec/combine.go:655
if err != nil {
return n.fail(err)
}
return n.Out.ProcessElement(n.Combine.ctx, &FullValue{Windows: value.Windows, Elm: value.Elm, Elm2: out, Timestamp: value.Timestamp})
}
// ConvertToAccumulators is an executor for converting an input value to an accumulator value.
type ConvertToAccumulators struct {
*Combine
}
func (n *ConvertToAccumulators) String() string {
return fmt.Sprintf("ConvertToAccumulators[%v] Keyed:%v Out:%v", path.Base(n.Fn.Name()), n.UsesKey, n.Out.ID())
}
// ProcessElement accepts an input value and returns an accumulator containing that one value.
func (n *ConvertToAccumulators) ProcessElement(ctx context.Context, value *FullValue, values ...ReStream) error {
if n.status != Active {
return errors.Errorf("invalid status for combine convert %v: %v", n.UID, n.status)
}
n.Combine.states.Set(n.Combine.ctx, metrics.StartBundle)
a, err := n.newAccum(n.Combine.ctx, value.Elm)
if err != nil {
return n.fail(err)
}
first := true
a, err = n.addInput(n.Combine.ctx, a, value.Elm, value.Elm2, value.Timestamp, first)
if err != nil {
return n.fail(err)
}
return n.Out.ProcessElement(n.Combine.ctx, &FullValue{Windows: value.Windows, Elm: value.Elm, Elm2: a, Timestamp: value.Timestamp})
}
View on GitHub (pinned to 12126d8942)
Solutions
- Ensure the full lifecycle (Up, StartBundle, ProcessElement, FinishBundle) is observed.
- Restart the bundle before feeding more values after FinishBundle.
- Check for error paths that skip StartBundle but continue processing.
Defensive patterns
Strategy: validation
Try / catch
if err := convert.ProcessElement(ctx, fv, values); err != nil {
if strings.Contains(err.Error(), "invalid status for combine convert") {
// ensure convert node is inside an active bundle
}
return err
} Prevention
- Feed values only between StartBundle and FinishBundle.
- Avoid reusing finished nodes without re-running the lifecycle.
- Let the plan executor manage node status rather than manual calls.
When it happens
Trigger: Calling ConvertToAccumulators.ProcessElement before StartBundle or after FinishBundle.
Common situations: Tests invoking the convert node directly; runners resuming data flow after a bundle finished without restarting it.
Understand the failure class
Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.
Related errors
- invalid status for precombine %v: %v
- invalid status for combine merge %v: %v
- invalid status for combine extract %v: %v
- invalid status for combine %v: %v
- unable to infer CombineFn accumulator coder
AI-assisted analysis of apache/beam@12126d8942 (2026-09-13).
Data as JSON: /api/errors/ac0f5b39d9173096.
Report an issue: GitHub.