diff options
author | Marco Miller <marco.miller@ericsson.com> | 2018-04-09 16:42:38 -0400 |
---|---|---|
committer | Marco Miller <marco.miller@ericsson.com> | 2018-04-09 20:40:04 -0400 |
commit | 2ff422e679e60c2f7d0d17c5059284921f0c9140 (patch) | |
tree | 0195d3b15bbb418f9829731739e1fb93d5c46928 | |
parent | e5dc28f707241b314843defad7bd062bb832e071 (diff) |
Index start/activate command: fix unknown name use
Before this fix, using the IndexStartCommand [1] while passing an
invalid or unknown index name with the --force option led to an NPE in
the log, thus a fatal error in user's console. Also, using an unknown
index name either without --force or through the sibling
IndexActivateCommand [2] used to display an inaccurate console message.
This fix always shows a clearer message to the user, upon passing an
unknown index name to either [1] or [2]. It also now prevents that NPE.
[1] https://gerrit-review.googlesource.com/Documentation/cmd-index-start.html
[2] https://gerrit-review.googlesource.com/Documentation/cmd-index-activate.html
Bug: Issue 8715
Change-Id: I16cb800fbe9af00e47bb22105d1c4d4bf044fdc5
3 files changed, 24 insertions, 6 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/AbstractVersionManager.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/AbstractVersionManager.java index a0273ce220..8d0f55016b 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/index/AbstractVersionManager.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/AbstractVersionManager.java @@ -121,6 +121,16 @@ public abstract class AbstractVersionManager implements LifecycleListener { return false; } + /** + * Tells if an index with this name is currently known or not. + * + * @param name index name + * @return true if index is known and can be used, otherwise false. + */ + public boolean isKnownIndex(String name) { + return defs.get(name) != null; + } + protected <K, V, I extends Index<K, V>> void initIndex( IndexDefinition<K, V, I> def, GerritIndexStatus cfg) { TreeMap<Integer, Version<V>> versions = scanVersions(def, cfg); diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/IndexActivateCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/IndexActivateCommand.java index 5db515eaab..ee19a48b36 100644 --- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/IndexActivateCommand.java +++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/IndexActivateCommand.java @@ -35,10 +35,14 @@ public class IndexActivateCommand extends SshCommand { @Override protected void run() throws UnloggedFailure { try { - if (versionManager.activateLatestIndex(name)) { - stdout.println("Activated latest index version"); + if (versionManager.isKnownIndex(name)) { + if (versionManager.activateLatestIndex(name)) { + stdout.println("Activated latest index version"); + } else { + stdout.println("Not activating index, already using latest version"); + } } else { - stdout.println("Not activating index, already using latest version"); + stderr.println("Cannot activate index, unknown based on this name"); } } catch (ReindexerAlreadyRunningException e) { throw die("Failed to activate latest index: " + e.getMessage()); diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/IndexStartCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/IndexStartCommand.java index 20fe211d4f..736478b81a 100644 --- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/IndexStartCommand.java +++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/IndexStartCommand.java @@ -39,10 +39,14 @@ public class IndexStartCommand extends SshCommand { @Override protected void run() throws UnloggedFailure { try { - if (versionManager.startReindexer(name, force)) { - stdout.println("Reindexer started"); + if (versionManager.isKnownIndex(name)) { + if (versionManager.startReindexer(name, force)) { + stdout.println("Reindexer started"); + } else { + stdout.println("Nothing to reindex, index is already the latest version"); + } } else { - stdout.println("Nothing to reindex, index is already the latest version"); + stderr.println("Cannot reindex, index is unknown based on this name"); } } catch (ReindexerAlreadyRunningException e) { throw die("Failed to start reindexer: " + e.getMessage()); |