{"record":{"id":"b3643d12d083f722","repo":"Tencent/WeKnora","slug":"grpc-readstream-recv-failed-w","errorCode":null,"errorMessage":"gRPC ReadStream recv failed: %w","messagePattern":"gRPC ReadStream recv failed: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/infrastructure/docparser/grpc_parser.go","lineNumber":168,"sourceCode":"// followed by one frame per image. Errors are returned verbatim so the caller\n// can inspect the gRPC status code (e.g. Unimplemented) for fallback.\nfunc (p *GRPCDocumentReader) readStream(\n\tctx context.Context, client proto.DocReaderClient, protoReq *proto.ReadRequest,\n) (*types.ReadResult, error) {\n\tstream, err := client.ReadStream(ctx, protoReq)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"gRPC ReadStream failed: %w\", err)\n\t}\n\n\tresult := &types.ReadResult{}\n\tgotMeta := false\n\tfor {\n\t\tframe, recvErr := stream.Recv()\n\t\tif recvErr == io.EOF {\n\t\t\tbreak\n\t\t}\n\t\tif recvErr != nil {\n\t\t\treturn nil, fmt.Errorf(\"gRPC ReadStream recv failed: %w\", recvErr)\n\t\t}\n\n\t\tif meta := frame.GetMeta(); meta != nil {\n\t\t\tgotMeta = true\n\t\t\tresult.MarkdownContent = meta.GetMarkdownContent()\n\t\t\tresult.ImageDirPath = meta.GetImageDirPath()\n\t\t\tresult.Metadata = meta.GetMetadata()\n\t\t\tresult.Error = meta.GetError()\n\t\t\tif n := meta.GetImageCount(); n > 0 {\n\t\t\t\tresult.ImageRefs = make([]types.ImageRef, 0, n)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif img := frame.GetImage(); img != nil {\n\t\t\tresult.ImageRefs = append(result.ImageRefs, types.ImageRef{\n\t\t\t\tFilename:    img.GetFilename(),\n\t\t\t\tOriginalRef: img.GetOriginalRef(),","sourceCodeStart":150,"sourceCodeEnd":186,"githubUrl":"https://github.com/Tencent/WeKnora/blob/988cbb03305e055d8ebb7d46d9ac6cc0803cd074/internal/infrastructure/docparser/grpc_parser.go#L150-L186","documentation":"stream.Recv on the docreader ReadStream failed mid-stream in readStream (anything other than io.EOF): the connection dropped or the server errored after sending some frames, so the parse result is incomplete.","triggerScenarios":"Thrown at internal/infrastructure/docparser/grpc_parser.go:168 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry the read; mid-stream drops are often transient","Check docreader server logs for the frame that failed","Investigate network stability if it recurs on large documents"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"988cbb03305e055d8ebb7d46d9ac6cc0803cd074","analyzedAt":"2026-09-02T14:41:08.344Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}