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 726cdd7  Fix DubboProtocol state & Fix NPE when destroy (#8809)
726cdd7 is described below

commit 726cdd74c2cae880da8f7c953f59cc23ee439541
Author: Albumen Kevin <[email protected]>
AuthorDate: Wed Sep 15 23:35:20 2021 +0800

    Fix DubboProtocol state & Fix NPE when destroy (#8809)
    
    * Fix DubboProtocol state & Fix NPE when destroy
    
    * Fix
---
 .../apache/dubbo/rpc/model/ApplicationModel.java   |  9 ++++---
 .../org/apache/dubbo/rpc/model/FrameworkModel.java |  3 ++-
 .../org/apache/dubbo/rpc/model/ModuleModel.java    |  7 +++--
 .../org/apache/dubbo/rpc/model/ScopeModel.java     |  9 ++++---
 .../bootstrap/DubboBootstrapMultiInstanceTest.java | 30 ++++++++++++----------
 ...MultipleRegistryCenterExportProviderFilter.java |  4 +--
 .../injvm/MultipleRegistryCenterInjvmFilter.java   |  8 ++++--
 .../SingleRegistryCenterExportProviderFilter.java  |  4 +--
 .../injvm/SingleRegistryCenterInjvmFilter.java     |  4 +--
 .../StandardMetadataServiceURLBuilder.java         | 13 +++++-----
 .../registry/integration/RegistryProtocol.java     | 20 +++++++++------
 ...dubbo.registry.client.ServiceInstanceCustomizer |  3 ---
 .../rpc/protocol/dubbo/CallbackServiceCodec.java   |  4 ++-
 13 files changed, 69 insertions(+), 49 deletions(-)

diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java 
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
index cfb3a8d..fab944b 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
@@ -168,7 +168,7 @@ public class ApplicationModel extends ScopeModel {
     @Override
     protected void initialize() {
         super.initialize();
-        internalModule = new ModuleModel(this);
+        internalModule = new ModuleModel(this, true);
         this.serviceRepository = new ServiceRepository(this);
 
         ExtensionLoader<ApplicationInitListener> extensionLoader = 
this.getExtensionLoader(ApplicationInitListener.class);
@@ -264,10 +264,13 @@ public class ApplicationModel extends ScopeModel {
         return getCurrentConfig().getName();
     }
 
-    public synchronized void addModule(ModuleModel moduleModel) {
+    public synchronized void addModule(ModuleModel moduleModel, boolean 
isInternal) {
         if (!this.moduleModels.contains(moduleModel)) {
             this.moduleModels.add(moduleModel);
             moduleModel.setInternalName(buildInternalName(ModuleModel.NAME, 
getInternalId(), moduleIndex.getAndIncrement()));
+            if (!isInternal) {
+                pubModuleModels.add(moduleModel);
+            }
         }
     }
 
@@ -349,7 +352,7 @@ public class ApplicationModel extends ScopeModel {
 
     @Override
     protected boolean checkIfClassLoaderCanRemoved(ClassLoader classLoader) {
-        return !containsClassLoader(classLoader);
+        return super.checkIfClassLoaderCanRemoved(classLoader) && 
!containsClassLoader(classLoader);
     }
 
     protected boolean containsClassLoader(ClassLoader classLoader) {
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java 
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java
index ffbeb3b..6ed1917 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/FrameworkModel.java
@@ -140,6 +140,7 @@ public class FrameworkModel extends ScopeModel {
 
     @Override
     protected boolean checkIfClassLoaderCanRemoved(ClassLoader classLoader) {
-        return applicationModels.stream().noneMatch(applicationModel -> 
applicationModel.containsClassLoader(classLoader));
+        return super.checkIfClassLoaderCanRemoved(classLoader) &&
+            applicationModels.stream().noneMatch(applicationModel -> 
applicationModel.containsClassLoader(classLoader));
     }
 }
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java 
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java
index 56daf48..eb14730 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ModuleModel.java
@@ -44,12 +44,15 @@ public class ModuleModel extends ScopeModel {
     private ModuleServiceRepository serviceRepository;
     private ModuleConfigManager moduleConfigManager;
 
-
     public ModuleModel(ApplicationModel applicationModel) {
+        this(applicationModel, false);
+    }
+
+    public ModuleModel(ApplicationModel applicationModel, boolean isInternal) {
         super(applicationModel, ExtensionScope.MODULE);
         Assert.notNull(applicationModel, "ApplicationModel can not be null");
         this.applicationModel = applicationModel;
-        applicationModel.addModule(this);
+        applicationModel.addModule(this, isInternal);
         initialize();
         Assert.notNull(applicationModel, "ApplicationModel can not be null");
     }
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ScopeModel.java 
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ScopeModel.java
index 6ae533d..145ac58 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ScopeModel.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ScopeModel.java
@@ -21,6 +21,8 @@ import org.apache.dubbo.common.config.Environment;
 import org.apache.dubbo.common.extension.ExtensionAccessor;
 import org.apache.dubbo.common.extension.ExtensionDirector;
 import org.apache.dubbo.common.extension.ExtensionScope;
+import org.apache.dubbo.common.logger.Logger;
+import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.utils.ConcurrentHashSet;
 
 import java.util.Collections;
@@ -33,6 +35,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 public abstract class ScopeModel implements ExtensionAccessor {
+    protected static final Logger LOGGER = 
LoggerFactory.getLogger(ScopeModel.class);
 
     /**
      * The internal name is used to represent the hierarchy of the model tree, 
such as:
@@ -94,13 +97,13 @@ public abstract class ScopeModel implements 
ExtensionAccessor {
     public void destroy() {
         if (destroyed.compareAndSet(false, true)) {
             try {
+                onDestroy();
                 HashSet<ClassLoader> copyOfClassLoaders = new 
HashSet<>(classLoaders);
                 for (ClassLoader classLoader : copyOfClassLoaders) {
                     removeClassLoader(classLoader);
                 }
-                onDestroy();
             } catch (Throwable t) {
-                t.printStackTrace();
+                LOGGER.error("Error happened when destroying ScopeModel.", t);
             }
         }
     }
@@ -172,7 +175,7 @@ public abstract class ScopeModel implements 
ExtensionAccessor {
     }
 
     protected boolean checkIfClassLoaderCanRemoved(ClassLoader classLoader) {
-        return true;
+        return classLoader != null && 
!classLoader.equals(ScopeModel.class.getClassLoader());
     }
 
     public Set<ClassLoader> getClassLoaders() {
diff --git 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapMultiInstanceTest.java
 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapMultiInstanceTest.java
index 6fa0d00..76e2df4 100644
--- 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapMultiInstanceTest.java
+++ 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapMultiInstanceTest.java
@@ -34,22 +34,24 @@ import org.apache.dubbo.rpc.model.ApplicationModel;
 import org.apache.dubbo.rpc.model.FrameworkModel;
 import org.apache.dubbo.rpc.model.FrameworkServiceRepository;
 import org.apache.dubbo.rpc.model.ModuleModel;
-import org.junit.jupiter.api.AfterAll;
+
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import java.util.List;
 
+import static 
org.apache.dubbo.metadata.MetadataConstants.METADATA_PUBLISH_DELAY_KEY;
+
 public class DubboBootstrapMultiInstanceTest {
 
     private static ZookeeperSingleRegistryCenter registryCenter;
 
     private static RegistryConfig registryConfig;
 
-    @BeforeAll
-    public static void setup() {
+    @BeforeEach
+    public void setup() {
         registryCenter = new 
ZookeeperSingleRegistryCenter(NetUtils.getAvailablePort());
         registryCenter.startup();
         RegistryCenter.Instance instance = 
registryCenter.getRegistryCenterInstance().get(0);
@@ -60,15 +62,11 @@ public class DubboBootstrapMultiInstanceTest {
 
     }
 
-    @AfterAll
-    public static void teardown() {
-        registryCenter.shutdown();
-    }
-
     @AfterEach
-    protected void afterEach() {
+    public void afterEach() {
         SysProps.clear();
         DubboBootstrap.reset();
+        registryCenter.shutdown();
     }
 
     @Test
@@ -93,8 +91,8 @@ public class DubboBootstrapMultiInstanceTest {
             DemoService demoServiceFromProvider = 
dubboBootstrap1.getCache().get(DemoService.class);
             Assertions.assertNull(demoServiceFromProvider);
         } finally {
-            dubboBootstrap1.destroy();
             dubboBootstrap2.destroy();
+            dubboBootstrap1.destroy();
         }
     }
 
@@ -160,8 +158,9 @@ public class DubboBootstrapMultiInstanceTest {
     }
 
     @Test
-    public void testMultiModuleApplication() {
+    public void testMultiModuleApplication() throws InterruptedException {
 
+        SysProps.setProperty(METADATA_PUBLISH_DELAY_KEY, "1");
         String version1 = "1.0";
         String version2 = "2.0";
         String version3 = "3.0";
@@ -212,6 +211,7 @@ public class DubboBootstrapMultiInstanceTest {
 
             providerBootstrap.start();
 
+            Thread.sleep(100);
 
             // consumer app
             consumerBootstrap = DubboBootstrap.newInstance();
@@ -230,10 +230,12 @@ public class DubboBootstrapMultiInstanceTest {
             consumerBootstrap.start();
 
             DemoService referProxy1 = 
consumerBootstrap.getCache().get(DemoService.class.getName() + ":" + version1);
-            referProxy1.sayName("dubbo");
+            Assertions.assertEquals("say:dubbo", referProxy1.sayName("dubbo"));
 
             DemoService referProxy2 = 
consumerBootstrap.getCache().get(DemoService.class.getName() + ":" + version2);
-            referProxy2.sayName("dubbo");
+            Assertions.assertEquals("say:dubbo", referProxy2.sayName("dubbo"));
+
+            Assertions.assertNotEquals(referProxy1, referProxy2);
         } finally {
             if (providerBootstrap != null) {
                 providerBootstrap.destroy();
diff --git 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/exportprovider/MultipleRegistryCenterExportProviderFilter.java
 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/exportprovider/MultipleRegistryCenterExportProviderFilter.java
index dcb7bcd..0457238 100644
--- 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/exportprovider/MultipleRegistryCenterExportProviderFilter.java
+++ 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/exportprovider/MultipleRegistryCenterExportProviderFilter.java
@@ -21,8 +21,8 @@ import org.apache.dubbo.common.extension.Activate;
 import org.apache.dubbo.rpc.Filter;
 import org.apache.dubbo.rpc.Invocation;
 import org.apache.dubbo.rpc.Invoker;
-import org.apache.dubbo.rpc.RpcException;
 import org.apache.dubbo.rpc.Result;
+import org.apache.dubbo.rpc.RpcException;
 
 @Activate(group = CommonConstants.PROVIDER, order = 10001)
 public class MultipleRegistryCenterExportProviderFilter implements 
Filter,Filter.Listener {
@@ -55,7 +55,7 @@ public class MultipleRegistryCenterExportProviderFilter 
implements Filter,Filter
 
     @Override
     public void onResponse(Result appResponse, Invoker<?> invoker, Invocation 
invocation) {
-        response = appResponse.getValue().toString();
+        response = String.valueOf(appResponse.getValue());
     }
 
     @Override
diff --git 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/injvm/MultipleRegistryCenterInjvmFilter.java
 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/injvm/MultipleRegistryCenterInjvmFilter.java
index 658924d..679ff83 100644
--- 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/injvm/MultipleRegistryCenterInjvmFilter.java
+++ 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/multiple/injvm/MultipleRegistryCenterInjvmFilter.java
@@ -18,7 +18,11 @@ package org.apache.dubbo.integration.multiple.injvm;
 
 import org.apache.dubbo.common.constants.CommonConstants;
 import org.apache.dubbo.common.extension.Activate;
-import org.apache.dubbo.rpc.*;
+import org.apache.dubbo.rpc.Filter;
+import org.apache.dubbo.rpc.Invocation;
+import org.apache.dubbo.rpc.Invoker;
+import org.apache.dubbo.rpc.Result;
+import org.apache.dubbo.rpc.RpcException;
 
 @Activate(group = CommonConstants.PROVIDER, order = 10200)
 public class MultipleRegistryCenterInjvmFilter implements 
Filter,Filter.Listener{
@@ -51,7 +55,7 @@ public class MultipleRegistryCenterInjvmFilter implements 
Filter,Filter.Listener
 
     @Override
     public void onResponse(Result appResponse, Invoker<?> invoker, Invocation 
invocation) {
-        response = appResponse.getValue().toString();
+        response = String.valueOf(appResponse.getValue());
     }
 
     @Override
diff --git 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/single/exportprovider/SingleRegistryCenterExportProviderFilter.java
 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/single/exportprovider/SingleRegistryCenterExportProviderFilter.java
index 79cbc93..26bbcda 100644
--- 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/single/exportprovider/SingleRegistryCenterExportProviderFilter.java
+++ 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/single/exportprovider/SingleRegistryCenterExportProviderFilter.java
@@ -21,8 +21,8 @@ import org.apache.dubbo.common.extension.Activate;
 import org.apache.dubbo.rpc.Filter;
 import org.apache.dubbo.rpc.Invocation;
 import org.apache.dubbo.rpc.Invoker;
-import org.apache.dubbo.rpc.RpcException;
 import org.apache.dubbo.rpc.Result;
+import org.apache.dubbo.rpc.RpcException;
 
 @Activate(group = CommonConstants.PROVIDER, order = 10000)
 public class SingleRegistryCenterExportProviderFilter implements 
Filter,Filter.Listener {
@@ -55,7 +55,7 @@ public class SingleRegistryCenterExportProviderFilter 
implements Filter,Filter.L
 
     @Override
     public void onResponse(Result appResponse, Invoker<?> invoker, Invocation 
invocation) {
-        response = appResponse.getValue().toString();
+        response = String.valueOf(appResponse.getValue());
     }
 
     @Override
diff --git 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/single/injvm/SingleRegistryCenterInjvmFilter.java
 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/single/injvm/SingleRegistryCenterInjvmFilter.java
index a27a7b9..6580b7e 100644
--- 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/single/injvm/SingleRegistryCenterInjvmFilter.java
+++ 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/integration/single/injvm/SingleRegistryCenterInjvmFilter.java
@@ -21,8 +21,8 @@ import org.apache.dubbo.common.extension.Activate;
 import org.apache.dubbo.rpc.Filter;
 import org.apache.dubbo.rpc.Invocation;
 import org.apache.dubbo.rpc.Invoker;
-import org.apache.dubbo.rpc.RpcException;
 import org.apache.dubbo.rpc.Result;
+import org.apache.dubbo.rpc.RpcException;
 
 @Activate(group = CommonConstants.PROVIDER, order = 10000)
 public class SingleRegistryCenterInjvmFilter implements Filter,Filter.Listener 
{
@@ -55,7 +55,7 @@ public class SingleRegistryCenterInjvmFilter implements 
Filter,Filter.Listener {
 
     @Override
     public void onResponse(Result appResponse, Invoker<?> invoker, Invocation 
invocation) {
-        response = appResponse.getValue().toString();
+        response = String.valueOf(appResponse.getValue());
     }
 
     @Override
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java
index e407124..e895a1d 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java
@@ -27,7 +27,7 @@ import org.apache.dubbo.remoting.Constants;
 import org.apache.dubbo.rpc.model.ApplicationModel;
 import org.apache.dubbo.rpc.model.ScopeModelAware;
 
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
@@ -72,20 +72,21 @@ public class StandardMetadataServiceURLBuilder implements 
MetadataServiceURLBuil
     public List<URL> build(ServiceInstance serviceInstance) {
         Map<String, String> paramsMap = 
getMetadataServiceURLsParams(serviceInstance);
 
-        List<URL> urls = new ArrayList<>(paramsMap.size());
-
         String serviceName = serviceInstance.getServiceName();
 
         String host = serviceInstance.getHost();
 
+        URL url;
         if (paramsMap.isEmpty()) {
             // ServiceInstance Metadata is empty. Happened when registry not 
support metadata write.
-            urls.add(generateUrlWithoutMetadata(serviceName, host, 
serviceInstance.getPort()));
+            url = generateUrlWithoutMetadata(serviceName, host, 
serviceInstance.getPort());
         } else {
-            urls.add(generateWithMetadata(serviceName, host, paramsMap));
+            url = generateWithMetadata(serviceName, host, paramsMap);
         }
 
-        return urls;
+        url = url.setScopeModel(serviceInstance.getApplicationModel());
+
+        return Collections.singletonList(url);
     }
 
     private URL generateWithMetadata(String serviceName, String host, 
Map<String, String> params) {
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 7d4767c..dbcd8ac 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
@@ -603,10 +603,12 @@ public class RegistryProtocol implements Protocol, 
ScopeModelAware {
 
         for (ApplicationModel applicationModel : 
frameworkModel.getApplicationModels()) {
             if 
(applicationModel.getModelEnvironment().getConfiguration().convert(Boolean.class,
 org.apache.dubbo.registry.Constants.ENABLE_CONFIGURATION_LISTEN, true)) {
-                for (ModuleModel moduleModel : 
applicationModel.getModuleModels()) {
-                    
moduleModel.getExtensionLoader(GovernanceRuleRepository.class).getDefaultExtension()
-                        .removeListener(applicationModel.getApplicationName() 
+ CONFIGURATORS_SUFFIX,
-                            getProviderConfigurationListener(moduleModel));
+                for (ModuleModel moduleModel : 
applicationModel.getPubModuleModels()) {
+                    if 
(moduleModel.getServiceRepository().getExportedServices().size() > 0) {
+                        
moduleModel.getExtensionLoader(GovernanceRuleRepository.class).getDefaultExtension()
+                            
.removeListener(applicationModel.getApplicationName() + CONFIGURATORS_SUFFIX,
+                                getProviderConfigurationListener(moduleModel));
+                    }
                 }
             }
         }
@@ -879,10 +881,12 @@ public class RegistryProtocol implements Protocol, 
ScopeModelAware {
                         registry.unsubscribe(subscribeUrl, listener);
                         ApplicationModel applicationModel = 
getApplicationModel(registerUrl.getScopeModel());
                         if 
(applicationModel.getModelEnvironment().getConfiguration().convert(Boolean.class,
 ENABLE_CONFIGURATION_LISTEN, true)) {
-                            for (ModuleModel moduleModel : 
applicationModel.getModuleModels()) {
-                                
moduleModel.getExtensionLoader(GovernanceRuleRepository.class).getDefaultExtension()
-                                    
.removeListener(subscribeUrl.getServiceKey() + CONFIGURATORS_SUFFIX,
-                                        
serviceConfigurationListeners.remove(subscribeUrl.getServiceKey()));
+                            for (ModuleModel moduleModel : 
applicationModel.getPubModuleModels()) {
+                                if 
(moduleModel.getServiceRepository().getExportedServices().size() > 0) {
+                                    
moduleModel.getExtensionLoader(GovernanceRuleRepository.class).getDefaultExtension()
+                                        
.removeListener(subscribeUrl.getServiceKey() + CONFIGURATORS_SUFFIX,
+                                            
serviceConfigurationListeners.remove(subscribeUrl.getServiceKey()));
+                                }
                             }
                         }
                     }
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceInstanceCustomizer
 
b/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceInstanceCustomizer
index 1f517c8..aa9a685 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceInstanceCustomizer
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceInstanceCustomizer
@@ -1,6 +1,3 @@
 
metadata-url=org.apache.dubbo.registry.client.metadata.MetadataServiceURLParamsMetadataCustomizer
-exported-revision=org.apache.dubbo.registry.client.metadata.ExportedServicesRevisionMetadataCustomizer
-subscribed-revision=org.apache.dubbo.registry.client.metadata.SubscribedServicesRevisionMetadataCustomizer
 
protocol-ports=org.apache.dubbo.registry.client.metadata.ProtocolPortsMetadataCustomizer
-instance-port=org.apache.dubbo.config.metadata.ServiceInstancePortCustomizer
 
instance-metadata=org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataCustomizer
diff --git 
a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java
 
b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java
index 2eec406..922b181 100644
--- 
a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java
+++ 
b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java
@@ -72,11 +72,13 @@ class CallbackServiceCodec {
     private final ProxyFactory proxyFactory;
     private final Protocol protocolSPI;
     private final FrameworkModel frameworkModel;
+    private final DubboProtocol dubboProtocol;
 
     public CallbackServiceCodec(FrameworkModel frameworkModel) {
         this.frameworkModel = frameworkModel;
         proxyFactory = 
frameworkModel.getExtensionLoader(ProxyFactory.class).getAdaptiveExtension();
         protocolSPI = 
frameworkModel.getExtensionLoader(Protocol.class).getExtension(DUBBO_PROTOCOL);
+        dubboProtocol = (DubboProtocol) 
frameworkModel.getExtensionLoader(Protocol.class).getExtension(DubboProtocol.NAME,
 false);
     }
 
     private static byte isCallBack(URL url, String protocolServiceKey, String 
methodName, int argIndex) {
@@ -322,7 +324,7 @@ class CallbackServiceCodec {
         // need get URL from channel and env when decode
         URL url = null;
         try {
-            url = DubboProtocol.getDubboProtocol().getInvoker(channel, 
inv).getUrl();
+            url = dubboProtocol.getInvoker(channel, inv).getUrl();
         } catch (RemotingException e) {
             if (logger.isInfoEnabled()) {
                 logger.info(e.getMessage(), e);

Reply via email to