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

iluo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git


The following commit(s) were added to refs/heads/master by this push:
     new ccce69e  Issue2583 (#2614)
ccce69e is described below

commit ccce69e75fd34a48f02899cb5a61c07742c17c43
Author: Ian Luo <[email protected]>
AuthorDate: Tue Oct 9 16:37:28 2018 +0800

    Issue2583 (#2614)
    
    * update README
    
    *     #2583: ApplicationModel serviceName is not unique
---
 .../dubbo/config/model/ApplicationModel.java       | 39 +++++++++++-----------
 .../org/apache/dubbo/qos/command/impl/Offline.java |  4 +--
 .../org/apache/dubbo/qos/command/impl/Online.java  |  4 +--
 3 files changed, 24 insertions(+), 23 deletions(-)

diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/model/ApplicationModel.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/model/ApplicationModel.java
index d728fb4..36d4f03 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/model/ApplicationModel.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/model/ApplicationModel.java
@@ -21,13 +21,15 @@ import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.utils.ConcurrentHashSet;
 import org.apache.dubbo.rpc.Invoker;
 
-import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
+import java.util.HashSet;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
+import static java.util.stream.Collectors.toSet;
+
 // TODO need to adjust project structure in order to fully utilize the methods 
introduced here.
 public class ApplicationModel {
 
@@ -36,42 +38,41 @@ public class ApplicationModel {
     /**
      * full qualified class name -> provided service
      */
-    private static final ConcurrentMap<String, ProviderModel> providedServices 
= new ConcurrentHashMap<String, ProviderModel>();
+    private static final ConcurrentMap<String, Set<ProviderModel>> 
providedServices = new ConcurrentHashMap<>();
     /**
      * full qualified class name -> subscribe service
      */
-    private static final ConcurrentMap<String, ConsumerModel> consumedServices 
= new ConcurrentHashMap<String, ConsumerModel>();
+    private static final ConcurrentMap<String, Set<ConsumerModel>> 
consumedServices = new ConcurrentHashMap<>();
 
-    public static final ConcurrentMap<String, Set<Invoker>> 
providedServicesInvoker = new ConcurrentHashMap<String, Set<Invoker>>();
+    private static final ConcurrentMap<String, Set<Invoker>> 
providedServicesInvoker = new ConcurrentHashMap<>();
 
-    public static List<ConsumerModel> allConsumerModels() {
-        return new ArrayList<ConsumerModel>(consumedServices.values());
+    public static Collection<ConsumerModel> allConsumerModels() {
+        return 
consumedServices.values().stream().flatMap(Collection::stream).collect(toSet());
     }
 
-    public static ProviderModel getProviderModel(String serviceName) {
-        return providedServices.get(serviceName);
+    public static Collection<ProviderModel> allProviderModels() {
+       return 
providedServices.values().stream().flatMap(Collection::stream).collect(toSet());
     }
 
-    public static ConsumerModel getConsumerModel(String serviceName) {
-        return consumedServices.get(serviceName);
+    public static Collection<ProviderModel> getProviderModel(String 
serviceName) {
+        return providedServices.get(serviceName);
     }
 
-    public static List<ProviderModel> allProviderModels() {
-        return new ArrayList<ProviderModel>(providedServices.values());
+    public static Collection<ConsumerModel> getConsumerModel(String 
serviceName) {
+        return consumedServices.get(serviceName);
     }
 
-    public static boolean initConsumerModel(String serviceName, ConsumerModel 
consumerModel) {
-        if (consumedServices.putIfAbsent(serviceName, consumerModel) != null) {
+    public static void initConsumerModel(String serviceName, ConsumerModel 
consumerModel) {
+        Set<ConsumerModel> consumerModels = 
consumedServices.computeIfAbsent(serviceName, k -> new HashSet<>());
+        if (!consumerModels.add(consumerModel)) {
             logger.warn("Already register the same consumer:" + serviceName);
-            return false;
         }
-        return true;
     }
 
     public static void initProviderModel(String serviceName, ProviderModel 
providerModel) {
-        if (providedServices.put(serviceName, providerModel) != null) {
+        Set<ProviderModel> providerModels = 
providedServices.computeIfAbsent(serviceName, k -> new HashSet<>());
+        if (!providerModels.add(providerModel)) {
             logger.warn("already register the provider service: " + 
serviceName);
-            return;
         }
     }
 
diff --git 
a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Offline.java
 
b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Offline.java
index 59ac30d..a886e7e 100644
--- 
a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Offline.java
+++ 
b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Offline.java
@@ -29,7 +29,7 @@ import org.apache.dubbo.registry.RegistryFactory;
 import org.apache.dubbo.registry.support.ProviderConsumerRegTable;
 import org.apache.dubbo.registry.support.ProviderInvokerWrapper;
 
-import java.util.List;
+import java.util.Collection;
 import java.util.Set;
 
 @Cmd(name = "offline", summary = "offline dubbo", example = {
@@ -49,7 +49,7 @@ public class Offline implements BaseCommand {
         }
         boolean hasService = false;
 
-        List<ProviderModel> providerModelList = 
ApplicationModel.allProviderModels();
+        Collection<ProviderModel> providerModelList = 
ApplicationModel.allProviderModels();
         for (ProviderModel providerModel : providerModelList) {
             if (providerModel.getServiceName().matches(servicePattern)) {
                 hasService = true;
diff --git 
a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Online.java
 
b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Online.java
index 20714d4..10cf453 100644
--- 
a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Online.java
+++ 
b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/Online.java
@@ -29,7 +29,7 @@ import org.apache.dubbo.registry.RegistryFactory;
 import org.apache.dubbo.registry.support.ProviderConsumerRegTable;
 import org.apache.dubbo.registry.support.ProviderInvokerWrapper;
 
-import java.util.List;
+import java.util.Collection;
 import java.util.Set;
 
 @Cmd(name = "online", summary = "online dubbo", example = {
@@ -50,7 +50,7 @@ public class Online implements BaseCommand {
 
         boolean hasService = false;
 
-        List<ProviderModel> providerModelList = 
ApplicationModel.allProviderModels();
+        Collection<ProviderModel> providerModelList = 
ApplicationModel.allProviderModels();
         for (ProviderModel providerModel : providerModelList) {
             if (providerModel.getServiceName().matches(servicePattern)) {
                 hasService = true;

Reply via email to