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/10/08 03:40:29 UTC

[dubbo] branch 3.0 updated: Ignore Generic Invoke for Injvm invocation copy (#8986)

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 23a08d9  Ignore Generic Invoke for Injvm invocation copy (#8986)
23a08d9 is described below

commit 23a08d9263b1a1aa3e368dc9f12cddd0162baecd
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Fri Oct 8 11:40:15 2021 +0800

    Ignore Generic Invoke for Injvm invocation copy (#8986)
---
 .../org/apache/dubbo/rpc/protocol/injvm/InjvmInvoker.java | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/dubbo-rpc/dubbo-rpc-injvm/src/main/java/org/apache/dubbo/rpc/protocol/injvm/InjvmInvoker.java b/dubbo-rpc/dubbo-rpc-injvm/src/main/java/org/apache/dubbo/rpc/protocol/injvm/InjvmInvoker.java
index f30cbee..43fbd97 100644
--- a/dubbo-rpc/dubbo-rpc-injvm/src/main/java/org/apache/dubbo/rpc/protocol/injvm/InjvmInvoker.java
+++ b/dubbo-rpc/dubbo-rpc-injvm/src/main/java/org/apache/dubbo/rpc/protocol/injvm/InjvmInvoker.java
@@ -17,6 +17,7 @@
 package org.apache.dubbo.rpc.protocol.injvm;
 
 import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.constants.CommonConstants;
 import org.apache.dubbo.common.threadpool.manager.ExecutorRepository;
 import org.apache.dubbo.common.utils.ArrayUtils;
 import org.apache.dubbo.common.utils.ReflectUtils;
@@ -145,7 +146,17 @@ public class InjvmInvoker<T> extends AbstractInvoker<T> {
         if (providerServiceModel == null) {
             return invocation;
         }
-        MethodDescriptor providerMethod = providerServiceModel.getServiceModel().getMethod(invocation.getMethodName(), desc);
+        String methodName = invocation.getMethodName();
+        if(CommonConstants.$INVOKE.equals(methodName)) {
+            // generic invoke, skip copy arguments
+            RpcInvocation copiedInvocation = new RpcInvocation(providerServiceModel, methodName, invocation.getServiceName(), invocation.getProtocolServiceKey(),
+                invocation.getParameterTypes(), invocation.getArguments(), new HashMap<>(invocation.getObjectAttachments()),
+                invocation.getInvoker(), invocation.getAttributes());
+            copiedInvocation.setInvoker(invoker);
+            return copiedInvocation;
+        }
+
+        MethodDescriptor providerMethod = providerServiceModel.getServiceModel().getMethod(methodName, desc);
         Object[] realArgument = null;
         if (providerMethod != null) {
             Class<?>[] pts = providerMethod.getParameterClasses();
@@ -166,7 +177,7 @@ public class InjvmInvoker<T> extends AbstractInvoker<T> {
                     realArgument = args;
                 }
 
-                RpcInvocation copiedInvocation = new RpcInvocation(providerServiceModel, invocation.getMethodName(), invocation.getServiceName(), invocation.getProtocolServiceKey(),
+                RpcInvocation copiedInvocation = new RpcInvocation(providerServiceModel, methodName, invocation.getServiceName(), invocation.getProtocolServiceKey(),
                     pts, realArgument, new HashMap<>(invocation.getObjectAttachments()),
                     invocation.getInvoker(), invocation.getAttributes());
                 copiedInvocation.setInvoker(invoker);