This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch 2.6.x
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/2.6.x by this push:
new f62ca3f Dubbo ProviderConsumerRegTable class cause outOfMemory while
no provider available exception occurs (#8522)
f62ca3f is described below
commit f62ca3f71a6db624cd4e3b23a58ed7dacf736d91
Author: qixiaobo <[email protected]>
AuthorDate: Mon Aug 23 13:15:20 2021 +0800
Dubbo ProviderConsumerRegTable class cause outOfMemory while no provider
available exception occurs (#8522)
since create proxy error , so we must be the first consumer. Simply clear
ConcurrentHashSet
---
.../main/java/com/alibaba/dubbo/config/ReferenceConfig.java | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git
a/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/ReferenceConfig.java
b/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/ReferenceConfig.java
index 8be61c5..47ecfee 100644
---
a/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/ReferenceConfig.java
+++
b/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/ReferenceConfig.java
@@ -29,6 +29,8 @@ import com.alibaba.dubbo.config.annotation.Reference;
import com.alibaba.dubbo.config.model.ApplicationModel;
import com.alibaba.dubbo.config.model.ConsumerModel;
import com.alibaba.dubbo.config.support.Parameter;
+import com.alibaba.dubbo.registry.support.ConsumerInvokerWrapper;
+import com.alibaba.dubbo.registry.support.ProviderConsumerRegTable;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Protocol;
import com.alibaba.dubbo.rpc.ProxyFactory;
@@ -47,11 +49,13 @@ import java.io.IOException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.Set;
import static com.alibaba.dubbo.common.utils.NetUtils.isInvalidLocalHost;
@@ -423,7 +427,14 @@ public class ReferenceConfig<T> extends
AbstractReferenceConfig {
if (c && !invoker.isAvailable()) {
// make it possible for consumer to retry later if provider is
temporarily unavailable
initialized = false;
- throw new IllegalStateException("Failed to check the status of the
service " + interfaceName + ". No provider available for the service " + (group
== null ? "" : group + "/") + interfaceName + (version == null ? "" : ":" +
version) + " from the url " + invoker.getUrl() + " to the consumer " +
NetUtils.getLocalHost() + " use dubbo version " + Version.getVersion());
+ final String serviceKey = (group == null ? "" : group + "/") +
interfaceName + (version == null ? "" :
+ ":" + version);
+ Set<ConsumerInvokerWrapper> consumerInvoker =
ProviderConsumerRegTable.getConsumerInvoker(serviceKey);
+ if (consumerInvoker !=
Collections.<ConsumerInvokerWrapper>emptySet()) {
+ //since create proxy error , so we must be the first consumer.
Simply clear ConcurrentHashSet
+ consumerInvoker.clear();
+ }
+ throw new IllegalStateException("Failed to check the status of the
service " + interfaceName + ". No provider available for the service " +
serviceKey + " from the url " + invoker.getUrl() + " to the consumer " +
NetUtils.getLocalHost() + " use dubbo version " + Version.getVersion());
}
if (logger.isInfoEnabled()) {
logger.info("Refer dubbo service " + interfaceClass.getName() + "
from url " + invoker.getUrl());