From 341c3daef93485201c4143aeef6dc6958a6c4f1e Mon Sep 17 00:00:00 2001 From: kezhenxu94 Date: Sat, 16 Feb 2019 17:54:07 +0800 Subject: [PATCH 1/6] refactor categorizing with Collectors.groupingBy --- .../integration/RegistryDirectory.java | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) 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 449bb286dce..6c55fd6cfc8 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 @@ -189,21 +189,29 @@ public void destroy() { @Override public synchronized void notify(List urls) { - List categoryUrls = urls.stream() + Map> categoryUrls = urls.stream() .filter(this::isValidCategory) .filter(this::isNotCompatibleFor26x) - .collect(Collectors.toList()); + .collect(Collectors.groupingBy(url -> { + if (UrlUtils.isConfigurator(url)) { + return CONFIGURATORS_CATEGORY; + } else if (UrlUtils.isRoute(url)) { + return ROUTERS_CATEGORY; + } else if (UrlUtils.isProvider(url)) { + return PROVIDERS_CATEGORY; + } + return ""; + })); - /** - * TODO Try to refactor the processing of these three type of urls using Collectors.groupBy()? - */ - this.configurators = Configurator.toConfigurators(classifyUrls(categoryUrls, UrlUtils::isConfigurator)) - .orElse(configurators); + List configuratorURLs = categoryUrls.getOrDefault(CONFIGURATORS_CATEGORY, Collections.emptyList()); + this.configurators = Configurator.toConfigurators(configuratorURLs).orElse(this.configurators); - toRouters(classifyUrls(categoryUrls, UrlUtils::isRoute)).ifPresent(this::addRouters); + List routerURLs = categoryUrls.getOrDefault(ROUTERS_CATEGORY, Collections.emptyList()); + toRouters(routerURLs).ifPresent(this::addRouters); // providers - refreshOverrideAndInvoker(classifyUrls(categoryUrls, UrlUtils::isProvider)); + List providerURLs = categoryUrls.getOrDefault(PROVIDERS_CATEGORY, Collections.emptyList()); + refreshOverrideAndInvoker(providerURLs); } private void refreshOverrideAndInvoker(List urls) { From 4214a0aafac1e2bffdaae13a22997ae28f12f3c5 Mon Sep 17 00:00:00 2001 From: kezhenxu94 Date: Sat, 16 Feb 2019 18:02:43 +0800 Subject: [PATCH 2/6] remove unused imports --- .../org/apache/dubbo/registry/integration/RegistryDirectory.java | 1 - 1 file changed, 1 deletion(-) 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 6c55fd6cfc8..a7d92d714cf 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 @@ -64,7 +64,6 @@ import static org.apache.dubbo.common.Constants.PROVIDERS_CATEGORY; import static org.apache.dubbo.common.Constants.ROUTERS_CATEGORY; import static org.apache.dubbo.common.Constants.ROUTE_PROTOCOL; -import static org.apache.dubbo.common.utils.UrlUtils.classifyUrls; /** From 67a23dcc2b51f93bc86b06bfdf31f04a41bd5a03 Mon Sep 17 00:00:00 2001 From: kezhenxu94 Date: Sat, 16 Feb 2019 18:03:50 +0800 Subject: [PATCH 3/6] replace hardcoded value with Constants --- .../apache/dubbo/registry/integration/RegistryDirectory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 a7d92d714cf..eeaf0c9553a 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 @@ -123,7 +123,7 @@ public RegistryDirectory(Class serviceType, URL url) { this.queryMap = StringUtils.parseQueryString(url.getParameterAndDecoded(Constants.REFER_KEY)); this.overrideDirectoryUrl = this.directoryUrl = turnRegistryUrlToConsumerUrl(url); String group = directoryUrl.getParameter(Constants.GROUP_KEY, ""); - this.multiGroup = group != null && ("*".equals(group) || group.contains(",")); + this.multiGroup = group != null && (Constants.ANY_VALUE.equals(group) || group.contains(",")); } private URL turnRegistryUrlToConsumerUrl(URL url) { @@ -433,7 +433,7 @@ private URL mergeUrl(URL providerUrl) { this.overrideDirectoryUrl = this.overrideDirectoryUrl.addParametersIfAbsent(providerUrl.getParameters()); // Merge the provider side parameters if ((providerUrl.getPath() == null || providerUrl.getPath() - .length() == 0) && "dubbo".equals(providerUrl.getProtocol())) { // Compatible version 1.0 + .length() == 0) && Constants.DOBBO_PROTOCOL.equals(providerUrl.getProtocol())) { // Compatible version 1.0 //fix by tony.chenl DUBBO-44 String path = directoryUrl.getParameter(Constants.INTERFACE_KEY); if (path != null) { From d463231ceeab0eaba7766e47912edacfc7bc6a62 Mon Sep 17 00:00:00 2001 From: kezhenxu94 Date: Sat, 16 Feb 2019 18:11:08 +0800 Subject: [PATCH 4/6] replace explicit types with diamond operators --- .../registry/integration/RegistryDirectory.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) 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 eeaf0c9553a..8e130b0a44e 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 @@ -290,7 +290,7 @@ private void refreshInvoker(List invokerUrls) { private List> toMergeInvokerList(List> invokers) { List> mergedInvokers = new ArrayList<>(); - Map>> groupMap = new HashMap>>(); + Map>> groupMap = new HashMap<>(); for (Invoker invoker : invokers) { String group = invoker.getUrl().getParameter(Constants.GROUP_KEY, ""); groupMap.computeIfAbsent(group, k -> new ArrayList<>()); @@ -350,11 +350,11 @@ private Optional> toRouters(List urls) { * @return invokers */ private Map> toInvokers(List urls) { - Map> newUrlInvokerMap = new HashMap>(); + Map> newUrlInvokerMap = new HashMap<>(); if (urls == null || urls.isEmpty()) { return newUrlInvokerMap; } - Set keys = new HashSet(); + Set keys = new HashSet<>(); String queryProtocols = this.queryMap.get(Constants.PROTOCOL_KEY); for (URL providerUrl : urls) { // If protocol is configured at the reference side, only the matching protocol is selected @@ -400,7 +400,7 @@ private Map> toInvokers(List urls) { enabled = url.getParameter(Constants.ENABLED_KEY, true); } if (enabled) { - invoker = new InvokerDelegate(protocol.refer(serviceType, url), url, providerUrl); + invoker = new InvokerDelegate<>(protocol.refer(serviceType, url), url, providerUrl); } } catch (Throwable t) { logger.error("Failed to refer invoker for interface:" + serviceType + ",url:(" + url + ")" + t.getMessage(), t); @@ -481,7 +481,7 @@ private URL overrideWithConfigurators(List configurators, URL url) private void destroyAllInvokers() { Map> localUrlInvokerMap = this.urlInvokerMap; // local reference if (localUrlInvokerMap != null) { - for (Invoker invoker : new ArrayList>(localUrlInvokerMap.values())) { + for (Invoker invoker : new ArrayList<>(localUrlInvokerMap.values())) { try { invoker.destroy(); } catch (Throwable t) { @@ -512,7 +512,7 @@ private void destroyUnusedInvokers(Map> oldUrlInvokerMap, Map for (Map.Entry> entry : oldUrlInvokerMap.entrySet()) { if (!newInvokers.contains(entry.getValue())) { if (deleted == null) { - deleted = new ArrayList(); + deleted = new ArrayList<>(); } deleted.add(entry.getKey()); } @@ -604,7 +604,7 @@ public boolean isAvailable() { } Map> localUrlInvokerMap = urlInvokerMap; if (localUrlInvokerMap != null && localUrlInvokerMap.size() > 0) { - for (Invoker invoker : new ArrayList>(localUrlInvokerMap.values())) { + for (Invoker invoker : new ArrayList<>(localUrlInvokerMap.values())) { if (invoker.isAvailable()) { return true; } From bcabb8ea215e6a9d4a2ff190c58a5efc0a2bc713 Mon Sep 17 00:00:00 2001 From: kezhenxu94 Date: Sun, 17 Feb 2019 12:09:20 +0800 Subject: [PATCH 5/6] nullability defect --- .../apache/dubbo/registry/integration/RegistryDirectory.java | 2 ++ 1 file changed, 2 insertions(+) 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 8e130b0a44e..4bc2a835a4a 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 @@ -52,6 +52,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -189,6 +190,7 @@ public void destroy() { @Override public synchronized void notify(List urls) { Map> categoryUrls = urls.stream() + .filter(Objects::nonNull) .filter(this::isValidCategory) .filter(this::isNotCompatibleFor26x) .collect(Collectors.groupingBy(url -> { From c29ca376ead75da5922771fa0b67579ea8a6c2c8 Mon Sep 17 00:00:00 2001 From: kezhenxu94 Date: Sun, 17 Feb 2019 13:55:55 +0800 Subject: [PATCH 6/6] rebase to latest --- .../apache/dubbo/registry/integration/RegistryDirectory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 4bc2a835a4a..f843871b6db 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 @@ -435,7 +435,7 @@ private URL mergeUrl(URL providerUrl) { this.overrideDirectoryUrl = this.overrideDirectoryUrl.addParametersIfAbsent(providerUrl.getParameters()); // Merge the provider side parameters if ((providerUrl.getPath() == null || providerUrl.getPath() - .length() == 0) && Constants.DOBBO_PROTOCOL.equals(providerUrl.getProtocol())) { // Compatible version 1.0 + .length() == 0) && Constants.DUBBO_PROTOCOL.equals(providerUrl.getProtocol())) { // Compatible version 1.0 //fix by tony.chenl DUBBO-44 String path = directoryUrl.getParameter(Constants.INTERFACE_KEY); if (path != null) {