apache/beam · error

unknown coder used for ordered list state after re-write id:

Error message

unknown coder used for ordered list state after re-write id: %v coder: %v, for state %v for transform %v in stage %v

What it means

For OrderedList state, prism must know the element coder's length-prefixing function to slice the encoded list; after rewriting, if the element coder resolves to a coder URN it doesn't support (not LengthPrefix, Bytes, or StringUtf8), it fails with this detailed error.

Source

Thrown at sdks/go/pkg/beam/runners/prism/internal/stage.go:500

					fn = func(_ []byte) int {
						return 1
					}
				case urns.CoderDouble:
					fn = func(_ []byte) int {
						return 8
					}
				case urns.CoderVarInt:
					fn = func(b []byte) int {
						_, n := protowire.ConsumeVarint(b)
						return int(n)
					}
				case urns.CoderLengthPrefix, urns.CoderBytes, urns.CoderStringUTF8:
					fn = func(b []byte) int {
						l, n := protowire.ConsumeVarint(b)
						return int(l) + n
					}
				default:
					rewriteErr = fmt.Errorf("unknown coder used for ordered list state after re-write id: %v coder: %v, for state %v for transform %v in stage %v", s.OrderedListSpec.GetElementCoderId(), v, stateID, tid, stg.ID)
				}
				stg.stateTypeLen[linkID] = fn
			case *pipepb.StateSpec_CombiningSpec:
				rewriteCoder(&s.CombiningSpec.AccumulatorCoderId)
			case *pipepb.StateSpec_MapSpec:
				rewriteCoder(&s.MapSpec.KeyCoderId)
				rewriteCoder(&s.MapSpec.ValueCoderId)
			case *pipepb.StateSpec_MultimapSpec:
				rewriteCoder(&s.MultimapSpec.KeyCoderId)
				rewriteCoder(&s.MultimapSpec.ValueCoderId)
			case *pipepb.StateSpec_ReadModifyWriteSpec:
				rewriteCoder(&s.ReadModifyWriteSpec.CoderId)
			}
			if rewriteErr != nil {
				return rewriteErr
			}
		}
		for timerID, v := range pardo.GetTimerFamilySpecs() {

View on GitHub (pinned to 12126d8942)

Solutions

  1. Use supported element coders (bytes/string-utf8/length-prefixed) for OrderedList state
  2. Change the state type or element coder in the DoFn to one prism supports
  3. Upgrade Beam — supported coder lists expand over time
  4. File a Beam issue requesting support for the specific coder URN
Defensive patterns

Strategy: validation

Validate before calling

switch coderUrn {
case urns.CoderLengthPrefix, urns.CoderBytes, urns.CoderStringUTF8:
    // ok
default:
    return fmt.Errorf("unsupported OrderedList element coder %v", coderUrn)
}

Try / catch

if err := buildDescriptor(...); err != nil {
    if strings.Contains(err.Error(), "ordered list state") {
        // switch state element coder to a supported one
    }
    return err
}

Prevention

When it happens

Trigger: An OrderedList state spec whose element coder, after rewrite, is a coder prism has no length-computation for — e.g. custom or composite element coders.

Common situations: Using OrderedList state with custom element encodings; cross-language pipelines emitting coders prism can't measure; SDK producing new coder types before prism support.

Related errors


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