You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2021/12/07 08:09:27 UTC

[dubbo] branch 3.0 updated: [3.0] Reduce memory allocation (#9362)

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

albumenj pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.0 by this push:
     new 954c715  [3.0] Reduce memory allocation (#9362)
954c715 is described below

commit 954c715366931dd81cf66592700f6f54b1cbbe09
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Tue Dec 7 16:09:14 2021 +0800

    [3.0] Reduce memory allocation (#9362)
---
 .../dubbo/rpc/cluster/filter/support/ConsumerContextFilter.java  | 9 +++++----
 .../apache/dubbo/rpc/cluster/support/FailoverClusterInvoker.java | 6 +++++-
 2 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/filter/support/ConsumerContextFilter.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/filter/support/ConsumerContextFilter.java
index 1b803de..846a740 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/filter/support/ConsumerContextFilter.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/filter/support/ConsumerContextFilter.java
@@ -51,9 +51,12 @@ import static org.apache.dubbo.common.constants.CommonConstants.TIME_COUNTDOWN_K
 public class ConsumerContextFilter implements ClusterFilter, ClusterFilter.Listener {
 
     private ApplicationModel applicationModel;
+    private Set<PenetrateAttachmentSelector> supportedSelectors;
 
     public ConsumerContextFilter(ApplicationModel applicationModel) {
         this.applicationModel = applicationModel;
+        ExtensionLoader<PenetrateAttachmentSelector> selectorExtensionLoader = applicationModel.getExtensionLoader(PenetrateAttachmentSelector.class);
+        supportedSelectors = selectorExtensionLoader.getSupportedExtensionInstances();
     }
 
     @Override
@@ -68,11 +71,9 @@ public class ConsumerContextFilter implements ClusterFilter, ClusterFilter.Liste
             ((RpcInvocation) invocation).setInvoker(invoker);
         }
 
-        ExtensionLoader<PenetrateAttachmentSelector> selectorExtensionLoader = applicationModel.getExtensionLoader(PenetrateAttachmentSelector.class);
-        Set<String> supportedSelectors = selectorExtensionLoader.getSupportedExtensions();
         if (CollectionUtils.isNotEmpty(supportedSelectors)) {
-            for (String supportedSelector : supportedSelectors) {
-                Map<String, Object> selected = selectorExtensionLoader.getExtension(supportedSelector).select();
+            for (PenetrateAttachmentSelector supportedSelector : supportedSelectors) {
+                Map<String, Object> selected = supportedSelector.select();
                 if (CollectionUtils.isNotEmptyMap(selected)) {
                     ((RpcInvocation) invocation).addObjectAttachments(selected);
                 }
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/FailoverClusterInvoker.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/FailoverClusterInvoker.java
index d3abeb2..8781dc7 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/FailoverClusterInvoker.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/FailoverClusterInvoker.java
@@ -75,6 +75,7 @@ public class FailoverClusterInvoker<T> extends AbstractClusterInvoker<T> {
             Invoker<T> invoker = select(loadbalance, invocation, copyInvokers, invoked);
             invoked.add(invoker);
             RpcContext.getServiceContext().setInvokers((List) invoked);
+            boolean success = false;
             try {
                 Result result = invokeWithContext(invoker, invocation);
                 if (le != null && logger.isWarnEnabled()) {
@@ -88,6 +89,7 @@ public class FailoverClusterInvoker<T> extends AbstractClusterInvoker<T> {
                             + " using the dubbo version " + Version.getVersion() + ". Last error is: "
                             + le.getMessage(), le);
                 }
+                success = true;
                 return result;
             } catch (RpcException e) {
                 if (e.isBiz()) { // biz exception.
@@ -97,7 +99,9 @@ public class FailoverClusterInvoker<T> extends AbstractClusterInvoker<T> {
             } catch (Throwable e) {
                 le = new RpcException(e.getMessage(), e);
             } finally {
-                providers.add(invoker.getUrl().getAddress());
+                if (!success) {
+                    providers.add(invoker.getUrl().getAddress());
+                }
             }
         }
         throw new RpcException(le.getCode(), "Failed to invoke the method "