You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by vi...@apache.org on 2020/02/05 06:58:04 UTC

[dubbo] branch issue_4991 created (now 70da28d)

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

victory pushed a change to branch issue_4991
in repository https://gitbox.apache.org/repos/asf/dubbo.git.


      at 70da28d  optimize the zk connection condition. #4991

This branch includes the following new commits:

     new 29e74da  Merge branch 'master' of github.com:apache/incubator-dubbo
     new 70da28d  optimize the zk connection condition. #4991

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[dubbo] 02/02: optimize the zk connection condition. #4991

Posted by vi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

victory pushed a commit to branch issue_4991
in repository https://gitbox.apache.org/repos/asf/dubbo.git

commit 70da28da1823a90ecb924117a6f3b70d4da6b876
Author: cvictory <sh...@gmail.com>
AuthorDate: Wed Feb 5 14:56:35 2020 +0800

    optimize the zk connection condition. #4991
---
 .../support/AbstractZookeeperTransporter.java      | 25 +++++++----
 .../support/AbstractZookeeperTransporterTest.java  | 49 +++++++++++++++++++++-
 2 files changed, 65 insertions(+), 9 deletions(-)

diff --git a/dubbo-remoting/dubbo-remoting-zookeeper/src/main/java/org/apache/dubbo/remoting/zookeeper/support/AbstractZookeeperTransporter.java b/dubbo-remoting/dubbo-remoting-zookeeper/src/main/java/org/apache/dubbo/remoting/zookeeper/support/AbstractZookeeperTransporter.java
index 2b85d10..4a13df0 100644
--- a/dubbo-remoting/dubbo-remoting-zookeeper/src/main/java/org/apache/dubbo/remoting/zookeeper/support/AbstractZookeeperTransporter.java
+++ b/dubbo-remoting/dubbo-remoting-zookeeper/src/main/java/org/apache/dubbo/remoting/zookeeper/support/AbstractZookeeperTransporter.java
@@ -20,6 +20,7 @@ import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.constants.RemotingConstants;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
+import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.remoting.zookeeper.ZookeeperClient;
 import org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter;
 
@@ -54,20 +55,20 @@ public abstract class AbstractZookeeperTransporter implements ZookeeperTransport
         ZookeeperClient zookeeperClient;
         List<String> addressList = getURLBackupAddress(url);
         // The field define the zookeeper server , including protocol, host, port, username, password
