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

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


The following commit(s) were added to refs/heads/3.0-multi-instances by this 
push:
     new 5568541  Add ServiceModel pass when init
5568541 is described below

commit 5568541f15cc9626ff8f05399b65af7a28594296
Author: Albumen Kevin <[email protected]>
AuthorDate: Mon Aug 30 12:01:15 2021 +0800

    Add ServiceModel pass when init
---
 .../src/main/java/org/apache/dubbo/common/URL.java |  6 ++----
 .../apache/dubbo/rpc/model/ServiceRepository.java  | 18 ++++++++----------
 .../org/apache/dubbo/config/ReferenceConfig.java   | 22 ++++++++++++----------
 .../org/apache/dubbo/config/ServiceConfig.java     | 20 ++++++++++++--------
 .../registry/integration/RegistryProtocol.java     |  3 +--
 .../dubbo/rpc/proxy/InvokerInvocationHandler.java  |  6 +-----
 .../dubbo/rpc/protocol/grpc/GrpcProtocolTest.java  | 12 +++++-------
 7 files changed, 41 insertions(+), 46 deletions(-)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java 
b/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java
index 654ecab..3674f9f 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java
@@ -549,8 +549,7 @@ class URL implements Serializable {
     }
 
     public URL setScopeModel(ScopeModel scopeModel) {
-        putAttribute(CommonConstants.SCOPE_MODEL, scopeModel);
-        return this;
+        return putAttribute(CommonConstants.SCOPE_MODEL, scopeModel);
     }
 
     public ScopeModel getScopeModel() {
@@ -558,8 +557,7 @@ class URL implements Serializable {
     }
 
     public URL setServiceModel(ServiceModel serviceModel) {
-        putAttribute(CommonConstants.SERVICE_MODEL, serviceModel);
-        return this;
+        return putAttribute(CommonConstants.SERVICE_MODEL, serviceModel);
     }
 
     public ServiceModel getServiceModel() {
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceRepository.java 
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceRepository.java
index e73caea..7207f1d 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceRepository.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceRepository.java
@@ -30,7 +30,6 @@ import org.apache.dubbo.config.ServiceConfigBase;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
@@ -115,15 +114,9 @@ public class ServiceRepository extends LifecycleAdapter 
implements FrameworkExt,
             serviceMetadata, null);
         consumers.putIfAbsent(serviceKey, consumerModel);
     }
