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

[dubbo] branch 3.0-metadata-refactor updated: Make sure instance refresh task can always be started.

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

liujun pushed a commit to branch 3.0-metadata-refactor
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.0-metadata-refactor by this push:
     new 1448ebe  Make sure instance refresh task can always be started.
1448ebe is described below

commit 1448ebe90cfb846389b5f7e3626c7bd698eb7965
Author: ken.lj <ke...@gmail.com>
AuthorDate: Mon Dec 6 16:09:44 2021 +0800

    Make sure instance refresh task can always be started.
---
 .../dubbo/config/deploy/DefaultApplicationDeployer.java     | 13 +++++++++----
 .../dubbo/registry/client/AbstractServiceDiscovery.java     | 12 ++++++++++++
 .../client/metadata/ServiceInstanceMetadataUtils.java       |  8 ++++----
 3 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java
index a45fb7d..7645b6c 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java
@@ -146,8 +146,15 @@ public class DefaultApplicationDeployer extends AbstractDeployer<ApplicationMode
         dubboShutdownHook.unregister();
     }
 
+    /**
+     * Close registration of instance for pure Consumer process by setting registerConsumer to 'false'
+     * by default is true.
+     */
     private boolean isRegisterConsumerInstance() {
         Boolean registerConsumer = getApplication().getRegisterConsumer();
+        if (registerConsumer == null) {
+            return true;
+        }
         return Boolean.TRUE.equals(registerConsumer);
     }
 
@@ -582,10 +589,8 @@ public class DefaultApplicationDeployer extends AbstractDeployer<ApplicationMode
             return;
         }
 
-        exportMetadataService();
-
-        // if register consumer instance or has exported services
-        if (isRegisterConsumerInstance() || hasExportedServices()) {
+        if (isRegisterConsumerInstance()) {
+            exportMetadataService();
             if (hasPreparedApplicationInstance.compareAndSet(false, true)) {
                 // register the local ServiceInstance if required
                 registerServiceInstance();
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java
index 102f14c..ea67de6 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java
@@ -34,6 +34,7 @@ import java.util.List;
 import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_CLUSTER_KEY;
 import static org.apache.dubbo.metadata.RevisionResolver.EMPTY_REVISION;
 import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.EXPORTED_SERVICES_REVISION_PROPERTY_NAME;
+import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.isValidInstance;
 import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.setMetadataStorageType;
 
 /**
@@ -77,6 +78,10 @@ public abstract class AbstractServiceDiscovery implements ServiceDiscovery {
 
     public synchronized final void register() throws RuntimeException {
         this.serviceInstance = createServiceInstance();
+        if (isValidInstance(serviceInstance)) {
+            return;
+        }
+
         boolean revisionUpdated = calOrUpdateInstanceRevision();
         if (revisionUpdated) {
             reportMetadata();
@@ -93,7 +98,14 @@ public abstract class AbstractServiceDiscovery implements ServiceDiscovery {
     public synchronized final void update() throws RuntimeException {
         if (this.serviceInstance == null) {
             this.serviceInstance = createServiceInstance();
+        } else if (!isValidInstance(serviceInstance)) {
+            ServiceInstanceMetadataUtils.customizeInstance(serviceInstance, applicationModel);
         }
+
+        if (!isValidInstance(serviceInstance)) {
+            return;
+        }
+
         boolean revisionUpdated = calOrUpdateInstanceRevision();
         if (revisionUpdated) {
             doUpdate();
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataUtils.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataUtils.java
index 63879a6..361b83d 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataUtils.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataUtils.java
@@ -213,10 +213,6 @@ public class ServiceInstanceMetadataUtils {
         return null;
     }
 
-    public static boolean isInstanceUpdated(ServiceInstance instance) {
-        return "true".equals(instance.getExtendParams().get(INSTANCE_REVISION_UPDATED_KEY));
-    }
-
     public static void registerMetadataAndInstance(ApplicationModel applicationModel) {
         LOGGER.info("Start registering instance address to registry.");
         RegistryManager registryManager = applicationModel.getBeanFactory().getBean(RegistryManager.class);
@@ -251,6 +247,10 @@ public class ServiceInstanceMetadataUtils {
         });
     }
 
+    public static boolean isValidInstance(ServiceInstance instance) {
+        return instance != null && instance.getHost() != null && instance.getPort() != 0;
+    }
+
     /**
      * Set the default parameters via the specified {@link URL providerURL}
      *