PluginConfigFactory: reload also outdated secure store
With refresh=true, the getFromGerritConfig method only checked
if gerrit.config was outdated and only reloaded the gerrit.config.
Reloading of an outdated secure.config didn't work.
If plugin stored a part of its configuration in the secure.config,
like the replication plugin did, then there was no way to reload
a changed username/password, without restarting Gerrit server.
Change-Id: I57b6dd4ba367fb23aa20dea3f5ac36d8fcf52e26
diff --git a/gerrit-pgm/src/test/java/com/google/gerrit/pgm/init/UpgradeFrom2_0_xTest.java b/gerrit-pgm/src/test/java/com/google/gerrit/pgm/init/UpgradeFrom2_0_xTest.java
index 461a241..7721fca 100644
--- a/gerrit-pgm/src/test/java/com/google/gerrit/pgm/init/UpgradeFrom2_0_xTest.java
+++ b/gerrit-pgm/src/test/java/com/google/gerrit/pgm/init/UpgradeFrom2_0_xTest.java
@@ -139,5 +139,15 @@
public Iterable<EntryKey> list() {
throw new UnsupportedOperationException("not used by tests");
}
+
+ @Override
+ public boolean isOutdated() {
+ throw new UnsupportedOperationException("not used by tests");
+ }
+
+ @Override
+ public void reload() {
+ throw new UnsupportedOperationException("not used by tests");
+ }
}
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/config/PluginConfigFactory.java b/gerrit-server/src/main/java/com/google/gerrit/server/config/PluginConfigFactory.java
index ce295bd..6310c08 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/config/PluginConfigFactory.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/config/PluginConfigFactory.java
@@ -101,6 +101,9 @@
* @return the plugin configuration from the 'gerrit.config' file
*/
public PluginConfig getFromGerritConfig(String pluginName, boolean refresh) {
+ if (refresh && secureStore.isOutdated()) {
+ secureStore.reload();
+ }
File configFile = site.gerrit_config.toFile();
if (refresh && cfgSnapshot.isModified(configFile)) {
cfgSnapshot = FileSnapshot.save(configFile);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/securestore/DefaultSecureStore.java b/gerrit-server/src/main/java/com/google/gerrit/server/securestore/DefaultSecureStore.java
index 677e9ff..b729b09 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/securestore/DefaultSecureStore.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/securestore/DefaultSecureStore.java
@@ -17,6 +17,7 @@
import com.google.gerrit.common.FileUtil;
import com.google.gerrit.server.config.SitePaths;
import com.google.inject.Inject;
+import com.google.inject.ProvisionException;
import com.google.inject.Singleton;
import java.io.File;
import java.io.IOException;
@@ -107,6 +108,20 @@
return result;
}
+ @Override
+ public boolean isOutdated() {
+ return sec.isOutdated();
+ }
+
+ @Override
+ public void reload() {
+ try {
+ sec.load();
+ } catch (IOException | ConfigInvalidException e) {
+ throw new ProvisionException("Couldn't reload secure.config", e);
+ }
+ }
+
private void save() {
try {
saveSecure(sec);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/securestore/SecureStore.java b/gerrit-server/src/main/java/com/google/gerrit/server/securestore/SecureStore.java
index 5c87391..b5aebee 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/securestore/SecureStore.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/securestore/SecureStore.java
@@ -150,4 +150,10 @@
/** @return list of stored entries. */
public abstract Iterable<EntryKey> list();
+
+ /** @return <code>true</code> if currently loaded values are outdated */
+ public abstract boolean isOutdated();
+
+ /** Reload the values */
+ public abstract void reload();
}