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; } }