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

  1. Ensure the full lifecycle (Up, StartBundle, ProcessElement, FinishBundle) is observed.
  2. Restart the bundle before feeding more values after FinishBundle.
  3. 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

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


AI-assisted analysis of apache/beam@12126d8942 (2026-09-13). Data as JSON: /api/errors/ac0f5b39d9173096. Report an issue: GitHub.