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/12 12:36:56 UTC

[dubbo] branch 3.0 updated: Add test case for InMemoryMetadataServiceTest (#8753)

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 8376a6d  Add test case for InMemoryMetadataServiceTest (#8753)
8376a6d is described below

commit 8376a6d1338f461f5962976d60ec72f5f424547c
Author: 灼华 <43...@users.noreply.github.com>
AuthorDate: Sun Sep 12 20:36:48 2021 +0800

    Add test case for InMemoryMetadataServiceTest (#8753)
    
    * Add test case for InMemoryMetadataServiceTest
    
    1、add test case
    2、extract constant
    3、add modifier for variables
    
    * Remove unused import
---
 .../dubbo/common/constants/CommonConstants.java    |  4 +++
 .../org/apache/dubbo/metadata/MetadataInfo.java    |  3 +-
 .../apache/dubbo/metadata/RevisionResolver.java    |  5 ---
 .../java/org/apache/dubbo/registry/Registry.java   |  3 +-
 .../apache/dubbo/registry/RegistryNotifier.java    |  4 ++-
 .../org/apache/dubbo/registry/RegistryService.java |  2 +-
 .../dubbo/registry/client/ServiceDiscovery.java    |  2 +-
 .../metadata/ServiceInstanceMetadataUtils.java     |  3 +-
 .../store/InMemoryWritableMetadataService.java     | 16 +++++-----
 .../store/InMemoryMetadataServiceTest.java         | 37 ++++++++++++++++++++++
 .../zookeeper/ZookeeperServiceDiscovery.java       |  1 -
 11 files changed, 59 insertions(+), 21 deletions(-)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java
index c1019ea..8ca961e 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/CommonConstants.java
@@ -450,6 +450,10 @@ public interface CommonConstants {
 
     int DEFAULT_REFER_THREAD_NUM = 10;
 
+    int DEFAULT_DELAY_NOTIFICATION_TIME = 5000;
+
+    int DEFAULT_DELAY_EXECUTE_TIMES = 10;
+
     /**
      * Url merge processor key
      */
diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataInfo.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataInfo.java
index d05a730..e9f53ed 100644
--- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataInfo.java
+++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataInfo.java
@@ -44,6 +44,7 @@ import static org.apache.dubbo.common.constants.QosConstants.ACCEPT_FOREIGN_IP;
 import static org.apache.dubbo.common.constants.QosConstants.QOS_ENABLE;
 import static org.apache.dubbo.common.constants.QosConstants.QOS_HOST;
 import static org.apache.dubbo.common.constants.QosConstants.QOS_PORT;
+import static org.apache.dubbo.metadata.RevisionResolver.EMPTY_REVISION;
 import static org.apache.dubbo.remoting.Constants.BIND_IP_KEY;
 import static org.apache.dubbo.remoting.Constants.BIND_PORT_KEY;
 import static org.apache.dubbo.rpc.Constants.INTERFACES;
@@ -107,7 +108,7 @@ public class MetadataInfo implements Serializable {
         }
 
         if (CollectionUtils.isEmptyMap(services)) {
-            this.revision = RevisionResolver.getEmptyRevision(app);
+            this.revision = EMPTY_REVISION;
         } else {
             StringBuilder sb = new StringBuilder();
             sb.append(app);
diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/RevisionResolver.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/RevisionResolver.java
index 58bca71..155295c 100644
--- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/RevisionResolver.java
+++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/RevisionResolver.java
@@ -23,13 +23,8 @@ public class RevisionResolver {
 
     public static final String EMPTY_REVISION = "0";
 
-
     public static String calRevision(String metadata) {
         return MD5Utils.getMd5(metadata);
     }
 
-    public static String getEmptyRevision(String app) {
-        return EMPTY_REVISION;
-    }
-
 }
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/Registry.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/Registry.java
index 95137e5..957e5e1 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/Registry.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/Registry.java
@@ -19,6 +19,7 @@ package org.apache.dubbo.registry;
 import org.apache.dubbo.common.Node;
 import org.apache.dubbo.common.URL;
 
+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_DELAY_NOTIFICATION_TIME;
 import static org.apache.dubbo.common.constants.CommonConstants.REGISTRY_DELAY_NOTIFICATION_KEY;
 
 /**
@@ -29,7 +30,7 @@ import static org.apache.dubbo.common.constants.CommonConstants.REGISTRY_DELAY_N
  */
 public interface Registry extends Node, RegistryService {
     default int getDelay() {
-        return getUrl().getParameter(REGISTRY_DELAY_NOTIFICATION_KEY, 5000);
+        return getUrl().getParameter(REGISTRY_DELAY_NOTIFICATION_KEY, DEFAULT_DELAY_NOTIFICATION_TIME);
     }
 
     default void reExportRegister(URL url) {
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/RegistryNotifier.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/RegistryNotifier.java
index 3b3fd2f..c4967b7 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/RegistryNotifier.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/RegistryNotifier.java
@@ -26,6 +26,8 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_DELAY_EXECUTE_TIMES;
+
 public abstract class RegistryNotifier {
 
     private static final Logger logger = LoggerFactory.getLogger(RegistryNotifier.class);
@@ -69,7 +71,7 @@ public abstract class RegistryNotifier {
             scheduler.schedule(new NotificationTask(this, notifyTime), -delta, TimeUnit.MILLISECONDS);
         } else {
             // check if more than 10 calls
-            if (!shouldDelay.get() && executeTime.incrementAndGet() > 10) {
+            if (!shouldDelay.get() && executeTime.incrementAndGet() > DEFAULT_DELAY_EXECUTE_TIMES) {
                 shouldDelay.set(true);
             }
             scheduler.submit(new NotificationTask(this, notifyTime));
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/RegistryService.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/RegistryService.java
index 6bd9259..66d0c91 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/RegistryService.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/RegistryService.java
@@ -74,7 +74,7 @@ public interface RegistryService {
      * Unsubscribe
      * <p>
      * Unsubscribing is required to support the contract:<br>
-     * 1. If don't subscribe, ignore it directly.<br>
+     * 1. If you don't subscribe, ignore it directly.<br>
      * 2. Unsubscribe by full URL match.<br>
      *
      * @param url      Subscription condition, not allowed to be empty, e.g. consumer://10.20.153.10/org.apache.dubbo.foo.BarService?version=1.0.0&application=kylin
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscovery.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscovery.java
index 5569835..5f2533d 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscovery.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscovery.java
@@ -142,7 +142,7 @@ public interface ServiceDiscovery extends Prioritized {
 
     /**
      * Gets the {@link Page pagination} of {@link ServiceInstance service instances} by the specified service name.
-     * It's equal to {@link #getInstances(String, int, int, boolean)} with <code>healthyOnly == true</code>
+     * It's equal to {@link #getInstances(String, int, int, boolean)} with <code>healthyOnly == false</code>
      *
      * @param serviceName the service name
      * @param offset      the offset of request , the number "0" indicates first page
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 45bd23d..787fd11 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
@@ -29,7 +29,6 @@ import org.apache.dubbo.registry.client.DefaultServiceInstance.Endpoint;
 import org.apache.dubbo.registry.client.ServiceDiscovery;
 import org.apache.dubbo.registry.client.ServiceInstance;
 import org.apache.dubbo.registry.client.ServiceInstanceCustomizer;
-import org.apache.dubbo.registry.client.metadata.store.InMemoryWritableMetadataService;
 import org.apache.dubbo.registry.client.metadata.store.RemoteMetadataServiceImpl;
 import org.apache.dubbo.registry.support.AbstractRegistryFactory;
 
@@ -225,7 +224,7 @@ public class ServiceInstanceMetadataUtils {
         WritableMetadataService writableMetadataService = WritableMetadataService.getDefaultExtension(instance.getApplicationModel());
         MetadataInfo metadataInfo = writableMetadataService.getMetadataInfos().get(registryCluster);
         if (metadataInfo == null) {
-            metadataInfo = ((InMemoryWritableMetadataService) writableMetadataService).getDefaultMetadataInfo();
+            metadataInfo = writableMetadataService.getDefaultMetadataInfo();
         }
         if (metadataInfo != null) {
             String existingInstanceRevision = instance.getMetadata().get(EXPORTED_SERVICES_REVISION_PROPERTY_NAME);
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
index 4cd2618..d7e44fe 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
@@ -87,19 +87,19 @@ public class InMemoryWritableMetadataService implements WritableMetadataService,
      * All exported {@link URL urls} {@link Map} whose key is the return value of {@link URL#getServiceKey()} method
      * and value is the {@link SortedSet sorted set} of the {@link URL URLs}
      */
-    ConcurrentNavigableMap<String, SortedSet<URL>> exportedServiceURLs = new ConcurrentSkipListMap<>();
-    URL metadataServiceURL;
-    ConcurrentMap<String, MetadataInfo> metadataInfos;
+    private ConcurrentNavigableMap<String, SortedSet<URL>> exportedServiceURLs = new ConcurrentSkipListMap<>();
+    private URL metadataServiceURL;
+    private ConcurrentMap<String, MetadataInfo> metadataInfos;
 
     // used to mark whether current metadata info is being updated to registry,
     // readLock for export or unExport which are support concurrency update,
     // writeLock for ServiceInstance update which should not work during exporting services
-    final ReentrantReadWriteLock updateLock = new ReentrantReadWriteLock();
-    final Semaphore metadataSemaphore = new Semaphore(0);
-    final Map<String, Set<String>> serviceToAppsMapping = new HashMap<>();
+    private final ReentrantReadWriteLock updateLock = new ReentrantReadWriteLock();
+    private final Semaphore metadataSemaphore = new Semaphore(0);
+    private final Map<String, Set<String>> serviceToAppsMapping = new HashMap<>();
 
-    String instanceMetadata;
-    ConcurrentMap<String, InstanceMetadataChangedListener> instanceMetadataChangedListenerMap = new ConcurrentHashMap<>();
+    private String instanceMetadata;
+    private ConcurrentMap<String, InstanceMetadataChangedListener> instanceMetadataChangedListenerMap = new ConcurrentHashMap<>();
 
 
     // ==================================================================================== //
diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/store/InMemoryMetadataServiceTest.java b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/store/InMemoryMetadataServiceTest.java
index d2417ce..8e99418 100644
--- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/store/InMemoryMetadataServiceTest.java
+++ b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/store/InMemoryMetadataServiceTest.java
@@ -16,9 +16,12 @@
  */
 package org.apache.dubbo.registry.client.metadata.store;
 
+import com.google.gson.Gson;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.config.ApplicationConfig;
 import org.apache.dubbo.metadata.MetadataInfo;
+import org.apache.dubbo.metadata.MetadataService;
+import org.apache.dubbo.metadata.definition.model.ServiceDefinition;
 import org.apache.dubbo.registry.MockLogger;
 import org.apache.dubbo.rpc.model.ApplicationModel;
 
@@ -27,6 +30,7 @@ import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 
 import java.util.Map;
+import java.util.SortedSet;
 
 import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;
 import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;
@@ -174,4 +178,37 @@ public class InMemoryMetadataServiceTest {
         assertEquals(0, defaultMetadataInfo.getServices().size());
         assertNull(defaultMetadataInfo.getServiceInfo(url.getProtocolServiceKey()));
     }
+
+    @Test
+    public void testServiceDefinition() {
+        URL url = URL.valueOf("dubbo://30.225.21.30:20880/org.apache.dubbo.registry.service.DemoService");
+        InMemoryWritableMetadataService metadataService = new InMemoryWritableMetadataService();
+        metadataService.setApplicationModel(ApplicationModel.defaultModel());
+        metadataService.publishServiceDefinition(url);
+
+        String serviceDefinition = metadataService.getServiceDefinition(url.getServiceInterface(), url.getVersion(), url.getGroup());
+        Gson gson = new Gson();
+        ServiceDefinition serviceDefinitionBuilder = gson.fromJson(serviceDefinition, ServiceDefinition.class);
+        assertEquals(serviceDefinitionBuilder.getCanonicalName(), url.getServiceInterface());
+    }
+
+    @Test
+    public void testSubscribe() {
+        InMemoryWritableMetadataService metadataService = new InMemoryWritableMetadataService();
+        metadataService.setApplicationModel(ApplicationModel.defaultModel());
+
+        URL url = URL.valueOf("dubbo://30.225.21.30:20880/org.apache.dubbo.registry.service.DemoService");
+        metadataService.subscribeURL(url);
+
+        URL url2 = URL.valueOf("dubbo://30.225.21.30:20880/org.apache.dubbo.registry.service.DemoService2");
+        metadataService.subscribeURL(url2);
+
+        URL url3 = URL.valueOf("dubbo://30.225.21.30:20880/" + MetadataService.class.getName());
+        metadataService.subscribeURL(url3);
+
+        SortedSet<String> subscribedURLs = metadataService.getSubscribedURLs();
+        assertEquals(subscribedURLs.size(), 2);
+        assertEquals(subscribedURLs.first(), url.toFullString());
+        assertEquals(subscribedURLs.last(), url2.toFullString());
+    }
 }
diff --git a/dubbo-registry/dubbo-registry-zookeeper/src/main/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscovery.java b/dubbo-registry/dubbo-registry-zookeeper/src/main/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscovery.java
index 403741e..0b43f42 100644
--- a/dubbo-registry/dubbo-registry-zookeeper/src/main/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscovery.java
+++ b/dubbo-registry/dubbo-registry-zookeeper/src/main/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscovery.java
@@ -196,7 +196,6 @@ public class ZookeeperServiceDiscovery extends AbstractServiceDiscovery {
         } catch (KeeperException.NodeExistsException e) {
             // ignored
             if (logger.isDebugEnabled()) {
-
                 logger.debug(e);
             }
         } catch (Exception e) {