Use `ProjectCache.onCreateProject` after project creation

Change I05243b1065d consolidateid all logic about project cache by
adding negative caching invalidation to `ProjectCacheImpl`. This means
that explicit project cache eviction is not needed anymore. Use only
`ProjectCache.onCreateProject` after project creation.

Bug: Issue 308448333
Change-Id: I3de9b7503a0284ccf96f31696421284c6f82f05a
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/ProjectInitializationAction.java b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/ProjectInitializationAction.java
index 9f48441..9afae71 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/ProjectInitializationAction.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/ProjectInitializationAction.java
@@ -140,7 +140,7 @@
   }
 
   public boolean initProject(String gitRepositoryName)
-      throws AuthException, PermissionBackendException {
+      throws AuthException, PermissionBackendException, IOException {
     if (initProject(gitRepositoryName, true)) {
       repLog.info("Init project API from {}", gitRepositoryName);
       return true;
@@ -166,9 +166,6 @@
         input.getRevisionsData(),
         input.getLabel(),
         input.getEventCreatedOn());
-    // XXX: The cache eviction is needed temporarily until Issue 308448333 won't be fixed.
-    // Once the fix will be in place, `onCreateProject` will take care of evicting the cache.
-    projectCache.evict(Project.nameKey(projectName));
     projectCache.onCreateProject(Project.nameKey(projectName));
     repLog.info(
         "Init project API from {} for {}:{} - {}",
@@ -180,7 +177,7 @@
   }
 
   private boolean initProject(String gitRepositoryName, boolean needsProjectReindexing)
-      throws AuthException, PermissionBackendException {
+      throws AuthException, PermissionBackendException, IOException {
     // When triggered internally(for example by consuming stream events) user is not provided
     // and internal user is returned. Project creation should be always allowed for internal user.
     if (!userProvider.get().isInternalUser()) {
@@ -195,7 +192,7 @@
     Project.NameKey projectNameKey = Project.NameKey.parse(gitRepositoryName);
     if (localFS.createProject(projectNameKey, RefNames.HEAD)) {
       if (needsProjectReindexing) {
-        projectCache.evictAndReindex(projectNameKey);
+        projectCache.onCreateProject(projectNameKey);
       }
       return true;
     }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/event/EventsBrokerMessageConsumer.java b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/event/EventsBrokerMessageConsumer.java
index a9b0a5e..a9b4945 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/event/EventsBrokerMessageConsumer.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/event/EventsBrokerMessageConsumer.java
@@ -28,6 +28,7 @@
 import com.google.inject.Inject;
 import com.google.inject.name.Named;
 import com.googlesource.gerrit.plugins.replication.pull.ShutdownState;
+import java.io.IOException;
 import java.util.function.Consumer;
 
 public class EventsBrokerMessageConsumer implements Consumer<Event>, LifecycleListener {
@@ -57,7 +58,7 @@
     try {
       eventListener.fetchRefsForEvent(event);
       if (shutdownState.isShuttingDown()) stop();
-    } catch (AuthException | PermissionBackendException e) {
+    } catch (AuthException | PermissionBackendException | IOException e) {
       throw new EventRejectedException(event, e);
     }
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/event/StreamEventListener.java b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/event/StreamEventListener.java
index b14d4a1..4c621ac 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/event/StreamEventListener.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/event/StreamEventListener.java
@@ -95,7 +95,7 @@
   public void onEvent(Event event) {
     try {
       fetchRefsForEvent(event);
-    } catch (AuthException | PermissionBackendException e) {
+    } catch (AuthException | PermissionBackendException | IOException e) {
       logger.atSevere().withCause(e).log(
           "This is the event handler of Gerrit's event-bus. It isn't"
               + "supposed to throw any exception, otherwise the other handlers "
@@ -103,7 +103,8 @@
     }
   }
 
-  public void fetchRefsForEvent(Event event) throws AuthException, PermissionBackendException {
+  public void fetchRefsForEvent(Event event)
+      throws AuthException, PermissionBackendException, IOException {
     if (instanceId.equals(event.instanceId) || !shouldReplicateProject(event)) {
       return;
     }
@@ -153,7 +154,7 @@
             projectCreatedEvent.instanceId,
             projectCreatedEvent.getProjectNameKey(),
             metrics);
-      } catch (AuthException | PermissionBackendException e) {
+      } catch (AuthException | PermissionBackendException | IOException e) {
         logger.atSevere().withCause(e).log(
             "Cannot initialise project:%s", projectCreatedEvent.projectName);
         throw e;