You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@inlong.apache.org by he...@apache.org on 2022/06/10 07:07:39 UTC

[incubator-inlong] branch master updated: [INLONG-4615][Manager] PluginClassLoader adapts to the Windows system (#4617)

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

healchow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-inlong.git


The following commit(s) were added to refs/heads/master by this push:
     new d86ca738f [INLONG-4615][Manager] PluginClassLoader adapts to the Windows system (#4617)
d86ca738f is described below

commit d86ca738f29b1094cad4638224d8cdc3398af082
Author: kipshi <48...@users.noreply.github.com>
AuthorDate: Fri Jun 10 15:07:34 2022 +0800

    [INLONG-4615][Manager] PluginClassLoader adapts to the Windows system (#4617)
---
 .../service/core/plugin/PluginClassLoader.java       | 20 +++++++++++++++++---
 .../service/core/plugin/PluginClassLoaderTest.java   |  3 +--
 2 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/plugin/PluginClassLoader.java b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/plugin/PluginClassLoader.java
index 29a56b538..34c673393 100644
--- a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/plugin/PluginClassLoader.java
+++ b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/plugin/PluginClassLoader.java
@@ -51,6 +51,8 @@ public class PluginClassLoader extends URLClassLoader {
 
     public static final String PLUGIN_PATH = "META-INF/plugin.yaml";
 
+    public static final String WINDOWS_PREFIX = "win";
+
     /**
      * plugin.yaml should less than 1k
      */
@@ -61,10 +63,12 @@ public class PluginClassLoader extends URLClassLoader {
      */
     private Map<String, PluginDefinition> pluginDefinitionMap = new HashMap<>();
     private ObjectMapper yamlMapper;
+    private String osName;
 
-    private PluginClassLoader(URL url, ClassLoader parent) throws IOException {
+    private PluginClassLoader(URL url, ClassLoader parent, String osName) throws IOException {
         super(new URL[]{url}, parent);
         this.pluginDirectory = new File(url.getPath());
+        this.osName = osName;
         initYamlMapper();
         loadPluginDefinition();
     }
@@ -73,13 +77,19 @@ public class PluginClassLoader extends URLClassLoader {
      * Get pluginClassLoader by plugin url.
      */
     public static PluginClassLoader getFromPluginUrl(String url, ClassLoader parent) {
+        log.info("ClassLoaderPath:{}", url);
         checkClassLoader(parent);
         checkUrl(url);
         return AccessController.doPrivileged(new PrivilegedAction<PluginClassLoader>() {
             @SneakyThrows
             @Override
             public PluginClassLoader run() {
-                return new PluginClassLoader(new URL("file://" + url), parent);
+                String os = System.getProperty("os.name").toLowerCase();
+                if (os.startsWith(WINDOWS_PREFIX)) {
+                    return new PluginClassLoader(new URL("file:///" + url), parent, os);
+                } else {
+                    return new PluginClassLoader(new URL("file://" + url), parent, os);
+                }
             }
         });
     }
@@ -139,7 +149,11 @@ public class PluginClassLoader extends URLClassLoader {
             String pluginDef = readPluginDef(pluginJar);
             pluginDef = pluginDef.replaceAll("[\\x00]+", "");
             PluginDefinition definition = yamlMapper.readValue(pluginDef, PluginDefinition.class);
-            addURL(new URL("file://" + jarFile.getAbsolutePath()));
+            if (osName.startsWith(WINDOWS_PREFIX)) {
+                addURL(new URL("file:///" + jarFile.getAbsolutePath()));
+            } else {
+                addURL(new URL("file://" + jarFile.getAbsolutePath()));
+            }
             checkPluginValid(jarFile, definition);
             definitions.add(definition);
         }
diff --git a/inlong-manager/manager-service/src/test/java/org/apache/inlong/manager/service/core/plugin/PluginClassLoaderTest.java b/inlong-manager/manager-service/src/test/java/org/apache/inlong/manager/service/core/plugin/PluginClassLoaderTest.java
index 7402551af..4a7535d76 100644
--- a/inlong-manager/manager-service/src/test/java/org/apache/inlong/manager/service/core/plugin/PluginClassLoaderTest.java
+++ b/inlong-manager/manager-service/src/test/java/org/apache/inlong/manager/service/core/plugin/PluginClassLoaderTest.java
@@ -38,8 +38,7 @@ public class PluginClassLoaderTest {
 
         String path = this.getClass().getClassLoader().getResource("").getPath();
         PluginClassLoader pluginClassLoader = PluginClassLoader.getFromPluginUrl(path + "plugins",
-                Thread.currentThread()
-                        .getContextClassLoader());
+                Thread.currentThread().getContextClassLoader());
         Map<String, PluginDefinition> pluginDefinitionMap = pluginClassLoader.getPluginDefinitions();
         Assert.assertEquals(1, pluginDefinitionMap.size());
         PluginDefinition pluginDefinition = Lists.newArrayList(pluginDefinitionMap.values()).get(0);