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/09/15 02:56:15 UTC

[dubbo] branch 3.0 updated: Fix Triple Classloader & Add backward of ServiceMetadata (#8800)

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 6585e2d  Fix Triple Classloader & Add backward of ServiceMetadata (#8800)
6585e2d is described below

commit 6585e2d51f12cb4e61de72b1f7f5116355adb52f
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Wed Sep 15 10:55:58 2021 +0800

    Fix Triple Classloader & Add backward of ServiceMetadata (#8800)
---
 .../java/org/apache/dubbo/common/BaseServiceMetadata.java |  9 +++++++++
 .../java/org/apache/dubbo/rpc/model/ServiceModel.java     |  3 +++
 .../dubbo/rpc/protocol/tri/AbstractClientStream.java      |  2 +-
 .../dubbo/rpc/protocol/tri/AbstractServerStream.java      |  4 ++--
 .../dubbo/rpc/protocol/tri/TripleClientHandler.java       | 15 ++++++++-------
 5 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/BaseServiceMetadata.java b/dubbo-common/src/main/java/org/apache/dubbo/common/BaseServiceMetadata.java
index 4a438b6..a47726a 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/BaseServiceMetadata.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/BaseServiceMetadata.java
@@ -17,6 +17,7 @@
 package org.apache.dubbo.common;
 
 import org.apache.dubbo.common.utils.StringUtils;
+import org.apache.dubbo.rpc.model.ServiceModel;
 
 import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_VERSION;
 
@@ -30,6 +31,7 @@ public class BaseServiceMetadata {
     protected String serviceInterfaceName;
     protected String version;
     protected volatile String group;
+    private ServiceModel serviceModel;
 
     public static String buildServiceKey(String path, String group, String version) {
         int length = path == null ? 0 : path.length();
@@ -145,4 +147,11 @@ public class BaseServiceMetadata {
         this.group = group;
     }
 
+    public ServiceModel getServiceModel() {
+        return serviceModel;
+    }
+
+    public void setServiceModel(ServiceModel serviceModel) {
+        this.serviceModel = serviceModel;
+    }
 }
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceModel.java b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceModel.java
index 1d5ad15..1945862 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceModel.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceModel.java
@@ -51,6 +51,9 @@ public class ServiceModel {
         this.moduleModel = moduleModel;
         this.config = config;
         this.serviceMetadata = serviceMetadata;
+        if (serviceMetadata != null) {
+            serviceMetadata.setServiceModel(this);
+        }
         if (config != null) {
             this.classLoader = config.getInterfaceClassLoader();
         }
diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/AbstractClientStream.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/AbstractClientStream.java
index 7af76cf..d8156bd 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/AbstractClientStream.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/AbstractClientStream.java
@@ -124,7 +124,7 @@ public abstract class AbstractClientStream extends AbstractStream implements Str
         ClassLoader tccl = Thread.currentThread().getContextClassLoader();
         try {
             if (getConsumerModel() != null) {
-                ClassLoadUtil.switchContextLoader(getConsumerModel().getServiceInterfaceClass().getClassLoader());
+                ClassLoadUtil.switchContextLoader(getConsumerModel().getClassLoader());
             }
             if (getMethodDescriptor().isNeedWrap()) {
                 final TripleWrapper.TripleResponseWrapper wrapper = TripleUtil.unpack(data,
diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/AbstractServerStream.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/AbstractServerStream.java
index 36ebd88..f2309ef 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/AbstractServerStream.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/AbstractServerStream.java
@@ -94,7 +94,7 @@ public abstract class AbstractServerStream extends AbstractStream implements Str
         FrameworkServiceRepository repo = ScopeModelUtil.getFrameworkModel(url.getScopeModel()).getServiceRepository();
         final ProviderModel model = repo.lookupExportedService(url.getServiceKey());
         if (model != null) {
-            ClassLoadUtil.switchContextLoader(model.getServiceInterfaceClass().getClassLoader());
+            ClassLoadUtil.switchContextLoader(model.getClassLoader());
         }
         return model;
     }
@@ -140,7 +140,7 @@ public abstract class AbstractServerStream extends AbstractStream implements Str
         ClassLoader tccl = Thread.currentThread().getContextClassLoader();
         try {
             if (getProviderModel() != null) {
-                ClassLoadUtil.switchContextLoader(getProviderModel().getServiceInterfaceClass().getClassLoader());
+                ClassLoadUtil.switchContextLoader(getProviderModel().getClassLoader());
             }
             if (getMethodDescriptor() == null || getMethodDescriptor().isNeedWrap()) {
                 final TripleWrapper.TripleRequestWrapper wrapper = TripleUtil.unpack(data,
diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TripleClientHandler.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TripleClientHandler.java
index 97602b4..68b7ea1 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TripleClientHandler.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TripleClientHandler.java
@@ -16,12 +16,6 @@
  */
 package org.apache.dubbo.rpc.protocol.tri;
 
-import io.netty.channel.ChannelDuplexHandler;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelPromise;
-import io.netty.handler.codec.http2.Http2GoAwayFrame;
-import io.netty.handler.codec.http2.Http2SettingsFrame;
-import io.netty.util.ReferenceCountUtil;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.constants.CommonConstants;
 import org.apache.dubbo.common.stream.StreamObserver;
@@ -39,6 +33,13 @@ import org.apache.dubbo.rpc.model.ConsumerModel;
 import org.apache.dubbo.rpc.model.FrameworkModel;
 import org.apache.dubbo.rpc.model.MethodDescriptor;
 
+import io.netty.channel.ChannelDuplexHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelPromise;
+import io.netty.handler.codec.http2.Http2GoAwayFrame;
+import io.netty.handler.codec.http2.Http2SettingsFrame;
+import io.netty.util.ReferenceCountUtil;
+
 import java.util.Arrays;
 import java.util.List;
 
@@ -79,7 +80,7 @@ public class TripleClientHandler extends ChannelDuplexHandler {
 
         MethodDescriptor methodDescriptor = getTriMethodDescriptor(consumerModel,inv);
 
-        ClassLoadUtil.switchContextLoader(consumerModel.getServiceInterfaceClass().getClassLoader());
+        ClassLoadUtil.switchContextLoader(consumerModel.getClassLoader());
         AbstractClientStream stream;
         if (methodDescriptor.isUnary()) {
             stream = AbstractClientStream.unary(url);