diff options
author | Dariusz Luksza <dariusz@luksza.org> | 2015-03-03 09:19:46 +0100 |
---|---|---|
committer | Dariusz Ćuksza <dariusz.luksza@gmail.com> | 2015-05-15 13:29:06 +0000 |
commit | 53ee1b8ec4de5de4d710233eda2230b5380f1390 (patch) | |
tree | 1f2227352b35c3acde92082f932a3964425104c1 | |
parent | 604b3396a72461c4554248999b3dadcf620e82a9 (diff) |
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>
3 files changed, 15 insertions, 23 deletions
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 @@ class OnStartStop implements LifecycleListener { 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 @@ class OnStartStop implements LifecycleListener { 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 @@ public abstract class PushResultProcessing { 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 @@ package com.googlesource.gerrit.plugins.replication; 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 @@ public class ReplicationState { private int totalPushTasksCount; private int finishedPushTasksCount; - public ReplicationState() { - this(new NoopProcessing()); - } - public ReplicationState(PushResultProcessing processing) { pushResultProcessing = processing; statusByProjectRef = HashBasedTable.create(); |