apache/beam · error

prism runner doesn't support the following required features

Error message

prism runner doesn't support the following required features: %v

What it means

Before accepting a job, prism's Prepare step calls isSupported, which checks every pipeline requirement against the supportedRequirements allowlist. Any requirement not in the set is collected and, if any exist, the job is rejected with 'prism runner doesn't support the following required features: <sorted list>'. This is a deliberate capability gate, not a bug.

Solutions

  1. Read the comma-separated list in the error to see exactly which features are unsupported.
  2. Upgrade prism to the latest release — the supportedRequirements set grows over time.
  3. Rewrite the pipeline to avoid the unsupported requirement, or use a different runner that supports it.

Example fix

// before: pipeline declares unsupported requirement
reqs: ["beam:requirement:unittests:v1"]

// after: drop the requirement or upgrade prism so it is supported
Defensive patterns

Strategy: validation

Validate before calling

// Go: check pipeline requirements against prism's allowlist before submission
func unsupportedReqs(reqs []string, supported map[string]struct{}) []string {
    var out []string
    for _, r := range reqs {
        if _, ok := supported[r]; !ok {
            out = append(out, r)
        }
    }
    return out
}

Try / catch

if err := job.Prepare(); err != nil && strings.Contains(err.Error(), "doesn't support the following required features") {
    log.Fatalf("prism capability gap — remove these requirements or upgrade prism: %v", err)
}

Prevention

When it happens

Trigger: Submitting a pipeline whose proto sets requirements (e.g. specific capabilities like sink or state/timer features) not in prism's supportedRequirements, during Prepare.

Common situations: Pipelines using newly added Beam requirements against an older prism runner; pipelines using exotic features (e.g. self-checkpointing, certain splittable DoFn capabilities) that prism never adopted.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


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

Appendix: source

Thrown at sdks/go/pkg/beam/runners/prism/internal/jobservices/job.go:64

	urns.RequirementSplittableDoFn:     {},
	urns.RequirementStatefulProcessing: {},
	urns.RequirementBundleFinalization: {},
	urns.RequirementOnWindowExpiration: {},
	urns.RequirementTimeSortedInput:    {},
}

// TODO, move back to main package, and key off of executor handlers?
// Accept whole pipeline instead, and look at every PTransform too.
func isSupported(requirements []string) error {
	var unsupported []string
	for _, req := range requirements {
		if _, ok := supportedRequirements[req]; !ok {
			unsupported = append(unsupported, req)
		}
	}
	if len(unsupported) > 0 {
		sort.Strings(unsupported)
		return fmt.Errorf("prism runner doesn't support the following required features: %v", strings.Join(unsupported, ","))
	}
	return nil
}

// Job is an interface to the job services for executing pipelines.
// It allows the executor to communicate status, messages, and metrics
// back to callers of the Job Management API.
type Job struct {
	key     string
	jobName string

	artifactEndpoint string

	Pipeline *pipepb.Pipeline
	options  *structpb.Struct

	// Management side concerns.
	streamCond *sync.Cond

View on GitHub (pinned to 12126d8942)