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:
@@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user