{"record":{"id":"beb4e9c63ac2f8bf","repo":"apache/beam","slug":"bundle-v-v-failed-v","errorCode":null,"errorMessage":"bundle %v %v failed:%v","messagePattern":"bundle (.+?) (.+?) failed:(.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"sdks/go/pkg/beam/runners/prism/internal/worker/bundle.go","lineNumber":145,"sourceCode":"\treturn b.bundleErr\n}\n\nfunc (b *B) Respond(resp *fnpb.InstructionResponse) {\n\tif b.responded {\n\t\tslog.Warn(\"additional bundle response\", \"bundle\", b, \"resp\", resp)\n\t\treturn\n\t}\n\tb.responded = true\n\tif b.DataAbort != nil {\n\t\t// Defer closing DataAbort to guarantee that the abort signal is sent\n\t\t// when this function returns. This ensures it is always executed after\n\t\t// any error has been safely written and synchronized via b.SetErr() or,\n\t\t// in the happy path, after the successful response is sent to b.Resp.\n\t\tdefer close(b.DataAbort)\n\t}\n\tif resp.GetError() != \"\" {\n\t\tslog.Error(\"Prism received bundle error from worker response\", \"bundle\", resp.GetInstructionId())\n\t\tb.SetErr(fmt.Errorf(\"bundle %v %v failed:%v\", resp.GetInstructionId(), b.PBDID, resp.GetError()))\n\t\tclose(b.Resp)\n\t\treturn\n\t}\n\tb.Resp <- resp.GetProcessBundle()\n}\n\n// ProcessOn executes the given bundle on the given W.\n// The returned channel is closed once all expected data is returned.\n//\n// Assumes the bundle is initialized (all maps are non-nil, and data waitgroup is set, response channel initialized)\n// Assumes the bundle descriptor is already registered with the W.\n//\n// While this method mostly manipulates a W, putting it on a B avoids mixing the workers\n// public GRPC APIs up with local calls.\nfunc (b *B) ProcessOn(ctx context.Context, wk *W) <-chan struct{} {\n\twk.mu.Lock()\n\twk.activeInstructions[b.InstID] = b\n\twk.mu.Unlock()","sourceCodeStart":127,"sourceCodeEnd":163,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/go/pkg/beam/runners/prism/internal/worker/bundle.go#L127-L163","documentation":"Logged (slog.Error) by B.Respond in the Prism worker when the SDK's bundle instruction response carries a non-empty error string. The bundle's error is recorded via SetErr so it propagates to anyone awaiting the bundle, and the log line records the failing bundle and response for diagnosis. The input at fault is the SDK-side bundle execution failure reported in resp.GetError().","triggerScenarios":"Thrown at sdks/go/pkg/beam/runners/prism/internal/worker/bundle.go:145 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Inspect the logged SDK error text to find the user-code failure inside the bundle","Fix the failing DoFn logic or data causing the SDK-side error","If transient (e.g. network to data store), re-run the pipeline to retry the bundle"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}