You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by ki...@apache.org on 2021/07/12 17:16:43 UTC

[dolphinscheduler] branch dev updated: [Improvement][SPI] support load single plugin (#5794)

This is an automated email from the ASF dual-hosted git repository.

kirs pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new 9c217d0  [Improvement][SPI] support load single plugin (#5794)
9c217d0 is described below

commit 9c217d072df6d60d02e0d94c81ca68460b4e6f77
Author: Wenjun Ruan <86...@qq.com>
AuthorDate: Tue Jul 13 01:16:34 2021 +0800

    [Improvement][SPI] support load single plugin (#5794)
    
    change load operation of 'registry.plugin.dir'
---
 .../spi/plugin/DolphinPluginLoader.java            | 28 ++++++++++++++++++----
 1 file changed, 23 insertions(+), 5 deletions(-)

diff --git a/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/plugin/DolphinPluginLoader.java b/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/plugin/DolphinPluginLoader.java
index 66244b2..9d7b2cd 100644
--- a/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/plugin/DolphinPluginLoader.java
+++ b/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/plugin/DolphinPluginLoader.java
@@ -30,8 +30,10 @@ import java.net.URLClassLoader;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Optional;
 import java.util.ServiceLoader;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -80,7 +82,7 @@ public class DolphinPluginLoader {
 
     public void loadPlugins()
             throws Exception {
-        for (File file : listPluginDirs(installedPluginsDir)) {
+        for (File file : listPluginInstanceDirs(installedPluginsDir)) {
             if (file.isDirectory()) {
                 loadPlugin(file.getAbsolutePath());
             }
@@ -145,7 +147,7 @@ public class DolphinPluginLoader {
             throws Exception {
         logger.info("Classpath for {}:", dir.getName());
         List<URL> urls = new ArrayList<>();
-        for (File file : listPluginDirs(dir)) {
+        for (File file : listPluginInstanceJars(dir)) {
             logger.info("   {}", file);
             urls.add(file.toURI().toURL());
         }
@@ -172,12 +174,28 @@ public class DolphinPluginLoader {
         return new DolphinPluginClassLoader(urls, parent, DOLPHIN_SPI_PACKAGES);
     }
 
-    private static List<File> listPluginDirs(File installedPluginsDir) {
+    private static List<File> listPluginInstanceDirs(File installedPluginsDir) {
         if (installedPluginsDir != null && installedPluginsDir.isDirectory()) {
             File[] files = installedPluginsDir.listFiles();
             if (files != null) {
-                Arrays.sort(files);
-                return ImmutableList.copyOf(files);
+                Optional<File> isNotDir = Arrays.stream(files).filter(file -> !file.isDirectory()).findAny();
+                if (isNotDir.isPresent()) {
+                    return ImmutableList.of(installedPluginsDir);
+                } else {
+                    Arrays.sort(files);
+                    return ImmutableList.copyOf(files);
+                }
+            }
+        }
+        return ImmutableList.of();
+    }
+
+    private static List<File> listPluginInstanceJars(File installedPluginsDir) {
+        if (installedPluginsDir != null && installedPluginsDir.isDirectory()) {
+            File[] files = installedPluginsDir.listFiles();
+            if (files != null) {
+                return ImmutableList.copyOf(Arrays.stream(files).filter(file -> file.isFile() && file.getName().endsWith(".jar"))
+                        .collect(Collectors.toList()));
             }
         }
         return ImmutableList.of();