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