This is an automated email from the ASF dual-hosted git repository. xiangfu pushed a commit to branch plugin-env-var in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
commit 8059fdca93e4b4cd41716cc3278fc80fd3693acc Author: Xiang Fu <[email protected]> AuthorDate: Thu Jan 2 15:20:48 2020 -0800 Make plugin manager to load plugins based on environment variables --- .../org/apache/pinot/spi/plugin/PluginManager.java | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/pinot-spi/src/main/java/org/apache/pinot/spi/plugin/PluginManager.java b/pinot-spi/src/main/java/org/apache/pinot/spi/plugin/PluginManager.java index d8fadc3..6288e9a 100644 --- a/pinot-spi/src/main/java/org/apache/pinot/spi/plugin/PluginManager.java +++ b/pinot-spi/src/main/java/org/apache/pinot/spi/plugin/PluginManager.java @@ -28,19 +28,59 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.apache.commons.io.FileUtils; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class PluginManager { + private static final Logger LOGGER = LoggerFactory.getLogger(PluginManager.class); + public static final String PLUGINS_ROOT_DIR_ENV_VAR = "plugins.root.directory"; + public static final String PLUGINS_LOADING_ENV_VAR = "plugins.loading"; public static final String DEFAULT_PLUGIN_NAME = "DEFAULT"; + private static final String JAR_FILE_EXTENSION = "jar"; static PluginManager PLUGIN_MANAGER = new PluginManager(); Map<Plugin, PluginClassLoader> _registry = new HashMap<>(); + String pluginsRootDir; + String pluginsLoading; private PluginManager() { _registry.put(new Plugin(DEFAULT_PLUGIN_NAME), createClassLoader(Collections.emptyList())); + pluginsRootDir = System.getenv(PLUGINS_ROOT_DIR_ENV_VAR); + pluginsLoading = System.getenv(PLUGINS_LOADING_ENV_VAR); + init(pluginsRootDir, pluginsLoading); + } + + private void init(String pluginsRootDir, String pluginsLoading) { + if (StringUtils.isEmpty(pluginsRootDir)) { + LOGGER.info("No plugins root dir specified from environment variable"); + return; + } else { + LOGGER.info("Plugins root dir is [{}]", pluginsRootDir); + } + Collection<File> jarFiles = FileUtils.listFiles(new File(pluginsRootDir), new String[]{JAR_FILE_EXTENSION}, true); + List<String> pluginsToLoad = null; + if (!StringUtils.isEmpty(pluginsLoading)) { + pluginsToLoad = Arrays.asList(pluginsLoading.split(",")); + LOGGER.info("Trying to load plugins: [{}]", Arrays.toString(pluginsToLoad.toArray())); + } else { + LOGGER.info("No pluginsLoading specified, trying to load all plugins: [{}]", Arrays.toString(jarFiles.toArray())); + } + for (File jarFile : jarFiles) { + File pluginDir = jarFile.getParentFile(); + String pluginName = pluginDir.getName(); + if (pluginsToLoad != null) { + if (!pluginsToLoad.contains(pluginName)) { + continue; + } + } + load(pluginName, pluginDir); + } } /** @@ -49,6 +89,7 @@ public class PluginManager { * @param directory */ public void load(String pluginName, File directory) { + LOGGER.info("Trying to load plugin [{}] from location [{}]", pluginName, directory); Collection<File> jarFiles = FileUtils.listFiles(directory, new String[]{"jar"}, true); Collection<URL> urlList = new ArrayList<>(); for (File jarFile : jarFiles) { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
