[TEST] Allow to disable plugin loading from classpath
This commit is contained in:
parent
9c45fe8f9b
commit
75efa47d5a
|
@ -53,7 +53,9 @@ import static org.elasticsearch.common.io.FileSystemUtils.isAccessibleDirectory;
|
|||
*
|
||||
*/
|
||||
public class PluginsService extends AbstractComponent {
|
||||
public static final String ES_PLUGIN_PROPERTIES_FILE_KEY = "properties_file";
|
||||
public static final String ES_PLUGIN_PROPERTIES = "es-plugin.properties";
|
||||
public static final String LOAD_PLUGIN_FROM_CLASSPATH = "load_classpath_plugins";
|
||||
|
||||
private final Environment environment;
|
||||
|
||||
|
@ -63,6 +65,8 @@ public class PluginsService extends AbstractComponent {
|
|||
private final ImmutableList<Tuple<PluginInfo, Plugin>> plugins;
|
||||
|
||||
private final ImmutableMap<Plugin, List<OnModuleReference>> onModuleReferences;
|
||||
private final String esPluginPropertiesFile;
|
||||
private final boolean loadClasspathPlugins;
|
||||
|
||||
private PluginsInfo cachedPluginsInfo;
|
||||
private final TimeValue refreshInterval;
|
||||
|
@ -88,6 +92,8 @@ public class PluginsService extends AbstractComponent {
|
|||
super(settings);
|
||||
this.environment = environment;
|
||||
this.checkLucene = componentSettings.getAsBoolean("check_lucene", true);
|
||||
this.esPluginPropertiesFile = componentSettings.get(ES_PLUGIN_PROPERTIES_FILE_KEY, ES_PLUGIN_PROPERTIES);
|
||||
this.loadClasspathPlugins = componentSettings.getAsBoolean(LOAD_PLUGIN_FROM_CLASSPATH, true);
|
||||
|
||||
ImmutableList.Builder<Tuple<PluginInfo, Plugin>> tupleBuilder = ImmutableList.builder();
|
||||
|
||||
|
@ -104,7 +110,9 @@ public class PluginsService extends AbstractComponent {
|
|||
|
||||
// now, find all the ones that are in the classpath
|
||||
loadPluginsIntoClassLoader();
|
||||
tupleBuilder.addAll(loadPluginsFromClasspath(settings));
|
||||
if (loadClasspathPlugins) {
|
||||
tupleBuilder.addAll(loadPluginsFromClasspath(settings));
|
||||
}
|
||||
this.plugins = tupleBuilder.build();
|
||||
|
||||
// We need to build a List of jvm and site plugins for checking mandatory plugins
|
||||
|
@ -384,7 +392,7 @@ public class PluginsService extends AbstractComponent {
|
|||
|
||||
// Trying JVM plugins: looking for es-plugin.properties files
|
||||
try {
|
||||
Enumeration<URL> pluginUrls = settings.getClassLoader().getResources(ES_PLUGIN_PROPERTIES);
|
||||
Enumeration<URL> pluginUrls = settings.getClassLoader().getResources(esPluginPropertiesFile);
|
||||
while (pluginUrls.hasMoreElements()) {
|
||||
URL pluginUrl = pluginUrls.nextElement();
|
||||
Properties pluginProps = new Properties();
|
||||
|
@ -448,7 +456,7 @@ public class PluginsService extends AbstractComponent {
|
|||
String description = PluginInfo.DESCRIPTION_NOT_AVAILABLE;
|
||||
|
||||
// We check if es-plugin.properties exists in plugin/_site dir
|
||||
File pluginPropFile = new File(sitePluginDir, ES_PLUGIN_PROPERTIES);
|
||||
File pluginPropFile = new File(sitePluginDir, esPluginPropertiesFile);
|
||||
if (pluginPropFile.exists()) {
|
||||
|
||||
Properties pluginProps = new Properties();
|
||||
|
@ -460,7 +468,7 @@ public class PluginsService extends AbstractComponent {
|
|||
version = pluginProps.getProperty("version", PluginInfo.VERSION_NOT_AVAILABLE);
|
||||
} catch (Exception e) {
|
||||
// Can not load properties for this site plugin. Ignoring.
|
||||
logger.debug("can not load {} file.", e, ES_PLUGIN_PROPERTIES);
|
||||
logger.debug("can not load {} file.", e, esPluginPropertiesFile);
|
||||
} finally {
|
||||
IOUtils.closeWhileHandlingException(is);
|
||||
}
|
||||
|
@ -499,7 +507,7 @@ public class PluginsService extends AbstractComponent {
|
|||
Class<? extends Plugin> pluginClass = (Class<? extends Plugin>) settings.getClassLoader().loadClass(className);
|
||||
Plugin plugin;
|
||||
|
||||
if (!checkLucene || checkLuceneCompatibility(pluginClass, settings, logger)) {
|
||||
if (!checkLucene || checkLuceneCompatibility(pluginClass, settings, logger, esPluginPropertiesFile)) {
|
||||
try {
|
||||
plugin = pluginClass.getConstructor(Settings.class).newInstance(settings);
|
||||
} catch (NoSuchMethodException e) {
|
||||
|
@ -535,13 +543,13 @@ public class PluginsService extends AbstractComponent {
|
|||
* @param pluginClass Plugin class we are checking
|
||||
* @return true if the plugin is Lucene compatible
|
||||
*/
|
||||
public static boolean checkLuceneCompatibility(Class<? extends Plugin> pluginClass, Settings settings, ESLogger logger) {
|
||||
public static boolean checkLuceneCompatibility(Class<? extends Plugin> pluginClass, Settings settings, ESLogger logger, String propertiesFile) {
|
||||
String luceneVersion = null;
|
||||
try {
|
||||
// We try to read the es-plugin.properties file
|
||||
// But as we can have several plugins in the same classloader,
|
||||
// we have to find the right es-plugin.properties file
|
||||
Enumeration<URL> pluginUrls = settings.getClassLoader().getResources(PluginsService.ES_PLUGIN_PROPERTIES);
|
||||
Enumeration<URL> pluginUrls = settings.getClassLoader().getResources(propertiesFile);
|
||||
|
||||
while (pluginUrls.hasMoreElements()) {
|
||||
URL pluginUrl = pluginUrls.nextElement();
|
||||
|
@ -570,7 +578,7 @@ public class PluginsService extends AbstractComponent {
|
|||
return true;
|
||||
}
|
||||
} else {
|
||||
logger.debug("lucene property is not set in plugin {} file. Skipping test.", PluginsService.ES_PLUGIN_PROPERTIES);
|
||||
logger.debug("lucene property is not set in plugin {} file. Skipping test.", propertiesFile);
|
||||
return true;
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
|
|
|
@ -22,6 +22,7 @@ package org.elasticsearch.plugin;
|
|||
import com.google.common.collect.Lists;
|
||||
import org.elasticsearch.action.admin.cluster.node.info.NodesInfoResponse;
|
||||
import org.elasticsearch.nodesinfo.SimpleNodesInfoTests;
|
||||
import org.elasticsearch.plugins.PluginsService;
|
||||
import org.elasticsearch.test.ElasticsearchIntegrationTest;
|
||||
import org.elasticsearch.test.ElasticsearchIntegrationTest.ClusterScope;
|
||||
import org.elasticsearch.test.hamcrest.ElasticsearchAssertions;
|
||||
|
@ -45,7 +46,9 @@ public class PluginLuceneCheckerTests extends ElasticsearchIntegrationTest {
|
|||
@Test
|
||||
public void testDisableLuceneVersionCheckingPlugin() throws URISyntaxException {
|
||||
String serverNodeId = SimpleNodesInfoTests.startNodeWithPlugins(
|
||||
settingsBuilder().put("plugins.check_lucene", false).build(),
|
||||
settingsBuilder().put("plugins.check_lucene", false)
|
||||
.put("plugins." + PluginsService.ES_PLUGIN_PROPERTIES_FILE_KEY, "es-plugin-test.properties")
|
||||
.put("plugins." + PluginsService.LOAD_PLUGIN_FROM_CLASSPATH, true).build(),
|
||||
"/org/elasticsearch/plugin/lucene/");
|
||||
logger.info("--> server {} started" + serverNodeId);
|
||||
|
||||
|
@ -68,7 +71,9 @@ public class PluginLuceneCheckerTests extends ElasticsearchIntegrationTest {
|
|||
@Test
|
||||
public void testEnableLuceneVersionCheckingPlugin() throws URISyntaxException {
|
||||
String serverNodeId = SimpleNodesInfoTests.startNodeWithPlugins(
|
||||
settingsBuilder().put("plugins.check_lucene", true).build(),
|
||||
settingsBuilder().put("plugins.check_lucene", true)
|
||||
.put("plugins." + PluginsService.ES_PLUGIN_PROPERTIES_FILE_KEY, "es-plugin-test.properties")
|
||||
.put("plugins." + PluginsService.LOAD_PLUGIN_FROM_CLASSPATH, true).build(),
|
||||
"/org/elasticsearch/plugin/lucene/");
|
||||
logger.info("--> server {} started" + serverNodeId);
|
||||
|
||||
|
|
|
@ -61,6 +61,7 @@ import org.elasticsearch.index.engine.IndexEngineModule;
|
|||
import org.elasticsearch.index.fielddata.ordinals.InternalGlobalOrdinalsBuilder;
|
||||
import org.elasticsearch.node.Node;
|
||||
import org.elasticsearch.node.internal.InternalNode;
|
||||
import org.elasticsearch.plugins.PluginsService;
|
||||
import org.elasticsearch.search.SearchService;
|
||||
import org.elasticsearch.test.cache.recycler.MockBigArraysModule;
|
||||
import org.elasticsearch.test.cache.recycler.MockPageCacheRecyclerModule;
|
||||
|
@ -223,6 +224,7 @@ public final class TestCluster extends ImmutableTestCluster {
|
|||
}
|
||||
}
|
||||
builder.put("script.disable_dynamic", false);
|
||||
builder.put("plugins." + PluginsService.LOAD_PLUGIN_FROM_CLASSPATH, false);
|
||||
defaultSettings = builder.build();
|
||||
executor = EsExecutors.newCached(1, TimeUnit.MINUTES, EsExecutors.daemonThreadFactory("test_" + clusterName));
|
||||
}
|
||||
|
@ -696,6 +698,7 @@ public final class TestCluster extends ImmutableTestCluster {
|
|||
TransportAddress addr = ((InternalNode) node).injector().getInstance(TransportService.class).boundAddress().publishAddress();
|
||||
TransportClient client = new TransportClient(settingsBuilder().put("client.transport.nodes_sampler_interval", "1s")
|
||||
.put("name", "transport_client_" + node.settings().get("name"))
|
||||
.put("plugins." + PluginsService.LOAD_PLUGIN_FROM_CLASSPATH, false)
|
||||
.put(ClusterName.SETTING, clusterName).put("client.transport.sniff", sniff).build());
|
||||
client.addTransportAddress(addr);
|
||||
return client;
|
||||
|
|
Loading…
Reference in New Issue