-    public void registerConsumer(String serviceKey,
-                                 ServiceDescriptor serviceDescriptor,
-                                 ReferenceConfigBase<?> rc,
-                                 Object proxy,
-                                 ServiceMetadata serviceMetadata,
-                                 Map<String, AsyncMethodInfo> methodConfigs) {
-        ConsumerModel consumerModel = new 
ConsumerModel(serviceMetadata.getServiceKey(), proxy, serviceDescriptor, rc,
-            serviceMetadata, methodConfigs);
-        consumers.putIfAbsent(serviceKey, consumerModel);
+
+    public void registerConsumer(ConsumerModel consumerModel) {
+        consumers.putIfAbsent(consumerModel.getServiceKey(), consumerModel);
     }
 
     public void reRegisterConsumer(String newServiceKey, String serviceKey) {
@@ -145,6 +138,11 @@ public class ServiceRepository extends LifecycleAdapter 
implements FrameworkExt,
         providersWithoutGroup.putIfAbsent(keyWithoutGroup(serviceKey), 
providerModel);
     }
 
+    public void registerProvider(ProviderModel providerModel) {
+        providers.putIfAbsent(providerModel.getServiceKey(), providerModel);
+        
providersWithoutGroup.putIfAbsent(keyWithoutGroup(providerModel.getServiceKey()),
 providerModel);
+    }
+
     private static String keyWithoutGroup(String serviceKey) {
         String interfaceName = interfaceFromServiceKey(serviceKey);
         String version = versionFromServiceKey(serviceKey);
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
index 6bf4129..171745f 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
@@ -111,6 +111,8 @@ public class ReferenceConfig<T> extends 
ReferenceConfigBase<T> {
      */
     private ProxyFactory proxyFactory;
 
+    private ConsumerModel consumerModel;
+
     /**
      * The interface proxy reference
      */
@@ -257,13 +259,10 @@ public class ReferenceConfig<T> extends 
ReferenceConfigBase<T> {
 
         ServiceRepository repository = 
getApplicationModel().getApplicationServiceRepository();
         ServiceDescriptor serviceDescriptor = 
repository.registerService(interfaceClass);
-        repository.registerConsumer(
-            serviceMetadata.getServiceKey(),
-            serviceDescriptor,
-            this,
-            null,
-            serviceMetadata,
-            createAsyncMethodInfo());
+        consumerModel = new ConsumerModel(serviceMetadata.getServiceKey(), 
proxy, serviceDescriptor, this,
+            serviceMetadata, createAsyncMethodInfo());
+
+        repository.registerConsumer(consumerModel);
 
         serviceMetadata.getAttachments().putAll(referenceParameters);
 
@@ -272,7 +271,6 @@ public class ReferenceConfig<T> extends 
ReferenceConfigBase<T> {
         serviceMetadata.setTarget(ref);
         serviceMetadata.addAttribute(PROXY_CLASS_REF, ref);
 
-        ConsumerModel consumerModel = 
repository.lookupReferredService(serviceMetadata.getServiceKey());
         consumerModel.setProxyObject(ref);
         consumerModel.initMethodModels();
 
@@ -390,7 +388,8 @@ public class ReferenceConfig<T> extends 
ReferenceConfigBase<T> {
 
         URL consumerUrl = new ServiceConfigURL(CONSUMER_PROTOCOL, 
referenceParameters.get(REGISTER_IP_KEY), 0,
             referenceParameters.get(INTERFACE_KEY), referenceParameters);
-        consumerUrl.setScopeModel(getScopeModel());
+        consumerUrl = consumerUrl.setScopeModel(getScopeModel());
+        consumerUrl = consumerUrl.setServiceModel(consumerModel);
         MetadataUtils.publishServiceDefinition(consumerUrl);
 
         // create service proxy
@@ -404,7 +403,8 @@ public class ReferenceConfig<T> extends 
ReferenceConfigBase<T> {
      */
     private void createInvokerForLocal(Map<String, String> 
referenceParameters) {
         URL url = new ServiceConfigURL(LOCAL_PROTOCOL, LOCALHOST_VALUE, 0, 
interfaceClass.getName()).addParameters(referenceParameters);
-        url.setScopeModel(getScopeModel());
+        url = url.setScopeModel(getScopeModel());
+        url = url.setServiceModel(consumerModel);
         invoker = protocolSPI.refer(interfaceClass, url);
         if (logger.isInfoEnabled()) {
             logger.info("Using in jvm service " + interfaceClass.getName());
@@ -422,6 +422,7 @@ public class ReferenceConfig<T> extends 
ReferenceConfigBase<T> {
                 if (StringUtils.isEmpty(url.getPath())) {
                     url = url.setPath(interfaceName);
                 }
+                url = url.setServiceModel(consumerModel);
                 if (UrlUtils.isRegistry(url)) {
                     urls.add(url.putAttribute(REFER_KEY, referenceParameters));
                 } else {
@@ -445,6 +446,7 @@ public class ReferenceConfig<T> extends 
ReferenceConfigBase<T> {
                 if (monitorUrl != null) {
                     u = u.putAttribute(MONITOR_KEY, monitorUrl);
                 }
+                u = u.setServiceModel(consumerModel);
                 urls.add(u.putAttribute(REFER_KEY, referenceParameters));
             }
         }
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
index 254bfc4..8e5213d 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
@@ -43,6 +43,7 @@ import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.Protocol;
 import org.apache.dubbo.rpc.ProxyFactory;
 import org.apache.dubbo.rpc.cluster.ConfiguratorFactory;
+import org.apache.dubbo.rpc.model.ProviderModel;
 import org.apache.dubbo.rpc.model.ServiceDescriptor;
 import org.apache.dubbo.rpc.model.ServiceRepository;
 import org.apache.dubbo.rpc.service.GenericService;
@@ -124,6 +125,8 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
      */
     private ProxyFactory proxyFactory;
 
+    private ProviderModel providerModel;
+
     /**
      * Whether the provider has been exported
      */
@@ -355,13 +358,13 @@ public class ServiceConfig<T> extends 
ServiceConfigBase<T> {
     private void doExportUrls() {
         ServiceRepository repository = 
getApplicationModel().getApplicationServiceRepository();
         ServiceDescriptor serviceDescriptor = 
repository.registerService(getInterfaceClass());
-        repository.registerProvider(
-                getUniqueServiceName(),
-                ref,
-                serviceDescriptor,
-                this,
-                serviceMetadata
-        );
+        providerModel = new ProviderModel(getUniqueServiceName(),
+            ref,
+            serviceDescriptor,
+            this,
+            serviceMetadata);
+
+        repository.registerProvider(providerModel);
 
         List<URL> registryURLs = ConfigValidationUtils.loadRegistries(this, 
true);
 
@@ -536,7 +539,8 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> {
             url = this.getExtensionLoader(ConfiguratorFactory.class)
                     
.getExtension(url.getProtocol()).getConfigurator(url).configure(url);
         }
-        url.setScopeModel(getScopeModel());
+        url = url.setScopeModel(getScopeModel());
+        url =  url.setServiceModel(providerModel);
         return url;
     }
 
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
index 661771e..ca9bdfd 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
@@ -203,8 +203,7 @@ public class RegistryProtocol implements Protocol, 
ScopeModelAware {
     }
 
     private void registerStatedUrl(URL registryUrl, URL registeredProviderUrl, 
boolean registered) {
-        ApplicationModel applicationModel = 
getApplicationModel(registryUrl.getScopeModel());
-        ProviderModel model = 
applicationModel.getProviderModel(registeredProviderUrl.getServiceKey());
+        ProviderModel model = (ProviderModel) 
registeredProviderUrl.getServiceModel();
         model.addStatedUrl(new ProviderModel.RegisterStatedURL(
             registeredProviderUrl,
             registryUrl,
diff --git 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/proxy/InvokerInvocationHandler.java
 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/proxy/InvokerInvocationHandler.java
index 712bbe6..ca02f6b 100644
--- 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/proxy/InvokerInvocationHandler.java
+++ 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/proxy/InvokerInvocationHandler.java
@@ -23,7 +23,6 @@ import org.apache.dubbo.rpc.Constants;
 import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.RpcInvocation;
 import org.apache.dubbo.rpc.RpcServiceContext;
-import org.apache.dubbo.rpc.model.ApplicationModel;
 import org.apache.dubbo.rpc.model.ConsumerModel;
 
 import java.lang.reflect.Field;
@@ -54,11 +53,8 @@ public class InvokerInvocationHandler implements 
InvocationHandler {
     public InvokerInvocationHandler(Invoker<?> handler) {
         this.invoker = handler;
         this.url = invoker.getUrl();
-        String serviceKey = this.url.getServiceKey();
         this.protocolServiceKey = this.url.getProtocolServiceKey();
-        if (serviceKey != null) {
-            this.consumerModel = 
ApplicationModel.defaultModel().getConsumerModel(serviceKey);
-        }
+        this.consumerModel = (ConsumerModel) this.url.getServiceModel();
     }
 
     @Override
diff --git 
a/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java
 
b/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java
index 7de930d..798ed37 100644
--- 
a/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java
+++ 
b/dubbo-rpc/dubbo-rpc-grpc/src/test/java/org/apache/dubbo/rpc/protocol/grpc/GrpcProtocolTest.java
@@ -25,6 +25,7 @@ import org.apache.dubbo.rpc.Protocol;
 import org.apache.dubbo.rpc.ProxyFactory;
 import org.apache.dubbo.rpc.model.ApplicationModel;
 import org.apache.dubbo.rpc.model.AsyncMethodInfo;
+import org.apache.dubbo.rpc.model.ConsumerModel;
 import org.apache.dubbo.rpc.model.ServiceDescriptor;
 import org.apache.dubbo.rpc.model.ServiceMetadata;
 import org.apache.dubbo.rpc.protocol.grpc.support.DubboGreeterGrpc;
@@ -67,13 +68,10 @@ public class GrpcProtocolTest {
         
serviceMetadata.setServiceKey(URL.buildKey(DubboGreeterGrpc.IGreeter.class.getName(),
 null, null));
 
         Map<String, AsyncMethodInfo> methodConfigs = new HashMap<>();
-        
ApplicationModel.defaultModel().getApplicationServiceRepository().registerConsumer(
-            url.getServiceKey(),
-            serviceDescriptor,
-            mockReferenceConfig,
-            null,
-            serviceMetadata,
-            methodConfigs);
+        ConsumerModel consumerModel = new 
ConsumerModel(serviceMetadata.getServiceKey(), null, serviceDescriptor, 
mockReferenceConfig,
+            serviceMetadata, methodConfigs);
+
+        
ApplicationModel.defaultModel().getApplicationServiceRepository().registerConsumer(consumerModel);
 
         protocol.export(proxy.getInvoker(serviceImpl, 
DubboGreeterGrpc.IGreeter.class, url));
         serviceImpl = 
proxy.getProxy(protocol.refer(DubboGreeterGrpc.IGreeter.class, url));

Reply via email to