{"record":{"id":"2a0d5cfdd918db6c","repo":"apache/beam","slug":"worker-id-read-from-context-metadata-is-an-empty-string","errorCode":null,"errorMessage":"worker_id read from context metadata is an empty string","messagePattern":"worker_id read from context metadata is an empty string","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"sdks/go/pkg/beam/runners/prism/internal/worker/worker.go","lineNumber":813,"sourceCode":"\tmw.mu.Lock()\n\tdefer mw.mu.Unlock()\n\tw, err := mw.workerFromMetadataCtx(ctx)\n\tif err != nil {\n\t\tmw.logger.Error(err.Error())\n\t\treturn nil\n\t}\n\treturn w.MonitoringMetadata(ctx, unknownIDs)\n}\n\nfunc (mw *MultiplexW) workerFromMetadataCtx(ctx context.Context) (*W, error) {\n\tmw.mu.Lock()\n\tdefer mw.mu.Unlock()\n\tid, err := grpcx.ReadWorkerID(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif id == \"\" {\n\t\treturn nil, fmt.Errorf(\"worker_id read from context metadata is an empty string\")\n\t}\n\tw, ok := mw.pool[id]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"worker_id: '%s' read from context metadata but not registered in worker pool\", id)\n\t}\n\treturn w, nil\n}\n\nfunc (mw *MultiplexW) delete(w *W) {\n\tmw.mu.Lock()\n\tdefer mw.mu.Unlock()\n\tdelete(mw.pool, w.ID)\n}\n\n// WaitForCleanUp waits until all resources relevant to the job are cleaned up.\nfunc (mw *MultiplexW) WaitForCleanUp(id string) {\n\tmw.mu.Lock()\n\twg := mw.wg[id]","sourceCodeStart":795,"sourceCodeEnd":831,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/go/pkg/beam/runners/prism/internal/worker/worker.go#L795-L831","documentation":"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.","triggerScenarios":"Thrown at sdks/go/pkg/beam/runners/prism/internal/worker/worker.go:813 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","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"],"exampleFix":null,"handlingStrategy":"validation","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"}