apache/beam · error

error must be the final return parameter

Error message

error must be the final return parameter

What it means

Sentinel error errErrorPrecedence from the funcx return-value state machine: once an error return is seen the machine enters the terminal rsError state, so any subsequent return parameter is invalid. If a DoFn method returns an error, it must be the final return value.

Solutions

  1. Move the error return to the last position of the return signature
  2. Remove any return values declared after the error
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at sdks/go/pkg/beam/core/funcx/fn.go:748 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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

Appendix: source

Thrown at sdks/go/pkg/beam/core/funcx/fn.go:748

		return -1, errBundleFinalizationPrecedence
	case FnRTracker:
		return -1, errRTrackerPrecedence
	case FnStateProvider:
		return -1, errStateProviderPrecedence
	case FnTimerProvider:
		return -1, errTimerProviderPrecedence
	case FnIter, FnReIter, FnValue, FnMultiMap:
		return psInput, nil
	case FnEmit:
		return psOutput, nil
	default:
		panic(fmt.Sprintf("library error, unknown ParamKind: %v", transition))
	}
}

var (
	errEventTimeRetPrecedence        = errors.New("beam.EventTime must be first return parameter")
	errErrorPrecedence               = errors.New("error must be the final return parameter")
	errProcessContinuationPrecedence = errors.New("ProcessContinuation must be the final non-error return parameter")
)

type retState int

const (
	rsStart retState = iota
	rsEventTime
	rsOutput
	rsError
	rsProcessContinuation
)

func nextRetState(cur retState, transition ReturnKind) (retState, error) {
	switch cur {
	case rsStart:
		switch transition {
		case RetEventTime:

View on GitHub (pinned to 12126d8942)