{"record":{"id":"8c2dbb7be5638573","repo":"apache/beam","slug":"can-t-get-data-to-generate","errorCode":null,"errorMessage":"can't get data to generate","messagePattern":"can't get data to generate","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"sdks/go/pkg/beam/runners/vet/vet.go","lineNumber":89,"sourceCode":"\t\terr := errors.Errorf(\"pipeline is not performant, see diagnostic summary:\\n%s\\n%s\", e.d.String(), string(e.Bytes()))\n\t\terr = errors.WithContext(err, \"validating pipeline with vet runner\")\n\t\treturn nil, errors.SetTopLevelMsg(err, \"pipeline is not performant\")\n\t}\n\t// Pipeline nas no further tasks.\n\treturn nil, nil\n}\n\n// Evaluate returns an object that can generate necessary shims and inits.\nfunc Evaluate(_ context.Context, p *beam.Pipeline) (*Eval, error) {\n\t// Disable the resolver so we can see functions that are that are already registered.\n\tr := runtime.Resolver\n\truntime.Resolver = disabledResolver(false)\n\t// Reinstate the resolver when we're through.\n\tdefer func() { runtime.Resolver = r }()\n\n\tedges, _, err := p.Build()\n\tif err != nil {\n\t\treturn nil, errors.New(\"can't get data to generate\")\n\t}\n\n\te := newEval()\n\n\te.diag(\"/**\\n\")\n\terr = e.extractFromMultiEdges(edges)\n\treturn e, err\n}\n\nfunc newEval() *Eval {\n\treturn &Eval{\n\t\tfunctions:   make(map[string]*funcx.Fn),\n\t\ttypes:       make(map[string]reflect.Type),\n\t\tfuncs:       make(map[string]reflect.Type),\n\t\temits:       make(map[string]reflect.Type),\n\t\titers:       make(map[string]reflect.Type),\n\t\timports:     make(map[string]struct{}),\n\t\tallExported: true,","sourceCodeStart":71,"sourceCodeEnd":107,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/go/pkg/beam/runners/vet/vet.go#L71-L107","documentation":"The Beam Go 'vet' runner analyzes a pipeline to check DoFn correctness. Like the dot runner, it calls p.Build() and, on any build failure, replaces the real cause with the generic 'can't get data to generate'. This means the pipeline graph could not be constructed, so the vet analysis cannot proceed.","triggerScenarios":"Running the vet runner against a pipeline whose p.Build() fails — invalid or un-expandable transforms, panicking DoFn constructors, malformed cross-language transforms.","commonSituations":"Vetting pipelines during CI that contain transforms Beam cannot expand; misconfigured side inputs; code that compiles but fails at pipeline-construction time.","solutions":["Run the pipeline under the direct runner first to get the detailed Build() error, since vet discards the cause","Fix the offending transform/DoFn flagged by the direct-run error","Keep the resolver/disabledResolver path in mind — avoid transforms requiring runtime type resolution when vetting","Update Beam in case the build failure is a known bug"],"exampleFix":"// before\nedges, _, err := p.Build()\nif err != nil {\n\treturn nil, errors.New(\"can't get data to generate\")\n}\n// after\nedges, _, err := p.Build()\nif err != nil {\n\treturn nil, fmt.Errorf(\"can't get data to generate: %w\", err)\n}","handlingStrategy":"validation","validationCode":"edges, _, err := p.Build()\nif err != nil {\n\treturn fmt.Errorf(\"vet: pipeline does not build: %w\", err)\n}","typeGuard":null,"tryCatchPattern":"if _, err := vet.Evaluate(ctx, p, opts); err != nil {\n\tif strings.Contains(err.Error(), \"can't get data to generate\") {\n\t\t// run direct runner to obtain the detailed build error\n\t}\n\treturn err\n}","preventionTips":["Ensure the pipeline builds under the direct runner before vetting","Avoid transforms requiring runtime type resolution during vet","Keep DoFn constructors panic-free at graph-construction time"],"tags":["go","beam","vet-runner","pipeline-graph"],"backgroundTag":"internal-invariant-violation","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}