Merge "Fix cases where replication is waiting indefinitely"
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java b/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
index 6117abf..f2b362e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
@@ -591,7 +591,7 @@
if (inFlightOp != null) {
return RunwayStatus.denied(inFlightOp.getId());
}
- op.setRefs(replicationTasksStorage.get().start(op));
+ op.notifyNotAttempted(op.setStartedRefs(replicationTasksStorage.get().start(op)));
inFlight.put(op.getURI(), op);
}
return RunwayStatus.allowed();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java b/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java
index ebe169c..404d4bd 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java
@@ -52,6 +52,7 @@
import com.jcraft.jsch.JSchException;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
@@ -301,10 +302,26 @@
}
}
- void setRefs(Set<String> refs) {
+ Set<String> setStartedRefs(Set<String> startedRefs) {
+ Set<String> notAttemptedRefs = Sets.difference(delta, startedRefs);
pushAllRefs = false;
delta.clear();
- addRefs(refs);
+ addRefs(startedRefs);
+ return notAttemptedRefs;
+ }
+
+ void notifyNotAttempted(Set<String> notAttemptedRefs) {
+ notAttemptedRefs.forEach(
+ ref ->
+ Arrays.asList(getStatesByRef(ref))
+ .forEach(
+ state ->
+ state.notifyRefReplicated(
+ projectName.get(),
+ ref,
+ uri,
+ RefPushResult.NOT_ATTEMPTED,
+ RemoteRefUpdate.Status.UP_TO_DATE)));
}
void addState(String ref, ReplicationState state) {