-        if ((zookeeperClient = fetchAndUpdateZookeeperClientCache(addressList)) != null && zookeeperClient.isConnected()) {
+        if ((zookeeperClient = fetchAndUpdateZookeeperClientCache(addressList, url.getUsername())) != null && zookeeperClient.isConnected()) {
             logger.info("find valid zookeeper client from the cache for address: " + url);
             return zookeeperClient;
         }
         // avoid creating too many connections, so add lock
         synchronized (zookeeperClientMap) {
-            if ((zookeeperClient = fetchAndUpdateZookeeperClientCache(addressList)) != null && zookeeperClient.isConnected()) {
+            if ((zookeeperClient = fetchAndUpdateZookeeperClientCache(addressList, url.getUsername())) != null && zookeeperClient.isConnected()) {
                 logger.info("find valid zookeeper client from the cache for address: " + url);
                 return zookeeperClient;
             }
 
             zookeeperClient = createZookeeperClient(url);
             logger.info("No valid zookeeper client found from cache, therefore create a new client for url. " + url);
-            writeToClientMap(addressList, zookeeperClient);
+            writeToClientMap(addressList, url.getUsername(), zookeeperClient);
         }
         return zookeeperClient;
     }
@@ -88,16 +89,17 @@ public abstract class AbstractZookeeperTransporter implements ZookeeperTransport
      * @param addressList
      * @return
      */
-    ZookeeperClient fetchAndUpdateZookeeperClientCache(List<String> addressList) {
+    ZookeeperClient fetchAndUpdateZookeeperClientCache(List<String> addressList, String userName) {
 
         ZookeeperClient zookeeperClient = null;
         for (String address : addressList) {
-            if ((zookeeperClient = zookeeperClientMap.get(address)) != null && zookeeperClient.isConnected()) {
+            if ((zookeeperClient = zookeeperClientMap.get(getZookeeperMapKey(userName, address))) != null
+                    && zookeeperClient.isConnected()) {
                 break;
             }
         }
         if (zookeeperClient != null && zookeeperClient.isConnected()) {
-            writeToClientMap(addressList, zookeeperClient);
+            writeToClientMap(addressList, userName, zookeeperClient);
         }
         return zookeeperClient;
     }
@@ -122,9 +124,9 @@ public abstract class AbstractZookeeperTransporter implements ZookeeperTransport
      * @param addressList
      * @param zookeeperClient
      */
-    void writeToClientMap(List<String> addressList, ZookeeperClient zookeeperClient) {
+    void writeToClientMap(List<String> addressList, String userName, ZookeeperClient zookeeperClient) {
         for (String address : addressList) {
-            zookeeperClientMap.put(address, zookeeperClient);
+            zookeeperClientMap.put(getZookeeperMapKey(userName, address), zookeeperClient);
         }
     }
 
@@ -156,4 +158,11 @@ public abstract class AbstractZookeeperTransporter implements ZookeeperTransport
     Map<String, ZookeeperClient> getZookeeperClientMap() {
         return zookeeperClientMap;
     }
+
+    private String getZookeeperMapKey(String userName, String address) {
+        if (StringUtils.isEmpty(userName)) {
+            return address;
+        }
+        return userName + "@" + address;
+    }
 }
diff --git a/dubbo-remoting/dubbo-remoting-zookeeper/src/test/java/org/apache/dubbo/remoting/zookeeper/support/AbstractZookeeperTransporterTest.java b/dubbo-remoting/dubbo-remoting-zookeeper/src/test/java/org/apache/dubbo/remoting/zookeeper/support/AbstractZookeeperTransporterTest.java
index 43cf481..c9fe1e7 100644
--- a/dubbo-remoting/dubbo-remoting-zookeeper/src/test/java/org/apache/dubbo/remoting/zookeeper/support/AbstractZookeeperTransporterTest.java
+++ b/dubbo-remoting/dubbo-remoting-zookeeper/src/test/java/org/apache/dubbo/remoting/zookeeper/support/AbstractZookeeperTransporterTest.java
@@ -99,6 +99,41 @@ public class AbstractZookeeperTransporterTest {
         checkFetchAndUpdateCacheNotNull(url2);
         URL url3 = URL.valueOf("zookeeper://127.0.0.1:8778/org.apache.dubbo.metadata.store.MetadataReport?backup=127.0.0.1:" + zkServerPort3 + "&address=zookeeper://127.0.0.1:2181&application=metadatareport-local-xml-provider2&cycle-report=false&interface=org.apache.dubbo.metadata.store.MetadataReport&retry-period=4590&retry-times=23&sync-report=true");
         checkFetchAndUpdateCacheNotNull(url3);
+        Assertions.assertTrue(checkFetchAndUpdateCacheTheSame(url2, url3));
+        Assertions.assertTrue(checkFetchAndUpdateCacheTheSame(url2, url));
+        zkServer2.stop();
+        zkServer3.stop();
+    }
+
+    @Test
+    public void testFetchAndUpdateZookeeperClientCacheWhenDiffUser() throws Exception {
+        int zkServerPort2 = NetUtils.getAvailablePort();
+        TestingServer zkServer2 = new TestingServer(zkServerPort2, true);
+
+        int zkServerPort3 = NetUtils.getAvailablePort();
+        TestingServer zkServer3 = new TestingServer(zkServerPort3, true);
+
+        URL url = URL.valueOf("zookeeper://u1:p1@127.0.0.1:" + zkServerPort + "/org.apache.dubbo.registry.RegistryService?backup=127.0.0.1:" + zkServerPort3 + ",127.0.0.1:" + zkServerPort2 + "&application=metadatareport-local-xml-provider2&dubbo=2.0.2&interface=org.apache.dubbo.registry.RegistryService&pid=47418&specVersion=2.7.0-SNAPSHOT&timestamp=1547102428828");
+        ZookeeperClient newZookeeperClient = abstractZookeeperTransporter.connect(url);
+        //just for connected
+        newZookeeperClient.getContent("/dubbo/test");
+        Assertions.assertEquals(abstractZookeeperTransporter.getZookeeperClientMap().size(), 3);
+        Assertions.assertEquals(abstractZookeeperTransporter.getZookeeperClientMap().get("u1@127.0.0.1:" + zkServerPort), newZookeeperClient);
+        Assertions.assertNull(abstractZookeeperTransporter.getZookeeperClientMap().get("127.0.0.1:" + zkServerPort));
+
+        URL url2 = URL.valueOf("zookeeper://u1:p1@127.0.0.1:" + zkServerPort + "/org.apache.dubbo.metadata.store.MetadataReport?address=zookeeper://127.0.0.1:2181&application=metadatareport-local-xml-provider2&cycle-report=false&interface=org.apache.dubbo.metadata.store.MetadataReport&retry-period=4590&retry-times=23&sync-report=true");
+        checkFetchAndUpdateCacheNotNull(url2);
+        URL url3 = URL.valueOf("zookeeper://u2:p2@127.0.0.1:8778/org.apache.dubbo.metadata.store.MetadataReport?backup=127.0.0.1:" + zkServerPort3 + "&address=zookeeper://127.0.0.1:2181&application=metadatareport-local-xml-provider2&cycle-report=false&interface=org.apache.dubbo.metadata.store.MetadataReport&retry-period=4590&retry-times=23&sync-report=true");
+        checkFetchAndUpdateCacheNull(url3);
+        abstractZookeeperTransporter.connect(url3);
+        checkFetchAndUpdateCacheNotNull(url3);
+        URL url4 = URL.valueOf("zookeeper://127.0.0.1:8778/org.apache.dubbo.metadata.store.MetadataReport?backup=127.0.0.1:" + zkServerPort3 + "&address=zookeeper://127.0.0.1:2181&application=metadatareport-local-xml-provider2&cycle-report=false&interface=org.apache.dubbo.metadata.store.MetadataReport&retry-period=4590&retry-times=23&sync-report=true");
+        checkFetchAndUpdateCacheNull(url4);
+        abstractZookeeperTransporter.connect(url4);
+        checkFetchAndUpdateCacheNotNull(url4);
+        Assertions.assertTrue(checkFetchAndUpdateCacheTheSame(url2, url));
+        Assertions.assertFalse(checkFetchAndUpdateCacheTheSame(url, url3));
+        Assertions.assertFalse(checkFetchAndUpdateCacheTheSame(url4, url3));
 
         zkServer2.stop();
         zkServer3.stop();
@@ -106,9 +141,21 @@ public class AbstractZookeeperTransporterTest {
 
     private void checkFetchAndUpdateCacheNotNull(URL url) {
         List<String> addressList = abstractZookeeperTransporter.getURLBackupAddress(url);
-        ZookeeperClient zookeeperClient = abstractZookeeperTransporter.fetchAndUpdateZookeeperClientCache(addressList);
+        ZookeeperClient zookeeperClient = abstractZookeeperTransporter.fetchAndUpdateZookeeperClientCache(addressList, url.getUsername());
         Assertions.assertNotNull(zookeeperClient);
     }
+    private void checkFetchAndUpdateCacheNull(URL url) {
+        List<String> addressList = abstractZookeeperTransporter.getURLBackupAddress(url);
+        ZookeeperClient zookeeperClient = abstractZookeeperTransporter.fetchAndUpdateZookeeperClientCache(addressList, url.getUsername());
+        Assertions.assertNull(zookeeperClient);
+    }
+
+    private boolean checkFetchAndUpdateCacheTheSame(URL url1, URL url2) {
+        List<String> addressList1 = abstractZookeeperTransporter.getURLBackupAddress(url1);
+        List<String> addressList2 = abstractZookeeperTransporter.getURLBackupAddress(url2);
+        return abstractZookeeperTransporter.fetchAndUpdateZookeeperClientCache(addressList1, url1.getUsername())
+                == abstractZookeeperTransporter.fetchAndUpdateZookeeperClientCache(addressList2, url2.getUsername());
+    }
 
     @Test
     public void testRepeatConnect() {


[dubbo] 01/02: Merge branch 'master' of github.com:apache/incubator-dubbo

Posted by vi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

victory pushed a commit to branch issue_4991
in repository https://gitbox.apache.org/repos/asf/dubbo.git

commit 29e74dab48a9fcb2bdc2c7d39d660590ce07dda4
Merge: 8068b8e 72eaf04
Author: cvictory <sh...@gmail.com>
AuthorDate: Wed Feb 5 14:29:31 2020 +0800

    Merge branch 'master' of github.com:apache/incubator-dubbo

 .../dubbo/rpc/protocol/http/HttpProtocol.java      |  38 ++++-
 .../rpc/protocol/http/JsonRemoteInvocation.java    |  60 ++++++++
 .../rpc/protocol/http/JsonRpcProxyFactoryBean.java |  86 ++++++++++++
 .../dubbo/rpc/protocol/http/HttpProtocolTest.java  | 155 ++++++++++++---------
 4 files changed, 265 insertions(+), 74 deletions(-)