diff --git a/clang-tools-extra/clangd/index/remote/Client.cpp b/clang-tools-extra/clangd/index/remote/Client.cpp --- a/clang-tools-extra/clangd/index/remote/Client.cpp +++ b/clang-tools-extra/clangd/index/remote/Client.cpp @@ -55,6 +55,8 @@ llvm::BumpPtrAllocator Arena; llvm::UniqueStringSaver Strings(Arena); ReplyT Reply; + unsigned Received = 0; + unsigned FailedToParse = 0; while (Reader->Read(&Reply)) { if (!Reply.has_stream_result()) { FinalResult = Reply.final_result(); @@ -64,11 +66,15 @@ fromProtobuf(Reply.stream_result(), &Strings, ProjectRoot); if (!Response) { elog("Received invalid {0}", ReplyT::descriptor()->name()); + ++FailedToParse; continue; } Callback(*Response); + ++Received; } - SPAN_ATTACH(Tracer, "status", Reader->Finish().ok()); + SPAN_ATTACH(Tracer, "Status", Reader->Finish().ok()); + SPAN_ATTACH(Tracer, "Received", Received); + SPAN_ATTACH(Tracer, "Failed to parse", FailedToParse); return FinalResult; } diff --git a/clang-tools-extra/clangd/index/remote/server/Server.cpp b/clang-tools-extra/clangd/index/remote/server/Server.cpp --- a/clang-tools-extra/clangd/index/remote/server/Server.cpp +++ b/clang-tools-extra/clangd/index/remote/server/Server.cpp @@ -9,6 +9,8 @@ #include "index/Index.h" #include "index/Serialization.h" #include "index/remote/marshalling/Marshalling.h" +#include "support/Logger.h" +#include "support/Trace.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Path.h" @@ -57,21 +59,32 @@ grpc::Status Lookup(grpc::ServerContext *Context, const LookupRequest *Request, grpc::ServerWriter *Reply) override { + trace::Span Tracer("Remote index server Lookup"); + SPAN_ATTACH(Tracer, "LookupRequest", Request->ShortDebugString()); clangd::LookupRequest Req; for (const auto &ID : Request->ids()) { auto SID = SymbolID::fromStr(StringRef(ID)); - if (!SID) + if (!SID) { + elog("Lookup request cancelled: invalid SymbolID {1}", SID.takeError()); return grpc::Status::CANCELLED; + } Req.IDs.insert(*SID); } + unsigned Sent = 0; + unsigned FailedToSend = 0; Index->lookup(Req, [&](const clangd::Symbol &Sym) { auto SerializedSymbol = toProtobuf(Sym, IndexedProjectRoot); - if (!SerializedSymbol) + if (!SerializedSymbol) { + ++FailedToSend; return; + } LookupReply NextMessage; *NextMessage.mutable_stream_result() = *SerializedSymbol; Reply->Write(NextMessage); + ++Sent; }); + SPAN_ATTACH(Tracer, "Sent", Sent); + SPAN_ATTACH(Tracer, "Failed to send", FailedToSend); LookupReply LastMessage; LastMessage.set_final_result(true); Reply->Write(LastMessage); @@ -81,15 +94,24 @@ grpc::Status FuzzyFind(grpc::ServerContext *Context, const FuzzyFindRequest *Request, grpc::ServerWriter *Reply) override { + trace::Span Tracer("Remote index server FuzzyFind"); + SPAN_ATTACH(Tracer, "FuzzyFindRequest", Request->ShortDebugString()); const auto Req = fromProtobuf(Request, IndexedProjectRoot); + unsigned Sent = 0; + unsigned FailedToSend = 0; bool HasMore = Index->fuzzyFind(Req, [&](const clangd::Symbol &Sym) { auto SerializedSymbol = toProtobuf(Sym, IndexedProjectRoot); - if (!SerializedSymbol) + if (!SerializedSymbol) { + ++FailedToSend; return; + } FuzzyFindReply NextMessage; *NextMessage.mutable_stream_result() = *SerializedSymbol; Reply->Write(NextMessage); + ++Sent; }); + SPAN_ATTACH(Tracer, "Sent", Sent); + SPAN_ATTACH(Tracer, "Failed to send", FailedToSend); FuzzyFindReply LastMessage; LastMessage.set_final_result(HasMore); Reply->Write(LastMessage); @@ -98,21 +120,32 @@ grpc::Status Refs(grpc::ServerContext *Context, const RefsRequest *Request, grpc::ServerWriter *Reply) override { + trace::Span Tracer("Remote index server Refs"); + SPAN_ATTACH(Tracer, "RefsRequest", Request->ShortDebugString()); clangd::RefsRequest Req; for (const auto &ID : Request->ids()) { auto SID = SymbolID::fromStr(StringRef(ID)); - if (!SID) + if (!SID) { + elog("Refs request cancelled: invalid SymbolID {1}", SID.takeError()); return grpc::Status::CANCELLED; + } Req.IDs.insert(*SID); } + unsigned Sent = 0; + unsigned FailedToSend = 0; bool HasMore = Index->refs(Req, [&](const clangd::Ref &Reference) { auto SerializedRef = toProtobuf(Reference, IndexedProjectRoot); - if (!SerializedRef) + if (!SerializedRef) { + ++FailedToSend; return; + } RefsReply NextMessage; *NextMessage.mutable_stream_result() = *SerializedRef; Reply->Write(NextMessage); + ++Sent; }); + SPAN_ATTACH(Tracer, "Sent", Sent); + SPAN_ATTACH(Tracer, "Failed to send", FailedToSend); RefsReply LastMessage; LastMessage.set_final_result(HasMore); Reply->Write(LastMessage);