apache/beam · error

progress[ ] error from SDK

Error message

progress[%v] error from SDK: %v

What it means

Error produced in B.Progress when a ProcessBundleProgress request sent to the SDK worker returns a response with a non-empty error. The runner asks the SDK for bundle progress metrics; the SDK-side failure is propagated as an error keyed to the bundle instruction ID, aborting progress reporting for that bundle.

Solutions

  1. Inspect SDK worker logs for the underlying failure during progress reporting
  2. Fix user DoFn errors that poison bundle progress reporting
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at sdks/go/pkg/beam/runners/prism/internal/worker/bundle.go:300 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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

Appendix: source

Thrown at sdks/go/pkg/beam/runners/prism/internal/worker/bundle.go:300

			FinalizeBundle: &fnpb.FinalizeBundleRequest{
				InstructionId: b.InstID,
			},
		},
	})
	return resp.GetFinalizeBundle(), nil
}

// Progress sends a progress request for the given bundle to the passed in worker, blocking on the response.
func (b *B) Progress(ctx context.Context, wk *W) (*fnpb.ProcessBundleProgressResponse, error) {
	resp := wk.sendInstruction(ctx, &fnpb.InstructionRequest{
		Request: &fnpb.InstructionRequest_ProcessBundleProgress{
			ProcessBundleProgress: &fnpb.ProcessBundleProgressRequest{
				InstructionId: b.InstID,
			},
		},
	})
	if resp.GetError() != "" {
		return nil, fmt.Errorf("progress[%v] error from SDK: %v", b.InstID, resp.GetError())
	}
	return resp.GetProcessBundleProgress(), nil
}

// Split sends a split request for the given bundle to the passed in worker, blocking on the response.
func (b *B) Split(ctx context.Context, wk *W, fraction float64, allowedSplits []int64) (*fnpb.ProcessBundleSplitResponse, error) {
	resp := wk.sendInstruction(ctx, &fnpb.InstructionRequest{
		Request: &fnpb.InstructionRequest_ProcessBundleSplit{
			ProcessBundleSplit: &fnpb.ProcessBundleSplitRequest{
				InstructionId: b.InstID,
				DesiredSplits: map[string]*fnpb.ProcessBundleSplitRequest_DesiredSplit{
					b.InputTransformID: {
						FractionOfRemainder:    fraction,
						AllowedSplitPoints:     allowedSplits,
						EstimatedInputElements: int64(b.EstimatedInputElements),
					},
				},
			},

View on GitHub (pinned to 12126d8942)