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