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