[PATCH] D87450: [clangd] Implement hot index reloading for clangd-index-server
Kadir Cetinkaya via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Sep 15 14:25:06 PDT 2020
kadircet added a comment.
oops, looks like i forgot to hit submit in the morning..
================
Comment at: clang-tools-extra/clangd/index/remote/server/Server.cpp:228
+ auto Status = FS->status(IndexPath);
+ if (!Status || Status->equivalent(LastStatus))
+ return;
----------------
i beleive `equivalent` checks for inode number equivalence (at least on linux, using realfilesystem). That's not guranteed to change when you overwrite/modify a file.
Sorry if it felt like i meant this, but I was literally suggesting to use `!=` instead of `<=` when comparing modifcation time, and also incorporating size into the check.
Also please let me know if there's something i am missing with the `equivalent`.
It would be also nice to have some tests, as we are starting to add non-trivial functionality to server but not blocking for this patch. (i suppose it would've catched the equivalent problem)
================
Comment at: clang-tools-extra/clangd/index/remote/server/Server.cpp:234
+ LastStatus.getLastModificationTime(), Status->getLastModificationTime());
+ std::unique_ptr<clang::clangd::SymbolIndex> NewIndex = loadIndex(IndexPath);
+ if (!NewIndex) {
----------------
i think we should update `LastStatus` here, as we are going to fail loading the index unless the file changes. so there's no need to retry loading the index if the file hasn't changed.
================
Comment at: clang-tools-extra/clangd/index/remote/server/Server.cpp:236
+ if (!NewIndex) {
+ vlog("Failed to load new index. Old index will be served.");
+ return;
----------------
i believe, this should be an `elog`.
================
Comment at: clang-tools-extra/clangd/index/remote/server/Server.cpp:240
+ Index.reset(std::move(NewIndex));
+ log("New index version loaded. Last modification time: {0}.",
+ Status->getLastModificationTime());
----------------
nit: maybe also print the size.
================
Comment at: clang-tools-extra/clangd/index/remote/server/Server.cpp:318
+ if (!Status) {
+ elog("File {0} does not exist.", IndexPath);
+ return Status.getError().value();
----------------
nit: drop `File`
================
Comment at: clang-tools-extra/clangd/index/remote/server/Server.cpp:335
+ std::this_thread::sleep_for(RefreshFrequency);
+ hotReload(*Index, llvm::StringRef(IndexPath), LastStatus, FS);
+ }
----------------
nit: i would first call `hotReload` and then sleep to get rid of one extra reload of the index when we are shutting down.
================
Comment at: clang-tools-extra/clangd/index/remote/server/Server.cpp:342
+ HotReloadThread.join();
}
----------------
nit: `return 0;` ?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D87450/new/
https://reviews.llvm.org/D87450
More information about the cfe-commits
mailing list