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
This commit is contained in:
Saša Živkov
2017-02-16 11:31:33 +01:00
parent 076d6e4704
commit 3ab348b7e6
4 changed files with 34 additions and 0 deletions

View File

@@ -139,5 +139,15 @@ public class UpgradeFrom2_0_xTest extends InitTestCase {
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");
}
}
}

View File

@@ -101,6 +101,9 @@ public class PluginConfigFactory implements ReloadPluginListener {
* @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);

View File

@@ -17,6 +17,7 @@ package com.google.gerrit.server.securestore;
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 @@ public class DefaultSecureStore extends SecureStore {
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);

View File

@@ -150,4 +150,10 @@ public abstract class SecureStore {
/** @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();
}