Emit replication status events after initial full sync

When gerrit.replicateOnStartup configuration option is set to 'true',
replication plugin will schedule delayed jobs to synchronize all
repositories with replicas. But it will not emit any event about
operation status, this can lead to a situation where there is no
information about repositories not being synchronized.

Imagine a situation when some inactive repositories are synchronized to
dedicated replica server. Then when such replica server will go down we
won't notice since all failed replication events will not be published.

This patch ensures that replication status events are sent out on
initial synchronization.

Change-Id: I57ce984b9fde44927bb649f0672e9278065a8847
Signed-off-by: Dariusz Luksza <dariusz@luksza.org>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/OnStartStop.java b/src/main/java/com/googlesource/gerrit/plugins/replication/OnStartStop.java
index 5b737f1..a5df0a7 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/OnStartStop.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/OnStartStop.java
@@ -15,10 +15,15 @@
 package com.googlesource.gerrit.plugins.replication;
 
 import com.google.common.util.concurrent.Atomics;
+import com.google.gerrit.common.EventDispatcher;
 import com.google.gerrit.extensions.events.LifecycleListener;
 import com.google.gerrit.extensions.systemstatus.ServerInformation;
+import com.google.gerrit.reviewdb.server.ReviewDb;
+import com.google.gwtorm.server.SchemaFactory;
 import com.google.inject.Inject;
 
+import com.googlesource.gerrit.plugins.replication.PushResultProcessing.GitUpdateProcessing;
+
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
@@ -29,17 +34,23 @@
   private final PushAll.Factory pushAll;
   private final ReplicationQueue queue;
   private final ReplicationConfig config;
+  private final SchemaFactory<ReviewDb> database;
+  private final EventDispatcher eventDispatcher;
 
   @Inject
   OnStartStop(
       ServerInformation srvInfo,
       PushAll.Factory pushAll,
       ReplicationQueue queue,
-      ReplicationConfig config) {
+      ReplicationConfig config,
+      EventDispatcher eventDispatcher,
+      SchemaFactory<ReviewDb> database) {
     this.srvInfo = srvInfo;
     this.pushAll = pushAll;
     this.queue = queue;
     this.config = config;
+    this.eventDispatcher = eventDispatcher;
+    this.database = database;
     this.pushAllFuture = Atomics.newReference();
   }
 
@@ -49,7 +60,9 @@
 
     if (srvInfo.getState() == ServerInformation.State.STARTUP
         && config.isReplicateAllOnPluginStart()) {
-      ReplicationState state = new ReplicationState();
+      ReplicationState state =
+          new ReplicationState(new GitUpdateProcessing(eventDispatcher,
+              database));
       pushAllFuture.set(pushAll.create(
           null, ReplicationFilter.all(), state).schedule(30, TimeUnit.SECONDS));
     }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/PushResultProcessing.java b/src/main/java/com/googlesource/gerrit/plugins/replication/PushResultProcessing.java
index 762f069..0f8cc9e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/PushResultProcessing.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/PushResultProcessing.java
@@ -211,19 +211,4 @@
       return change;
     }
   }
-
-  public static class NoopProcessing extends PushResultProcessing {
-    @Override
-    void onRefReplicatedToOneNode(String project, String ref, URIish uri,
-        RefPushResult status) {
-    }
-
-    @Override
-    void onRefReplicatedToAllNodes(String project, String ref, int nodesCount) {
-    }
-
-    @Override
-    void onAllRefsReplicatedToAllNodes(int totalPushTasksCount) {
-    }
-  }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationState.java b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationState.java
index 9632d5f..c851db6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationState.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationState.java
@@ -17,8 +17,6 @@
 import com.google.common.collect.HashBasedTable;
 import com.google.common.collect.Table;
 
-import com.googlesource.gerrit.plugins.replication.PushResultProcessing.NoopProcessing;
-
 import org.eclipse.jgit.transport.URIish;
 
 import java.util.concurrent.CountDownLatch;
@@ -51,10 +49,6 @@
   private int totalPushTasksCount;
   private int finishedPushTasksCount;
 
-  public ReplicationState() {
-    this(new NoopProcessing());
-  }
-
   public ReplicationState(PushResultProcessing processing) {
     pushResultProcessing = processing;
     statusByProjectRef = HashBasedTable.create();