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

albumenj pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.0 by this push:
     new a78bdc8998 [3.0] Handle interrupted exception for ExtensionLoader 
(#10194)
a78bdc8998 is described below

commit a78bdc8998eaa6240f8c40716f5d1fcbfcb2cdab
Author: Albumen Kevin <[email protected]>
AuthorDate: Fri Jun 24 14:27:36 2022 +0800

    [3.0] Handle interrupted exception for ExtensionLoader (#10194)
---
 .../apache/dubbo/common/extension/ExtensionLoader.java    | 15 +++++++++++----
 .../dubbo/common/utils/ClassLoaderResourceLoader.java     |  8 ++------
 .../dubbo/common/utils/ClassLoaderResourceLoaderTest.java |  2 +-
 3 files changed, 14 insertions(+), 11 deletions(-)

diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
index 2445156ca0..a170f3684c 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
@@ -909,7 +909,12 @@ public class ExtensionLoader<T> {
             synchronized (cachedClasses) {
                 classes = cachedClasses.get();
                 if (classes == null) {
-                    classes = loadExtensionClasses();
+                    try {
+                        classes = loadExtensionClasses();
+                    } catch (InterruptedException e) {
+                        logger.error("Exception occurred when loading 
extension class (interface: " + type + ")", e);
+                        throw new IllegalStateException("Exception occurred 
when loading extension class (interface: " + type + ")", e);
+                    }
                     cachedClasses.set(classes);
                 }
             }
@@ -921,7 +926,7 @@ public class ExtensionLoader<T> {
      * synchronized in getExtensionClasses
      */
     @SuppressWarnings("deprecation")
-    private Map<String, Class<?>> loadExtensionClasses() {
+    private Map<String, Class<?>> loadExtensionClasses() throws 
InterruptedException {
         checkDestroyed();
         cacheDefaultExtensionName();
 
@@ -939,7 +944,7 @@ public class ExtensionLoader<T> {
         return extensionClasses;
     }
 
-    private void loadDirectory(Map<String, Class<?>> extensionClasses, 
LoadingStrategy strategy, String type) {
+    private void loadDirectory(Map<String, Class<?>> extensionClasses, 
LoadingStrategy strategy, String type) throws InterruptedException {
         loadDirectoryInternal(extensionClasses, strategy, type);
         try {
             String oldType = type.replace("org.apache", "com.alibaba");
@@ -976,7 +981,7 @@ public class ExtensionLoader<T> {
         }
     }
 
-    private void loadDirectoryInternal(Map<String, Class<?>> extensionClasses, 
LoadingStrategy loadingStrategy, String type) {
+    private void loadDirectoryInternal(Map<String, Class<?>> extensionClasses, 
LoadingStrategy loadingStrategy, String type) throws InterruptedException {
         String fileName = loadingStrategy.directory() + type;
         try {
             List<ClassLoader> classLoadersToLoad = new LinkedList<>();
@@ -1024,6 +1029,8 @@ public class ExtensionLoader<T> {
                     loadingStrategy.excludedPackages(),
                     loadingStrategy.onlyExtensionClassLoaderPackages());
             }));
+        } catch (InterruptedException e) {
+            throw e;
         } catch (Throwable t) {
             logger.error("Exception occurred when loading extension class 
(interface: " +
                 type + ", description file: " + fileName + ").", t);
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ClassLoaderResourceLoader.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ClassLoaderResourceLoader.java
index 8266938e94..cd1a95df02 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ClassLoaderResourceLoader.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ClassLoaderResourceLoader.java
@@ -42,7 +42,7 @@ public class ClassLoaderResourceLoader {
         GlobalResourcesRepository.registerGlobalDisposable(()-> destroy());
     }
 
-    public static Map<ClassLoader, Set<URL>> loadResources(String fileName, 
List<ClassLoader> classLoaders) {
+    public static Map<ClassLoader, Set<URL>> loadResources(String fileName, 
List<ClassLoader> classLoaders) throws InterruptedException {
         Map<ClassLoader, Set<URL>> resources = new ConcurrentHashMap<>();
         CountDownLatch countDownLatch = new 
CountDownLatch(classLoaders.size());
         for (ClassLoader classLoader : classLoaders) {
@@ -51,11 +51,7 @@ public class ClassLoaderResourceLoader {
                 countDownLatch.countDown();
             });
         }
-        try {
-            countDownLatch.await();
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
+        countDownLatch.await();
         return Collections.unmodifiableMap(new LinkedHashMap<>(resources));
     }
 
diff --git 
a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/ClassLoaderResourceLoaderTest.java
 
b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/ClassLoaderResourceLoaderTest.java
index 45921031ab..efcfdbf783 100644
--- 
a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/ClassLoaderResourceLoaderTest.java
+++ 
b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/ClassLoaderResourceLoaderTest.java
@@ -34,7 +34,7 @@ import java.util.Set;
 public class ClassLoaderResourceLoaderTest {
 
     @Test
-    public void test() {
+    public void test() throws InterruptedException {
         DubboInternalLoadingStrategy dubboInternalLoadingStrategy = new 
DubboInternalLoadingStrategy();
         String directory = dubboInternalLoadingStrategy.directory();
         String type = FooAppProvider.class.getName();

Reply via email to