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) {