apache/beam · error
worker_id read from context metadata is an empty string
Error message
worker_id read from context metadata is an empty string
What it means
Error returned by MultiplexW.workerFromMetadataCtx when the gRPC worker_id metadata key is present in the context but resolves to an empty string. The multiplexer routes requests per worker id, so an empty id cannot select a worker from the pool; typically the SDK harness sent malformed metadata.
Solutions
- Ensure the SDK harness sets a non-empty worker_id gRPC metadata value on every request
- Upgrade SDK/runner to versions that consistently propagate worker id metadata
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at sdks/go/pkg/beam/runners/prism/internal/worker/worker.go:813 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/2a0d5cfdd918db6c.
Report an issue: GitHub.
Appendix: source
Thrown at sdks/go/pkg/beam/runners/prism/internal/worker/worker.go:813
mw.mu.Lock()
defer mw.mu.Unlock()
w, err := mw.workerFromMetadataCtx(ctx)
if err != nil {
mw.logger.Error(err.Error())
return nil
}
return w.MonitoringMetadata(ctx, unknownIDs)
}
func (mw *MultiplexW) workerFromMetadataCtx(ctx context.Context) (*W, error) {
mw.mu.Lock()
defer mw.mu.Unlock()
id, err := grpcx.ReadWorkerID(ctx)
if err != nil {
return nil, err
}
if id == "" {
return nil, fmt.Errorf("worker_id read from context metadata is an empty string")
}
w, ok := mw.pool[id]
if !ok {
return nil, fmt.Errorf("worker_id: '%s' read from context metadata but not registered in worker pool", id)
}
return w, nil
}
func (mw *MultiplexW) delete(w *W) {
mw.mu.Lock()
defer mw.mu.Unlock()
delete(mw.pool, w.ID)
}
// WaitForCleanUp waits until all resources relevant to the job are cleaned up.
func (mw *MultiplexW) WaitForCleanUp(id string) {
mw.mu.Lock()
wg := mw.wg[id]View on GitHub (pinned to 12126d8942)