Revert "Revert "Do not reload config when queue is not ready""
This reverts commit bcb15e00b3bd8804417d7401cff12a941bdb8aee.
The test that was previously failing on stable-3.0 has been fixed
with Change-Id: I2bef00e701 and thus does not represent anymore an
impediment for getting this fix merged in stable-2.16 and stable-3.0.
Change-Id: I936e3547ff4533850d538fe6b9fada7437bf4e49
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecorator.java b/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecorator.java
index 3747009..1e74d9a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecorator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecorator.java
@@ -77,9 +77,13 @@
private void reloadIfNeeded() {
if (isAutoReload()) {
ReplicationQueue queue = replicationQueue.get();
+
long lastModified = getLastModified(currentConfig);
try {
- if (lastModified > currentConfigTs && lastModified > lastFailedConfigTs) {
+ if (lastModified > currentConfigTs
+ && lastModified > lastFailedConfigTs
+ && queue.isRunning()
+ && !queue.isReplaying()) {
queue.stop();
currentConfig = loadConfig();
currentConfigTs = lastModified;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationQueue.java b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationQueue.java
index d57fa2e..203bc2f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationQueue.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationQueue.java
@@ -69,6 +69,7 @@
private final ReplicationState.Factory replicationStateFactory;
private final EventsStorage eventsStorage;
private volatile boolean running;
+ private volatile boolean replaying;
@Inject
ReplicationQueue(
@@ -106,6 +107,14 @@
}
}
+ public boolean isRunning() {
+ return running;
+ }
+
+ public boolean isReplaying() {
+ return replaying;
+ }
+
void scheduleFullSync(Project.NameKey project, String urlMatch, ReplicationState state) {
scheduleFullSync(project, urlMatch, state, false);
}
@@ -153,9 +162,14 @@
}
private void firePendingEvents() {
- for (EventsStorage.ReplicateRefUpdate e : eventsStorage.list()) {
- repLog.info("Firing pending event {}", e);
- onGitReferenceUpdated(e.project, e.ref);
+ replaying = true;
+ try {
+ for (EventsStorage.ReplicateRefUpdate e : eventsStorage.list()) {
+ repLog.info("Firing pending event {}", e);
+ onGitReferenceUpdated(e.project, e.ref);
+ }
+ } finally {
+ replaying = false;
}
}