kadircet created this revision. kadircet added a reviewer: kbobyrev. Herald added subscribers: usaxena95, arphaman. kadircet requested review of this revision. Herald added subscribers: cfe-commits, MaskRay, ilya-biryukov. Herald added a project: clang-tools-extra.
Currently client was setting the HasMore to true iff stream said so. Hence if we had a broken stream for whatever reason (e.g. hitting deadline for a huge response), HasMore would be false, which is semantically incorrect (e.g. will throw rename off). Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D101915 Files: clang-tools-extra/clangd/index/remote/Client.cpp Index: clang-tools-extra/clangd/index/remote/Client.cpp =================================================================== --- clang-tools-extra/clangd/index/remote/Client.cpp +++ clang-tools-extra/clangd/index/remote/Client.cpp @@ -64,7 +64,10 @@ StreamingCall<RequestT, ReplyT> RPCCall, CallbackT Callback) const { updateConnectionStatus(); - bool FinalResult = false; + // We initialize to true because stream might be broken before we see the + // final message. In such a case there are actually more results on the + // stream, but we couldn't get to them. + bool HasMore = true; trace::Span Tracer(RequestT::descriptor()->name()); const auto RPCRequest = ProtobufMarshaller->toProtobuf(Request); SPAN_ATTACH(Tracer, "Request", RPCRequest.DebugString()); @@ -82,7 +85,7 @@ unsigned FailedToParse = 0; while (Reader->Read(&Reply)) { if (!Reply.has_stream_result()) { - FinalResult = Reply.final_result().has_more(); + HasMore = Reply.final_result().has_more(); continue; } auto Response = ProtobufMarshaller->fromProtobuf(Reply.stream_result()); @@ -105,7 +108,7 @@ SPAN_ATTACH(Tracer, "Successful", Successful); SPAN_ATTACH(Tracer, "Failed to parse", FailedToParse); updateConnectionStatus(); - return FinalResult; + return HasMore; } public:
Index: clang-tools-extra/clangd/index/remote/Client.cpp =================================================================== --- clang-tools-extra/clangd/index/remote/Client.cpp +++ clang-tools-extra/clangd/index/remote/Client.cpp @@ -64,7 +64,10 @@ StreamingCall<RequestT, ReplyT> RPCCall, CallbackT Callback) const { updateConnectionStatus(); - bool FinalResult = false; + // We initialize to true because stream might be broken before we see the + // final message. In such a case there are actually more results on the + // stream, but we couldn't get to them. + bool HasMore = true; trace::Span Tracer(RequestT::descriptor()->name()); const auto RPCRequest = ProtobufMarshaller->toProtobuf(Request); SPAN_ATTACH(Tracer, "Request", RPCRequest.DebugString()); @@ -82,7 +85,7 @@ unsigned FailedToParse = 0; while (Reader->Read(&Reply)) { if (!Reply.has_stream_result()) { - FinalResult = Reply.final_result().has_more(); + HasMore = Reply.final_result().has_more(); continue; } auto Response = ProtobufMarshaller->fromProtobuf(Reply.stream_result()); @@ -105,7 +108,7 @@ SPAN_ATTACH(Tracer, "Successful", Successful); SPAN_ATTACH(Tracer, "Failed to parse", FailedToParse); updateConnectionStatus(); - return FinalResult; + return HasMore; } public:
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits