You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2024/08/19 12:10:39 UTC

(servicecomb-java-chassis) branch master updated: enhancement of InvocationFilterChains (#4473)

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

liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/master by this push:
     new 98698a9b8 enhancement of InvocationFilterChains (#4473)
98698a9b8 is described below

commit 98698a9b8e98fb846b5b7eb61f0a2f6bab23e26e
Author: Karson <ka...@hotmail.com>
AuthorDate: Mon Aug 19 20:10:34 2024 +0800

    enhancement of InvocationFilterChains (#4473)
---
 .../core/filter/InvocationFilterChains.java          | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/core/src/main/java/org/apache/servicecomb/core/filter/InvocationFilterChains.java b/core/src/main/java/org/apache/servicecomb/core/filter/InvocationFilterChains.java
index 9739f0b2d..6dde66c33 100644
--- a/core/src/main/java/org/apache/servicecomb/core/filter/InvocationFilterChains.java
+++ b/core/src/main/java/org/apache/servicecomb/core/filter/InvocationFilterChains.java
@@ -14,6 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 package org.apache.servicecomb.core.filter;
 
 import java.util.Comparator;
@@ -24,6 +25,7 @@ import java.util.stream.Collectors;
 import org.apache.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
 
 public class InvocationFilterChains {
+
   private final List<? extends Filter> filters;
 
   private final Map<String, Map<String, FilterNode>> microserviceChains = new ConcurrentHashMapEx<>();
@@ -37,15 +39,13 @@ public class InvocationFilterChains {
   }
 
   public FilterNode findChain(String application, String serviceName) {
-    FilterNode filterNode = microserviceChains.computeIfAbsent(application, key -> new ConcurrentHashMapEx<>())
-        .get(serviceName);
-    if (filterNode == null) {
-      List<Filter> serviceFilters = filters.stream()
-          .filter(e -> e.enabledForMicroservice(application, serviceName))
-          .sorted(Comparator.comparingInt(a -> a.getOrder(application, serviceName))).collect(Collectors.toList());
-      filterNode = FilterNode.buildChain(serviceFilters);
-      microserviceChains.get(application).put(serviceName, filterNode);
-    }
-    return filterNode;
+    return microserviceChains.computeIfAbsent(application, key -> new ConcurrentHashMapEx<>())
+        .computeIfAbsent(serviceName, (serviceNameInner) -> {
+          List<Filter> serviceFilters = filters.stream()
+              .filter(e -> e.enabledForMicroservice(application, serviceName))
+              .sorted(Comparator.comparingInt(a -> a.getOrder(application, serviceName)))
+              .collect(Collectors.toList());
+          return FilterNode.buildChain(serviceFilters);
+        });
   }
 }