================
@@ -123,6 +156,107 @@ class IndexActionFactory : public 
tooling::FrontendActionFactory {
   RelationSlab::Builder Relations;
 };
 
+// Action factory that writes per-file shards (for sharded index format).
+// Each TU's index data is sharded independently — no merging across TUs.
+// Header shards are deduplicated: if a header's content hasn't changed since
+// the last time we wrote its shard, we skip writing it again.
+class ShardedIndexActionFactory : public tooling::FrontendActionFactory {
+public:
+  ShardedIndexActionFactory(BackgroundIndexStorage &Storage)
+      : Storage(Storage) {}
+
+  std::unique_ptr<FrontendAction> create() override {
+    // Snapshot the current shard versions so the callback can check staleness
+    // without holding the lock during indexing.
+    llvm::StringMap<ShardVersion> Snapshot;
+    {
+      std::lock_guard<std::mutex> Lock(ShardVersionsMu);
+      Snapshot = ShardVersions;
+    }
+
+    SymbolCollector::Options Opts;
+    Opts.CountReferences = true;
----------------
HighCommander4 wrote:

`CountReferences` should be false for a sharded index, because loading a 
sharded index goes through `FileSymbols` which [does its 
own](https://searchfox.org/llvm/rev/aff1ba103ab3006242c72af33420a3437f4ff1db/clang-tools-extra/clangd/index/FileIndex.cpp#320)
 bookkeeping of reference counts, and indeed 
[asserts](https://searchfox.org/llvm/rev/aff1ba103ab3006242c72af33420a3437f4ff1db/clang-tools-extra/clangd/index/FileIndex.cpp#307-308)
 that the incoming shards have reference counts of zero.

On the other hand, there are two options we **should** be specifying here:

  * `CollectMainFileRefs` should be set to `true`, to match the [background 
indexer](https://searchfox.org/llvm/rev/aff1ba103ab3006242c72af33420a3437f4ff1db/clang-tools-extra/clangd/index/Background.cpp#308).
 (The fact that the monolithic index doesn't use it seems like an oversight to 
me; feel free to add it there too.)
  * Like the background indexer, we should use a `FileFilter` which [skips 
files](https://searchfox.org/llvm/rev/aff1ba103ab3006242c72af33420a3437f4ff1db/clang-tools-extra/clangd/index/Background.cpp#289-307)
 whose contents haven't changed, using the `ShardVersions` machinery we already 
have.

https://github.com/llvm/llvm-project/pull/175209
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to