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/12/01 02:05:28 UTC
[dubbo] branch 3.0 updated: [3.0] Opt ServiceInstance Memory Usage (#9331)
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 43d46d9 [3.0] Opt ServiceInstance Memory Usage (#9331)
43d46d9 is described below
commit 43d46d9d9e5037b1c89c2a27734b33c01bb6eca5
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Wed Dec 1 10:05:02 2021 +0800
[3.0] Opt ServiceInstance Memory Usage (#9331)
* [3.0] Opt ServiceInstance Memory Usage
* fix ut
* fix port
---
.../registry/client/DefaultServiceInstance.java | 62 ++++++++++++++++------
.../dubbo/registry/client/InstanceAddressURL.java | 6 +--
.../dubbo/registry/client/ServiceInstance.java | 10 +++-
.../listener/ServiceInstancesChangedListener.java | 2 +-
.../metadata/ServiceInstanceMetadataUtils.java | 6 +--
.../client/DefaultServiceInstanceTest.java | 2 +-
.../metadata/ServiceInstanceMetadataUtilsTest.java | 6 +--
.../zookeeper/ZookeeperServiceDiscoveryTest.java | 4 +-
8 files changed, 67 insertions(+), 31 deletions(-)
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/DefaultServiceInstance.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/DefaultServiceInstance.java
index a3e5fc9..476370e 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/DefaultServiceInstance.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/DefaultServiceInstance.java
@@ -23,6 +23,7 @@ import com.alibaba.fastjson.JSON;
import java.beans.Transient;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
@@ -31,7 +32,6 @@ import java.util.Objects;
import java.util.SortedMap;
import java.util.TreeMap;
-import static org.apache.dubbo.common.constants.CommonConstants.SCOPE_MODEL;
import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.ENDPOINTS;
import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.EXPORTED_SERVICES_REVISION_PROPERTY_NAME;
@@ -71,7 +71,7 @@ public class DefaultServiceInstance implements ServiceInstance {
*/
private transient Map<String, String> extendParams;
private transient List<Endpoint> endpoints;
- private transient Map<String, Object> attributes = new HashMap<>();
+ private transient ApplicationModel applicationModel;
private transient InstanceAddressURL instanceAddressURL = null;
public DefaultServiceInstance() {
@@ -87,7 +87,7 @@ public class DefaultServiceInstance implements ServiceInstance {
this.registryCluster = other.registryCluster;
this.address = null;
this.metadata = new HashMap<>(other.metadata);
- this.attributes = new HashMap<>(other.attributes);
+ this.applicationModel = other.applicationModel;
this.extendParams = other.extendParams != null ? new HashMap<>(other.extendParams) : other.extendParams;
this.endpoints = other.endpoints != null ? new ArrayList<>(other.endpoints) : other.endpoints;
}
@@ -192,11 +192,47 @@ public class DefaultServiceInstance implements ServiceInstance {
@Override
public Map<String, String> getExtendParams() {
if (extendParams == null) {
- extendParams = new HashMap<>();
+ return Collections.emptyMap();
}
return extendParams;
}
+ @Override
+ public String getExtendParam(String key) {
+ if (extendParams == null) {
+ return null;
+ }
+ return extendParams.get(key);
+ }
+
+ @Override
+ public String putExtendParam(String key, String value) {
+ if (extendParams == null) {
+ extendParams = new HashMap<>();
+ }
+ return extendParams.put(key, value);
+ }
+
+ @Override
+ public String putExtendParamIfAbsent(String key, String value) {
+ if (extendParams == null) {
+ extendParams = new HashMap<>();
+ }
+ return extendParams.putIfAbsent(key, value);
+ }
+
+ @Override
+ public String removeExtendParam(String key) {
+ if (extendParams == null) {
+ return null;
+ }
+ return extendParams.remove(key);
+ }
+
+ public void setEndpoints(List<Endpoint> endpoints) {
+ this.endpoints = endpoints;
+ }
+
public List<Endpoint> getEndpoints() {
if (endpoints == null) {
endpoints = new LinkedList<>(JSON.parseArray(metadata.get(ENDPOINTS), Endpoint.class));
@@ -223,20 +259,14 @@ public class DefaultServiceInstance implements ServiceInstance {
}
@Override
- @Transient
- public Map<String, Object> getAttributes() {
- return attributes;
- }
-
- @Override
public void setApplicationModel(ApplicationModel applicationModel) {
- this.attributes.put(SCOPE_MODEL, applicationModel);
+ this.applicationModel = applicationModel;
}
@Override
@Transient
public ApplicationModel getApplicationModel() {
- return (ApplicationModel) this.attributes.get(SCOPE_MODEL);
+ return applicationModel;
}
public void setMetadata(Map<String, String> metadata) {
@@ -311,22 +341,22 @@ public class DefaultServiceInstance implements ServiceInstance {
}
public static class Endpoint {
- Integer port;
+ int port;
String protocol;
public Endpoint() {
}
- public Endpoint(Integer port, String protocol) {
+ public Endpoint(int port, String protocol) {
this.port = port;
this.protocol = protocol;
}
- public Integer getPort() {
+ public int getPort() {
return port;
}
- public void setPort(Integer port) {
+ public void setPort(int port) {
this.port = port;
}
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/InstanceAddressURL.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/InstanceAddressURL.java
index ba5f7fc..a7c0f58 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/InstanceAddressURL.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/InstanceAddressURL.java
@@ -376,7 +376,7 @@ public class InstanceAddressURL extends URL {
return this;
}
- getInstance().getExtendParams().put(key, value);
+ getInstance().putExtendParam(key, value);
return this;
}
@@ -386,7 +386,7 @@ public class InstanceAddressURL extends URL {
return this;
}
- getInstance().getExtendParams().putIfAbsent(key, value);
+ getInstance().putExtendParamIfAbsent(key, value);
return this;
}
@@ -486,7 +486,7 @@ public class InstanceAddressURL extends URL {
if (StringUtils.isNotEmpty(value)) {
return value;
}
- return this.instance.getExtendParams().get(key);
+ return this.instance.getExtendParam(key);
}
private Map<String, String> getInstanceMetadata() {
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceInstance.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceInstance.java
index d3e363d..caa2ed7 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceInstance.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceInstance.java
@@ -90,9 +90,15 @@ public interface ServiceInstance extends Serializable {
Map<String, String> getExtendParams();
- Map<String, String> getAllParams();
+ String getExtendParam(String key);
+
+ String putExtendParam(String key, String value);
+
+ String putExtendParamIfAbsent(String key, String value);
- Map<String, Object> getAttributes();
+ String removeExtendParam(String key);
+
+ Map<String, String> getAllParams();
void setApplicationModel(ApplicationModel applicationModel);
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java
index 25f480b..f7f5aaa 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java
@@ -413,7 +413,7 @@ public class ServiceInstancesChangedListener {
// different protocols may have ports specified in meta
if (ServiceInstanceMetadataUtils.hasEndpoints(i)) {
DefaultServiceInstance.Endpoint endpoint = ServiceInstanceMetadataUtils.getEndpoint(i, protocol);
- if (endpoint != null && !endpoint.getPort().equals(i.getPort())) {
+ if (endpoint != null && endpoint.getPort() != i.getPort()) {
urls.add(((DefaultServiceInstance) i).copyFrom(endpoint).toURL());
continue;
}
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 267f57b..bc9064e 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
@@ -235,18 +235,18 @@ public class ServiceInstanceMetadataUtils {
if (!metadataInfo.calAndGetRevision().equals(existingInstanceRevision)) {
instance.getMetadata().put(EXPORTED_SERVICES_REVISION_PROPERTY_NAME, metadataInfo.calAndGetRevision());
if (existingInstanceRevision != null) {// skip the first registration.
- instance.getExtendParams().put(INSTANCE_REVISION_UPDATED_KEY, "true");
+ instance.putExtendParam(INSTANCE_REVISION_UPDATED_KEY, "true");
}
}
}
}
public static boolean isInstanceUpdated(ServiceInstance instance) {
- return "true".equals(instance.getExtendParams().get(INSTANCE_REVISION_UPDATED_KEY));
+ return "true".equals(instance.getExtendParam(INSTANCE_REVISION_UPDATED_KEY));
}
public static void resetInstanceUpdateKey(ServiceInstance instance) {
- instance.getExtendParams().remove(INSTANCE_REVISION_UPDATED_KEY);
+ instance.removeExtendParam(INSTANCE_REVISION_UPDATED_KEY);
}
public static void registerMetadataAndInstance(ServiceInstance serviceInstance) {
diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/DefaultServiceInstanceTest.java b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/DefaultServiceInstanceTest.java
index 8f073b4..ea33a98 100644
--- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/DefaultServiceInstanceTest.java
+++ b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/DefaultServiceInstanceTest.java
@@ -87,7 +87,7 @@ public class DefaultServiceInstanceTest {
Map<String, String> allParams = instance.getAllParams();
assertEquals(instance.getMetadata().size(), allParams.size());
assertEquals("dubbo", allParams.get("site"));
- instance.getExtendParams().put("key", "value");
+ instance.putExtendParam("key", "value");
Map<String, String> allParams2 = instance.getAllParams();
assertNotSame(allParams, allParams2);
assertEquals(instance.getMetadata().size() + instance.getExtendParams().size(), allParams2.size());
diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataUtilsTest.java b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataUtilsTest.java
index 7a83c1d..6942b4a 100644
--- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataUtilsTest.java
+++ b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataUtilsTest.java
@@ -141,7 +141,7 @@ public class ServiceInstanceMetadataUtilsTest {
@Test
public void testInstanceUpdateKey() {
- serviceInstance.getExtendParams().put(INSTANCE_REVISION_UPDATED_KEY, "true");
+ serviceInstance.putExtendParam(INSTANCE_REVISION_UPDATED_KEY, "true");
Assertions.assertTrue(ServiceInstanceMetadataUtils.isInstanceUpdated(serviceInstance));
ServiceInstanceMetadataUtils.resetInstanceUpdateKey(serviceInstance);
@@ -180,12 +180,12 @@ public class ServiceInstanceMetadataUtilsTest {
ServiceInstanceMetadataUtils.calInstanceRevision(serviceDiscovery, serviceInstance);
Assertions.assertEquals(metadataInfo.calAndGetRevision(), serviceInstance.getMetadata().get(EXPORTED_SERVICES_REVISION_PROPERTY_NAME));
- Assertions.assertNull(serviceInstance.getExtendParams().get(INSTANCE_REVISION_UPDATED_KEY));
+ Assertions.assertNull(serviceInstance.getExtendParam(INSTANCE_REVISION_UPDATED_KEY));
writableMetadataService.getMetadataInfos().get(DEFAULT_KEY).addService(new MetadataInfo.ServiceInfo(url2));
ServiceInstanceMetadataUtils.calInstanceRevision(serviceDiscovery, serviceInstance);
Assertions.assertEquals(metadataInfo.calAndGetRevision(), serviceInstance.getMetadata().get(EXPORTED_SERVICES_REVISION_PROPERTY_NAME));
- Assertions.assertEquals(serviceInstance.getExtendParams().get(INSTANCE_REVISION_UPDATED_KEY), "true");
+ Assertions.assertEquals(serviceInstance.getExtendParam(INSTANCE_REVISION_UPDATED_KEY), "true");
}
@Test
diff --git a/dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryTest.java b/dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryTest.java
index 52d5fee..aa54bd9 100644
--- a/dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryTest.java
+++ b/dubbo-registry/dubbo-registry-zookeeper/src/test/java/org/apache/dubbo/registry/zookeeper/ZookeeperServiceDiscoveryTest.java
@@ -27,8 +27,8 @@ import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.rpc.model.ScopeModelUtil;
import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.internal.util.collections.Sets;
@@ -106,7 +106,7 @@ public class ZookeeperServiceDiscoveryTest {
Map<String, String> metadata = new HashMap<>();
metadata.put("message", "Hello,World");
serviceInstance.setMetadata(metadata);
- serviceInstance.getExtendParams().put(INSTANCE_REVISION_UPDATED_KEY, "true");
+ serviceInstance.putExtendParam(INSTANCE_REVISION_UPDATED_KEY, "true");
discovery.update(serviceInstance);