apache/beam · error

invalid WindowInto payload for

Error message

invalid WindowInto payload for %v

What it means

When translating a URNWindow (WindowInto) transform, the raw payload bytes must unmarshal into pipepb.WindowIntoPayload. Failure means the payload bytes are not a valid WindowIntoPayload protobuf, so the windowing strategy cannot be reconstructed and translation aborts.

Solutions

  1. Resubmit the pipeline from an unmodified Beam SDK so the WindowInto payload is serialized correctly
  2. Verify the payload bytes decode with `proto.Unmarshal(payload, &pipepb.WindowIntoPayload{})` offline
  3. Upgrade SDK versions on both builder and harness sides to ensure schema compatibility

Example fix

null
Defensive patterns

Strategy: validation

Validate before calling

var wp pipepb.WindowIntoPayload
if err := proto.Unmarshal(payload, &wp); err != nil {
	return fmt.Errorf("payload is not a WindowIntoPayload: %w", err)
}

Type guard

null

Try / catch

if _, err := graph.MakePipeline(pipelineProto); err != nil {
	if strings.Contains(err.Error(), "invalid WindowInto payload") {
		// rebuild and resubmit the pipeline from a stock SDK
	}
}

Prevention

When it happens

Trigger: WindowInto payload bytes corrupted in the job proto, a payload generated by a foreign runner not using the Beam proto schema, or a misrouted payload (e.g. FunctionSpec bytes passed where WindowIntoPayload is expected).

Common situations: Custom runners crafting pipeline protos by hand; cross-language/cross-version pipelines; payloads altered by proxies or serialized job caches.

Understand the failure class

Background: "cannot parse invalid wire-format data", "cannot unmarshal", "failed unmarshalling": protobuf unmarshal errors explained — this error's family across 10 libraries.

Related errors


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

Appendix: source

Thrown at sdks/go/pkg/beam/core/runtime/exec/translate.go:786

			_, w, err := b.makeCoderForPCollection(pid)
			if err != nil {
				return nil, err
			}
			preservedCoderID := tp.GetReshuffle().GetCoderId()
			pc, err := unmarshalReshuffleCoders(preservedCoderID, tp.GetReshuffle().GetCoderPayloads())
			if err != nil {
				return nil, err
			}
			u = &ReshuffleOutput{UID: b.idgen.New(), Coder: coder.NewW(pc, w), Out: out[0]}

		default:
			return nil, errors.Errorf("unexpected payload: %v", &tp)
		}

	case graphx.URNWindow:
		var wp pipepb.WindowIntoPayload
		if err := proto.Unmarshal(payload, &wp); err != nil {
			return nil, errors.Wrapf(err, "invalid WindowInto payload for %v", transform)
		}
		wfn, err := unmarshalWindowFn(wp.GetWindowFn())
		if err != nil {
			return nil, err
		}
		u = &WindowInto{UID: b.idgen.New(), Fn: wfn, Out: out[0]}

	case graphx.URNMapWindows:
		var fn pipepb.FunctionSpec
		if err := proto.Unmarshal(payload, &fn); err != nil {
			return nil, errors.Wrapf(err, "invalid SideInput payload for %v", transform)
		}
		mapper, err := unmarshalAndMakeWindowMapping(&fn)
		if err != nil {
			return nil, err
		}
		u = &MapWindows{UID: b.idgen.New(), Fn: mapper, Out: out[0], FnUrn: fn.GetUrn()}

View on GitHub (pinned to 12126d8942)