{"record":{"id":"e9d61982b2d0903b","repo":"apache/beam","slug":"environment-v-with-urn-v-unimplemented","errorCode":null,"errorMessage":"environment %v with urn %v unimplemented","messagePattern":"environment (.+?) with urn (.+?) unimplemented","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"sdks/go/pkg/beam/runners/prism/internal/environments.go","lineNumber":95,"sourceCode":"\t\tdp := &pipepb.DockerPayload{}\n\t\tif err := (proto.UnmarshalOptions{}).Unmarshal(e.GetPayload(), dp); err != nil {\n\t\t\tlogger.Error(\"unmarshaling docker environment payload\", \"error\", err)\n\t\t\treturn err\n\t\t}\n\t\treturn dockerEnvironment(ctx, logger, dp, wk, wk.ArtifactEndpoint)\n\tcase urns.EnvProcess:\n\t\tpp := &pipepb.ProcessPayload{}\n\t\tif err := (proto.UnmarshalOptions{}).Unmarshal(e.GetPayload(), pp); err != nil {\n\t\t\tlogger.Error(\"unmarshaling process environment payload\", \"error\", err)\n\t\t\treturn err\n\t\t}\n\t\tgo func() {\n\t\t\tprocessEnvironment(ctx, logger, pp, wk)\n\t\t\tlogger.Debug(\"environment stopped\", slog.String(\"job\", j.String()))\n\t\t}()\n\t\treturn nil\n\tdefault:\n\t\treturn fmt.Errorf(\"environment %v with urn %v unimplemented\", env, e.GetUrn())\n\t}\n}\n\nfunc selectAnyOfEnv(ap *pipepb.AnyOfEnvironmentPayload) *pipepb.Environment {\n\t// Prefer external, then process, then docker, unknown environments are 0.\n\tranks := map[string]int{\n\t\turns.EnvDocker:   1,\n\t\turns.EnvProcess:  5,\n\t\turns.EnvExternal: 10,\n\t}\n\n\tenvs := ap.GetEnvironments()\n\n\tslices.SortStableFunc(envs, func(a, b *pipepb.Environment) int {\n\t\trankA := ranks[a.GetUrn()]\n\t\trankB := ranks[b.GetUrn()]\n\n\t\t// Reverse the comparison so our favourite is at the front","sourceCodeStart":77,"sourceCodeEnd":113,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/go/pkg/beam/runners/prism/internal/environments.go#L77-L113","documentation":"runEnvironment dispatches on the environment type of a pipeline stage. The default case rejects environment payloads prism does not implement (anything other than external, docker, or process environments), reporting the environment proto and its URN.","triggerScenarios":"Submitting a pipeline whose environment URN is not one of the supported docker/process/external types — e.g. legacy embedded Python/Java environments or an AnyOf environment that only ranks to an unknown type.","commonSituations":"Older SDK pipeline representations without container images, pipelines converted through tools that emit unknown environment URNs, or cross-language pipelines using environments prism lacks support for.","solutions":["Ensure the pipeline uses an external, docker, or process environment (SDK harness container image)","Regenerate the pipeline with a newer SDK that emits external/docker environments","If using legacy embedded environments, run via Flink/Spark-style portable submission with a proper harness image","Check selectAnyOfEnv ordering in environments.go and explicitly set an external environment"],"exampleFix":"// before: pipeline with no environment set (empty URN)\n// after: attach an external docker environment\nenv := pipepb.NewEnvironment(\"py-sdk\", \"beam:env:docker:v1\",\n  &pipepb.DockerPayload{ContainerImage: \"apache/beam_python3.11_sdk:latest\"}, ...)","handlingStrategy":"validation","validationCode":"urn := env.GetUrn()\nsupported := map[string]bool{\"beam:env:docker:v1\": true, \"beam:env:process:v1\": true, \"beam:env:external:v1\": true}\nif !supported[urn] {\n  return fmt.Errorf(\"environment URN %q unsupported by prism runner\", urn)\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always attach a docker or external environment with a published SDK harness image","Avoid legacy embedded environments when targeting prism"],"tags":["go","beam","prism-runner","environment","unsupported"],"backgroundTag":"method-not-implemented","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}