summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Miller <marco.miller@ericsson.com>2018-04-09 16:42:38 -0400
committerMarco Miller <marco.miller@ericsson.com>2018-04-09 20:40:04 -0400
commit2ff422e679e60c2f7d0d17c5059284921f0c9140 (patch)
tree0195d3b15bbb418f9829731739e1fb93d5c46928
parente5dc28f707241b314843defad7bd062bb832e071 (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
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/index/AbstractVersionManager.java10
-rw-r--r--gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/IndexActivateCommand.java10
-rw-r--r--gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/IndexStartCommand.java10
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());