Merge "Fix AllProjectsIndexer to avoid duplicate reindex work" into stable-3.2
diff --git a/java/com/google/gerrit/server/index/project/AllProjectsIndexer.java b/java/com/google/gerrit/server/index/project/AllProjectsIndexer.java
index cc7dca3..0e4b688 100644
--- a/java/com/google/gerrit/server/index/project/AllProjectsIndexer.java
+++ b/java/com/google/gerrit/server/index/project/AllProjectsIndexer.java
@@ -78,7 +78,7 @@
           executor.submit(
               () -> {
                 try {
-                  projectCache.evictAndReindex(name);
+                  projectCache.evict(name);
                   index.replace(
                       projectCache.get(name).orElseThrow(illegalState(name)).toProjectData());
                   verboseWriter.println("Reindexed " + desc);
diff --git a/java/com/google/gerrit/server/project/ProjectCache.java b/java/com/google/gerrit/server/project/ProjectCache.java
index 6187af5..6a2ae50 100644
--- a/java/com/google/gerrit/server/project/ProjectCache.java
+++ b/java/com/google/gerrit/server/project/ProjectCache.java
@@ -59,6 +59,13 @@
   Optional<ProjectState> get(@Nullable Project.NameKey projectName) throws StorageException;
 
   /**
+   * Invalidate the cached information about the given project.
+   *
+   * @param p the NameKey of the project that is being evicted
+   */
+  void evict(Project.NameKey p);
+
+  /**
    * Invalidate the cached information about the given project, and triggers reindexing for it
    *
    * @param p project that is being evicted
diff --git a/java/com/google/gerrit/server/project/ProjectCacheImpl.java b/java/com/google/gerrit/server/project/ProjectCacheImpl.java
index 4ab5555..1523b1b 100644
--- a/java/com/google/gerrit/server/project/ProjectCacheImpl.java
+++ b/java/com/google/gerrit/server/project/ProjectCacheImpl.java
@@ -159,16 +159,21 @@
   }
 
   @Override
+  public void evict(Project.NameKey p) {
+    if (p != null) {
+      logger.atFine().log("Evict project '%s'", p.get());
+      byName.invalidate(p.get());
+    }
+  }
+
+  @Override
   public void evictAndReindex(Project p) {
     evictAndReindex(p.getNameKey());
   }
 
   @Override
   public void evictAndReindex(Project.NameKey p) {
-    if (p != null) {
-      logger.atFine().log("Evict project '%s'", p.get());
-      byName.invalidate(p.get());
-    }
+    evict(p);
     indexer.get().index(p);
   }