Skip to content

Commit 111e703

Browse files
authored
Plugins: Output better error message when existing plugin is incompatible (#23562)
This commit catches the underlying failure when trying to list plugin information when a plugin is incompatible with the current version of elasticsearch. This could happen when elasticsearch is upgraded but old plugins still exist. With this change, all plugins will be output, instead of failing at the first out of date plugin. closes #20691
1 parent bc65be2 commit 111e703

File tree

2 files changed

+34
-7
lines changed

2 files changed

+34
-7
lines changed

core/src/main/java/org/elasticsearch/plugins/ListPluginsCommand.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,17 @@ protected void execute(Terminal terminal, OptionSet options, Environment env) th
5656
}
5757
Collections.sort(plugins);
5858
for (final Path plugin : plugins) {
59-
terminal.println(plugin.getFileName().toString());
60-
PluginInfo info = PluginInfo.readFromProperties(env.pluginsFile().resolve(plugin.toAbsolutePath()));
61-
terminal.println(Terminal.Verbosity.VERBOSE, info.toString());
59+
terminal.println(Terminal.Verbosity.SILENT, plugin.getFileName().toString());
60+
try {
61+
PluginInfo info = PluginInfo.readFromProperties(env.pluginsFile().resolve(plugin.toAbsolutePath()));
62+
terminal.println(Terminal.Verbosity.VERBOSE, info.toString());
63+
} catch (IllegalArgumentException e) {
64+
if (e.getMessage().contains("incompatible with Elasticsearch")) {
65+
terminal.println("WARNING: " + e.getMessage());
66+
} else {
67+
throw e;
68+
}
69+
}
6270
}
6371
}
6472
}

qa/evil-tests/src/test/java/org/elasticsearch/plugins/ListPluginsCommandTests.java

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,15 @@
2525
import java.nio.file.NoSuchFileException;
2626
import java.nio.file.Path;
2727
import java.util.Arrays;
28-
import java.util.HashMap;
29-
import java.util.Map;
3028
import java.util.stream.Collectors;
3129

3230
import org.apache.lucene.util.LuceneTestCase;
31+
import org.elasticsearch.Version;
3332
import org.elasticsearch.cli.ExitCodes;
3433
import org.elasticsearch.cli.MockTerminal;
35-
import org.elasticsearch.common.inject.spi.HasDependencies;
3634
import org.elasticsearch.common.settings.Settings;
3735
import org.elasticsearch.env.Environment;
3836
import org.elasticsearch.test.ESTestCase;
39-
import org.elasticsearch.Version;
4037
import org.junit.Before;
4138

4239
@LuceneTestCase.SuppressFileSystems("*")
@@ -155,4 +152,26 @@ public void testPluginWithWrongDescriptorFile() throws Exception{
155152
env.pluginsFile().resolve("fake1").resolve(PluginInfo.ES_PLUGIN_PROPERTIES).toString() + "]");
156153
}
157154

155+
public void testExistingIncompatiblePlugin() throws Exception {
156+
PluginTestUtil.writeProperties(env.pluginsFile().resolve("fake_plugin1"),
157+
"description", "fake desc 1",
158+
"name", "fake_plugin1",
159+
"version", "1.0",
160+
"elasticsearch.version", Version.fromString("1.0.0").toString(),
161+
"java.version", System.getProperty("java.specification.version"),
162+
"classname", "org.fake1");
163+
buildFakePlugin(env, "fake desc 2", "fake_plugin2", "org.fake2");
164+
165+
MockTerminal terminal = listPlugins(home);
166+
assertEquals("fake_plugin1\n" +
167+
"WARNING: Plugin [fake_plugin1] is incompatible with Elasticsearch [" +
168+
Version.CURRENT.toString() + "]. Was designed for version [1.0.0]\n" +
169+
"fake_plugin2\n",
170+
terminal.getOutput());
171+
172+
String[] params = {"-s"};
173+
terminal = listPlugins(home, params);
174+
assertEquals("fake_plugin1\nfake_plugin2\n", terminal.getOutput());
175+
}
176+
158177
}

0 commit comments

Comments
 (0)