You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2021/06/22 03:45:15 UTC

[dubbo] branch 3.0 updated: Fix some compatiable issues (#8112)

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

liujun 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 8480324  Fix some compatiable issues (#8112)
8480324 is described below

commit 84803247e4435030dec8a72295348d25e855cbdf
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Tue Jun 22 11:44:55 2021 +0800

    Fix some compatiable issues (#8112)
---
 .../apache/dubbo/common/logger/LoggerFactory.java  |  3 +-
 .../dubbo/config/AbstractInterfaceConfig.java      |  4 +-
 .../apache/dubbo/rpc/model/MethodDescriptor.java   | 13 ++++-
 .../org/apache/dubbo/config/ServiceConfig.java     | 63 ++++++++++++----------
 .../store/InMemoryWritableMetadataService.java     |  2 +-
 .../registry/integration/DynamicDirectory.java     |  2 +-
 .../registry/integration/RegistryDirectory.java    |  2 +-
 7 files changed, 52 insertions(+), 37 deletions(-)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/logger/LoggerFactory.java b/dubbo-common/src/main/java/org/apache/dubbo/common/logger/LoggerFactory.java
index 58cbc46..06c75e8 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/logger/LoggerFactory.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/logger/LoggerFactory.java
@@ -95,8 +95,7 @@ public class LoggerFactory {
             if (loggerAdapter == LOGGER_ADAPTER) {
                 return;
             }
-            Logger logger = loggerAdapter.getLogger(LoggerFactory.class.getName());
-            logger.info("using logger: " + loggerAdapter.getClass().getName());
+            loggerAdapter.getLogger(LoggerFactory.class.getName());
             LoggerFactory.LOGGER_ADAPTER = loggerAdapter;
             for (Map.Entry<String, FailsafeLogger> entry : LOGGERS.entrySet()) {
                 entry.getValue().setLogger(LOGGER_ADAPTER.getLogger(entry.getKey()));
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
index 7f027cc..66e30ca 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
@@ -730,11 +730,11 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
     }
     
     public String getGroup(AbstractInterfaceConfig interfaceConfig) {
-        return StringUtils.isEmpty(this.group) ? (interfaceConfig != null ? interfaceConfig.getGroup() : this.group) : this.group;
+        return StringUtils.isEmpty(getGroup()) ? (interfaceConfig != null ? interfaceConfig.getGroup() : getGroup()) : getGroup();
     }
 
     public String getVersion(AbstractInterfaceConfig interfaceConfig) {
-        return StringUtils.isEmpty(this.version) ? (interfaceConfig != null ? interfaceConfig.getVersion() : this.version) : this.version;
+        return StringUtils.isEmpty(getVersion()) ? (interfaceConfig != null ? interfaceConfig.getVersion() : getVersion()) : getVersion();
     }
     
     public String getVersion() {
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/MethodDescriptor.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/MethodDescriptor.java
index f394ed6..b49aff0 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/MethodDescriptor.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/MethodDescriptor.java
@@ -17,6 +17,8 @@
 package org.apache.dubbo.rpc.model;
 
 import org.apache.dubbo.common.constants.CommonConstants;
+import org.apache.dubbo.common.logger.Logger;
+import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.stream.StreamObserver;
 import org.apache.dubbo.common.utils.ReflectUtils;
 
@@ -50,6 +52,7 @@ public class MethodDescriptor {
     private final RpcType rpcType;
 
     private final ConcurrentMap<String, Object> attributeMap = new ConcurrentHashMap<>();
+    private static final Logger logger = LoggerFactory.getLogger(MethodDescriptor.class);
 
     public MethodDescriptor(Method method) {
         this.method = method;
@@ -74,7 +77,15 @@ public class MethodDescriptor {
                 rpcType = RpcType.UNARY_UNWRAP;
             }
         }
-        this.returnTypes = ReflectUtils.getReturnTypes(method);
+        Type[] returnTypesResult;
+        try {
+            returnTypesResult = ReflectUtils.getReturnTypes(method);
+        } catch (Throwable throwable) {
+            logger.error("fail to get return types", throwable);
+            returnTypesResult = new Type[]{returnClass, returnClass};
+        }
+
+        this.returnTypes = returnTypesResult;
         this.paramDesc = ReflectUtils.getDesc(parameterClasses);
         this.compatibleParamSignatures = Stream.of(parameterClasses)
                 .map(Class::getName)
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
index e655863..110d1ce 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
@@ -34,8 +34,8 @@ import org.apache.dubbo.config.bootstrap.DubboBootstrap;
 import org.apache.dubbo.config.invoker.DelegateProviderMetaDataInvoker;
 import org.apache.dubbo.config.support.Parameter;
 import org.apache.dubbo.config.utils.ConfigValidationUtils;
-import org.apache.dubbo.metadata.ServiceNameMapping;
 import org.apache.dubbo.metadata.MetadataService;
+import org.apache.dubbo.metadata.ServiceNameMapping;
 import org.apache.dubbo.registry.client.metadata.MetadataUtils;
 import org.apache.dubbo.rpc.Exporter;
 import org.apache.dubbo.rpc.Invoker;
@@ -64,6 +64,7 @@ import java.util.UUID;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import static org.apache.dubbo.common.constants.CommonConstants.ANYHOST_KEY;
 import static org.apache.dubbo.common.constants.CommonConstants.ANY_VALUE;
@@ -133,6 +134,8 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
 
     private DubboBootstrap bootstrap;
 
+    private transient volatile AtomicBoolean initialized = new AtomicBoolean(false);
+
     /**
      * The exported services
      */
@@ -180,43 +183,45 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
         unexported = true;
     }
 
-    @Override
-    public synchronized void export() {
-        if (!shouldExport() || exported) {
-            return;
-        }
-
-        // Using DubboBootstrap API will associate bootstrap when registering service.
-        // Loading by Spring context will associate bootstrap in afterPropertiesSet() method.
-        // Initializing bootstrap here only for compatible with old API usages.
-        if (bootstrap == null) {
-            bootstrap = DubboBootstrap.getInstance();
-            bootstrap.initialize();
-            bootstrap.service(this);
-        }
-
-        // check bootstrap state
-        if (!bootstrap.isInitialized()) {
-            throw new IllegalStateException("DubboBootstrap is not initialized");
-        }
+    public void init() {
+        if (this.initialized.compareAndSet(false, true)) {
+            if (this.bootstrap == null) {
+                this.bootstrap = DubboBootstrap.getInstance();
+                this.bootstrap.initialize();
+            }
 
-        if (!this.isRefreshed()) {
-            this.refresh();
+            this.checkAndUpdateSubConfigs();
         }
 
         initServiceMetadata(provider);
         serviceMetadata.setServiceType(getInterfaceClass());
         serviceMetadata.setTarget(getRef());
         serviceMetadata.generateServiceKey();
+    }
 
-        if (!shouldExport()) {
-            return;
-        }
+    public synchronized void export() {
+        if (this.shouldExport() && !this.exported) {
+            this.init();
+            this.bootstrap.service(this);
 
-        if (shouldDelay()) {
-            DELAY_EXPORT_EXECUTOR.schedule(this::doExport, getDelay(), TimeUnit.MILLISECONDS);
-        } else {
-            doExport();
+            // check bootstrap state
+            if (!bootstrap.isInitialized()) {
+                throw new IllegalStateException("DubboBootstrap is not initialized");
+            }
+
+            if (!this.isRefreshed()) {
+                this.refresh();
+            }
+
+            if (!shouldExport()) {
+                return;
+            }
+
+            if (shouldDelay()) {
+                DELAY_EXPORT_EXECUTOR.schedule(this::doExport, getDelay(), TimeUnit.MILLISECONDS);
+            } else {
+                doExport();
+            }
         }
     }
 
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
index 7a5fb8f..d0b99a0 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
@@ -212,7 +212,7 @@ public class InMemoryWritableMetadataService implements WritableMetadataService
                 return;
             }
             logger.error("publishProvider interfaceName is empty . providerUrl: " + providerUrl.toFullString());
-        } catch (ClassNotFoundException e) {
+        } catch (Throwable e) {
             //ignore error
             logger.error("publishProvider getServiceDescriptor error. providerUrl: " + providerUrl.toFullString(), e);
         }
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/DynamicDirectory.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/DynamicDirectory.java
index 5ec17f8..fb38944 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/DynamicDirectory.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/DynamicDirectory.java
@@ -173,7 +173,7 @@ public abstract class DynamicDirectory<T> extends AbstractDirectory<T> implement
 
     @Override
     public List<Invoker<T>> getAllInvokers() {
-        return invokers;
+        return this.invokers == null ? Collections.emptyList() : this.invokers;
     }
 
     // The currently effective consumer url
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
index b391768..96745ea 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
@@ -527,7 +527,7 @@ public class RegistryDirectory<T> extends DynamicDirectory<T> {
 
     @Override
     public List<Invoker<T>> getAllInvokers() {
-        return invokers;
+        return this.invokers == null ? Collections.emptyList() : this.invokers;
     }
 
     @Override