apache/beam · error

detected one of the following experiments…

Error message

detected one of the following experiments: disable_runner_v2 | disable_runner_v2_until_2023 | disable_prime_runner_v2 | disable_portable_runner | enable_streaming_java_runner. Disabling Dataflow Portable Runner is no longer supported as of Beam version 2.45.0+

What it means

As of Beam 2.45.0+, the Dataflow runner no longer supports disabling the portable (Runner V2) pipeline. getJobOptions scans the configured experiments and fails with this error if any of disable_runner_v2, disable_runner_v2_until_2023, disable_prime_runner_v2, disable_portable_runner, or enable_streaming_java_runner is present.

Solutions

  1. Remove the disallowed experiment flags (--experiments=...) from the job configuration
  2. Enable Runner V2 instead (it is the default; ensure no disable_* experiments leak in via jobopts.GetExperiments)
  3. Pin Beam <2.45 only as a short-term rollback while migrating configs

Example fix

// before
--experiments=disable_runner_v2
// after
# remove the experiment entirely (Runner V2 is default and required)
Defensive patterns

Strategy: validation

Validate before calling

banned := []string{"disable_runner_v2", "disable_runner_v2_until_2023", "disable_prime_runner_v2", "disable_portable_runner", "enable_streaming_java_runner"}
for _, e := range experiments {
    for _, b := range banned {
        if strings.Contains(e, b) {
            return fmt.Errorf("unsupported experiment %q on Beam >= 2.45", e)
        }
    }
}

Prevention

When it happens

Trigger: Submitting a Dataflow job with --experiments containing one of the disallowlist entries (commonly copied from pre-2.45 launch templates or stored job configs).

Common situations: Upgrading the Beam SDK from <2.45 to a newer version while old experiment flags persist in Terraform/CLI templates; enable_streaming_java_runner set from older streaming guidance.

Understand the failure class

Background: "is deprecated and will be removed" — deprecation warnings for old API names, keywords, and options, and how to migrate before the removal release — this error's family across 29 libraries.

Related errors


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

Appendix: source

Thrown at sdks/go/pkg/beam/runners/dataflow/dataflow.go:354

	// Ensure that we enable the same set of experiments across all SDKs
	// for Dataflow Portable Runner.
	var fnApiSet, v2set, uwSet, portaSubmission, seSet, wsSet bool
	for _, e := range experiments {
		if strings.Contains(e, "beam_fn_api") {
			fnApiSet = true
		}
		if strings.Contains(e, "use_runner_v2") {
			v2set = true
		}
		if strings.Contains(e, "use_unified_worker") {
			uwSet = true
		}
		if strings.Contains(e, "use_portable_job_submission") {
			portaSubmission = true
		}
		// enable_portable_runner is not documented and hence wont be set by default. This will be fixed in later versions.
		if strings.Contains(e, "disable_runner_v2") || strings.Contains(e, "disable_runner_v2_until_2023") || strings.Contains(e, "disable_prime_runner_v2") || strings.Contains(e, "disable_portable_runner") || strings.Contains(e, "enable_streaming_java_runner") {
			return nil, errors.New("detected one of the following experiments: disable_runner_v2 | disable_runner_v2_until_2023 | disable_prime_runner_v2 | disable_portable_runner | enable_streaming_java_runner. Disabling Dataflow Portable Runner is no longer supported as of Beam version 2.45.0+")
		}
	}
	// Enable default experiments.
	if !fnApiSet {
		experiments = append(experiments, "beam_fn_api")
	}
	if !v2set {
		experiments = append(experiments, "use_runner_v2")
	}
	if !uwSet {
		experiments = append(experiments, "use_unified_worker")
	}
	if !portaSubmission {
		experiments = append(experiments, "use_portable_job_submission")
	}

	// Ensure that streaming specific experiments are set for streaming pipelines
	// since Dataflow Portable Runner only supports using streaming engine.

View on GitHub (pinned to 12126d8942)