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
- Use supported element coders (bytes/string-utf8/length-prefixed) for OrderedList state
- Change the state type or element coder in the DoFn to one prism supports
- Upgrade Beam — supported coder lists expand over time
- 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
- Restrict OrderedList state elements to bytes/string/length-prefixed coders
- Avoid custom coders for ordered list state with prism
- Track Beam releases for expanded ordered-list coder support
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
- unable to rewrite coder %v for state %v for transform %v in
- varint too long
- opening a reader %v on a closed channel. Original error: %w
- %v
- invalid coder
AI-assisted analysis of apache/beam@12126d8942 (2026-09-13).
Data as JSON: /api/errors/8d8cc136aa3f5c14.
Report an issue: GitHub.