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());

Reply via email to