From 970964a01259e589e22ac96d324658232c205081 Mon Sep 17 00:00:00 2001 From: "ken.lj" Date: Thu, 10 Mar 2022 17:07:48 +0800 Subject: [PATCH] Fix curator5 compatibility (#9749) fixes #9738 --- .../dubbo-configcenter-zookeeper/pom.xml | 16 ++ dubbo-distribution/dubbo-all/pom.xml | 8 + dubbo-distribution/dubbo-bom/pom.xml | 5 + .../dubbo-metadata-report-zookeeper/pom.xml | 16 ++ .../dubbo-registry-zookeeper/pom.xml | 16 ++ .../dubbo-remoting-zookeeper-curator5/pom.xml | 63 ++++++ .../curator5}/Curator5ZookeeperClient.java | 14 +- .../Curator5ZookeeperTransporter.java | 2 +- ...bo.remoting.zookeeper.ZookeeperTransporter | 1 + .../Curator5ZookeeperClientTest.java | 5 +- .../Curator5ZookeeperTransporterTest.java | 5 +- .../AbstractZookeeperTransporterTest.java | 189 ++++++++++++++++++ ...bo.remoting.zookeeper.ZookeeperTransporter | 1 - dubbo-remoting/pom.xml | 1 + 14 files changed, 325 insertions(+), 17 deletions(-) create mode 100644 dubbo-remoting/dubbo-remoting-zookeeper-curator5/pom.xml rename dubbo-remoting/{dubbo-remoting-zookeeper/src/main/java/org/apache/dubbo/remoting/zookeeper/curator => dubbo-remoting-zookeeper-curator5/src/main/java/org/apache/dubbo/remoting/zookeeper/curator5}/Curator5ZookeeperClient.java (95%) rename dubbo-remoting/{dubbo-remoting-zookeeper/src/main/java/org/apache/dubbo/remoting/zookeeper/curator => dubbo-remoting-zookeeper-curator5/src/main/java/org/apache/dubbo/remoting/zookeeper/curator5}/Curator5ZookeeperTransporter.java (95%) create mode 100644 dubbo-remoting/dubbo-remoting-zookeeper-curator5/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter rename dubbo-remoting/{dubbo-remoting-zookeeper/src/test/java/org/apache/dubbo/remoting/zookeeper/curator => dubbo-remoting-zookeeper-curator5/src/test/java/org/apache/dubbo/remoting/zookeeper/curator5}/Curator5ZookeeperClientTest.java (97%) rename dubbo-remoting/{dubbo-remoting-zookeeper/src/test/java/org/apache/dubbo/remoting/zookeeper/curator => dubbo-remoting-zookeeper-curator5/src/test/java/org/apache/dubbo/remoting/zookeeper/curator5}/Curator5ZookeeperTransporterTest.java (90%) create mode 100644 dubbo-remoting/dubbo-remoting-zookeeper-curator5/src/test/java/org/apache/dubbo/remoting/zookeeper/curator5/support/AbstractZookeeperTransporterTest.java diff --git a/dubbo-configcenter/dubbo-configcenter-zookeeper/pom.xml b/dubbo-configcenter/dubbo-configcenter-zookeeper/pom.xml index db4c1e457b..8166ca072d 100644 --- a/dubbo-configcenter/dubbo-configcenter-zookeeper/pom.xml +++ b/dubbo-configcenter/dubbo-configcenter-zookeeper/pom.xml @@ -61,4 +61,20 @@ zookeeper + + + + curator5 + + [17,) + + + + org.apache.dubbo + dubbo-remoting-zookeeper-curator5 + ${project.parent.version} + + + + diff --git a/dubbo-distribution/dubbo-all/pom.xml b/dubbo-distribution/dubbo-all/pom.xml index 52ec97128f..bd516f32ab 100644 --- a/dubbo-distribution/dubbo-all/pom.xml +++ b/dubbo-distribution/dubbo-all/pom.xml @@ -87,6 +87,13 @@ compile true + + org.apache.dubbo + dubbo-remoting-zookeeper-curator5 + ${project.version} + compile + true + org.apache.dubbo dubbo-rpc-api @@ -411,6 +418,7 @@ org.apache.dubbo:dubbo-remoting-netty4 org.apache.dubbo:dubbo-remoting-netty org.apache.dubbo:dubbo-remoting-zookeeper + org.apache.dubbo:dubbo-remoting-zookeeper-curator5 org.apache.dubbo:dubbo-remoting org.apache.dubbo:dubbo-rpc-api org.apache.dubbo:dubbo-rpc-dubbo diff --git a/dubbo-distribution/dubbo-bom/pom.xml b/dubbo-distribution/dubbo-bom/pom.xml index b4e4ee02db..a477c4dca2 100644 --- a/dubbo-distribution/dubbo-bom/pom.xml +++ b/dubbo-distribution/dubbo-bom/pom.xml @@ -93,6 +93,11 @@ dubbo-remoting-zookeeper ${project.version} + + org.apache.dubbo + dubbo-remoting-zookeeper-curator5 + ${project.version} + org.apache.dubbo dubbo-rpc-api diff --git a/dubbo-metadata/dubbo-metadata-report-zookeeper/pom.xml b/dubbo-metadata/dubbo-metadata-report-zookeeper/pom.xml index baf20b36d2..6df0fc86cc 100644 --- a/dubbo-metadata/dubbo-metadata-report-zookeeper/pom.xml +++ b/dubbo-metadata/dubbo-metadata-report-zookeeper/pom.xml @@ -60,4 +60,20 @@ zookeeper + + + + curator5 + + [17,) + + + + org.apache.dubbo + dubbo-remoting-zookeeper-curator5 + ${project.parent.version} + + + + diff --git a/dubbo-registry/dubbo-registry-zookeeper/pom.xml b/dubbo-registry/dubbo-registry-zookeeper/pom.xml index 48caaf0bb8..fd518e13e1 100644 --- a/dubbo-registry/dubbo-registry-zookeeper/pom.xml +++ b/dubbo-registry/dubbo-registry-zookeeper/pom.xml @@ -45,4 +45,20 @@ curator-x-discovery + + + + curator5 + + [17,) + + + + org.apache.dubbo + dubbo-remoting-zookeeper-curator5 + ${project.parent.version} + + + + diff --git a/dubbo-remoting/dubbo-remoting-zookeeper-curator5/pom.xml b/dubbo-remoting/dubbo-remoting-zookeeper-curator5/pom.xml new file mode 100644 index 0000000000..6209329bb5 --- /dev/null +++ b/dubbo-remoting/dubbo-remoting-zookeeper-curator5/pom.xml @@ -0,0 +1,63 @@ + + + 4.0.0 + + org.apache.dubbo + dubbo-remoting + ${revision} + ../pom.xml + + dubbo-remoting-zookeeper-curator5 + jar + ${project.artifactId} + The zookeeper curator5 remoting module of dubbo project + + false + 5.1.0 + 3.7.0 + + + + + org.apache.dubbo + dubbo-remoting-api + ${project.parent.version} + + + org.apache.dubbo + dubbo-common + ${project.parent.version} + + + org.apache.curator + curator-framework + ${curator5_version} + + + org.apache.curator + curator-recipes + ${curator5_version} + + + org.apache.zookeeper + zookeeper + ${zookeeper_version} + + + diff --git a/dubbo-remoting/dubbo-remoting-zookeeper/src/main/java/org/apache/dubbo/remoting/zookeeper/curator/Curator5ZookeeperClient.java b/dubbo-remoting/dubbo-remoting-zookeeper-curator5/src/main/java/org/apache/dubbo/remoting/zookeeper/curator5/Curator5ZookeeperClient.java similarity index 95% rename from dubbo-remoting/dubbo-remoting-zookeeper/src/main/java/org/apache/dubbo/remoting/zookeeper/curator/Curator5ZookeeperClient.java rename to dubbo-remoting/dubbo-remoting-zookeeper-curator5/src/main/java/org/apache/dubbo/remoting/zookeeper/curator5/Curator5ZookeeperClient.java index 4311e1ed16..047ddd5940 100644 --- a/dubbo-remoting/dubbo-remoting-zookeeper/src/main/java/org/apache/dubbo/remoting/zookeeper/curator/Curator5ZookeeperClient.java +++ b/dubbo-remoting/dubbo-remoting-zookeeper-curator5/src/main/java/org/apache/dubbo/remoting/zookeeper/curator5/Curator5ZookeeperClient.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.remoting.zookeeper.curator; +package org.apache.dubbo.remoting.zookeeper.curator5; import org.apache.dubbo.common.URL; import org.apache.dubbo.common.config.configcenter.ConfigItem; @@ -257,8 +257,8 @@ public class Curator5ZookeeperClient extends AbstractZookeeperClient stringList = abstractZookeeperTransporter.getURLBackupAddress(url); + Assertions.assertEquals(stringList.size(), 2); + Assertions.assertEquals(stringList.get(0), "127.0.0.1:" + zookeeperServerPort1); + Assertions.assertEquals(stringList.get(1), "127.0.0.1:9099"); + } + + @Test + public void testGetURLBackupAddressNoBack() { + URL url = URL.valueOf(zookeeperConnectionAddress1 + "/org.apache.dubbo.registry.RegistryService?application=metadatareport-local-xml-provider2&dubbo=2.0.2&interface=org.apache.dubbo.registry.RegistryService&pid=47418&specVersion=2.7.0-SNAPSHOT×tamp=1547102428828"); + List stringList = abstractZookeeperTransporter.getURLBackupAddress(url); + Assertions.assertEquals(stringList.size(), 1); + Assertions.assertEquals(stringList.get(0), "127.0.0.1:" + zookeeperServerPort1); + } + + @Test + public void testFetchAndUpdateZookeeperClientCache() throws Exception { + URL url = URL.valueOf(zookeeperConnectionAddress1 + "/org.apache.dubbo.registry.RegistryService?backup=127.0.0.1:" + zookeeperServerPort1 + ",127.0.0.1:" + zookeeperServerPort2 + "&application=metadatareport-local-xml-provider2&dubbo=2.0.2&interface=org.apache.dubbo.registry.RegistryService&pid=47418&specVersion=2.7.0-SNAPSHOT×tamp=1547102428828"); + ZookeeperClient newZookeeperClient = abstractZookeeperTransporter.connect(url); + //just for connected + newZookeeperClient.getContent("/dubbo/test"); + Assertions.assertEquals(abstractZookeeperTransporter.getZookeeperClientMap().size(), 2); + Assertions.assertEquals(abstractZookeeperTransporter.getZookeeperClientMap().get("127.0.0.1:" + zookeeperServerPort1), newZookeeperClient); + + URL url2 = URL.valueOf("zookeeper://127.0.0.1:" + zookeeperServerPort1 + "/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://127.0.0.1:8778/org.apache.dubbo.metadata.store.MetadataReport?backup=127.0.0.1:" + zookeeperServerPort2 + "&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); + } + + private void checkFetchAndUpdateCacheNotNull(URL url) { + List addressList = abstractZookeeperTransporter.getURLBackupAddress(url); + ZookeeperClient zookeeperClient = abstractZookeeperTransporter.fetchAndUpdateZookeeperClientCache(addressList); + Assertions.assertNotNull(zookeeperClient); + } + + @Test + public void testRepeatConnect() { + URL url = URL.valueOf(zookeeperConnectionAddress1 + "/org.apache.dubbo.registry.RegistryService?application=metadatareport-local-xml-provider2&dubbo=2.0.2&interface=org.apache.dubbo.registry.RegistryService&pid=47418&specVersion=2.7.0-SNAPSHOT×tamp=1547102428828"); + URL url2 = URL.valueOf(zookeeperConnectionAddress1 + "/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"); + ZookeeperClient newZookeeperClient = abstractZookeeperTransporter.connect(url); + //just for connected + newZookeeperClient.getContent("/dubbo/test"); + Assertions.assertEquals(abstractZookeeperTransporter.getZookeeperClientMap().size(), 1); + Assertions.assertEquals(abstractZookeeperTransporter.getZookeeperClientMap().get("127.0.0.1:" + zookeeperServerPort1), newZookeeperClient); + Assertions.assertTrue(newZookeeperClient.isConnected()); + + ZookeeperClient newZookeeperClient2 = abstractZookeeperTransporter.connect(url2); + //just for connected + newZookeeperClient2.getContent("/dubbo/test"); + Assertions.assertEquals(newZookeeperClient, newZookeeperClient2); + Assertions.assertEquals(abstractZookeeperTransporter.getZookeeperClientMap().size(), 1); + Assertions.assertEquals(abstractZookeeperTransporter.getZookeeperClientMap().get("127.0.0.1:" + zookeeperServerPort1), newZookeeperClient); + } + + @Test + public void testNotRepeatConnect() throws Exception { + URL url = URL.valueOf(zookeeperConnectionAddress1 + "/org.apache.dubbo.registry.RegistryService?application=metadatareport-local-xml-provider2&dubbo=2.0.2&interface=org.apache.dubbo.registry.RegistryService&pid=47418&specVersion=2.7.0-SNAPSHOT×tamp=1547102428828"); + URL url2 = URL.valueOf(zookeeperConnectionAddress2 + "/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"); + ZookeeperClient newZookeeperClient = abstractZookeeperTransporter.connect(url); + //just for connected + newZookeeperClient.getContent("/dubbo/test"); + Assertions.assertEquals(abstractZookeeperTransporter.getZookeeperClientMap().size(), 1); + Assertions.assertEquals(abstractZookeeperTransporter.getZookeeperClientMap().get("127.0.0.1:" + zookeeperServerPort1), newZookeeperClient); + + ZookeeperClient newZookeeperClient2 = abstractZookeeperTransporter.connect(url2); + //just for connected + newZookeeperClient2.getContent("/dubbo/test"); + Assertions.assertNotEquals(newZookeeperClient, newZookeeperClient2); + Assertions.assertEquals(abstractZookeeperTransporter.getZookeeperClientMap().size(), 2); + Assertions.assertEquals(abstractZookeeperTransporter.getZookeeperClientMap().get("127.0.0.1:" + zookeeperServerPort2), newZookeeperClient2); + + } + + @Test + public void testRepeatConnectForBackUpAdd() throws Exception { + + URL url = URL.valueOf(zookeeperConnectionAddress1 + "/org.apache.dubbo.registry.RegistryService?backup=127.0.0.1:" + zookeeperServerPort1 + "&application=metadatareport-local-xml-provider2&dubbo=2.0.2&interface=org.apache.dubbo.registry.RegistryService&pid=47418&specVersion=2.7.0-SNAPSHOT×tamp=1547102428828"); + URL url2 = URL.valueOf(zookeeperConnectionAddress1 + "/org.apache.dubbo.metadata.store.MetadataReport?backup=127.0.0.1:" + zookeeperServerPort2 + "&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"); + ZookeeperClient newZookeeperClient = abstractZookeeperTransporter.connect(url); + //just for connected + newZookeeperClient.getContent("/dubbo/test"); + Assertions.assertEquals(abstractZookeeperTransporter.getZookeeperClientMap().size(), 1); + Assertions.assertEquals(abstractZookeeperTransporter.getZookeeperClientMap().get("127.0.0.1:" + zookeeperServerPort1), newZookeeperClient); + + ZookeeperClient newZookeeperClient2 = abstractZookeeperTransporter.connect(url2); + //just for connected + newZookeeperClient2.getContent("/dubbo/test"); + Assertions.assertEquals(newZookeeperClient, newZookeeperClient2); + Assertions.assertEquals(abstractZookeeperTransporter.getZookeeperClientMap().size(), 2); + Assertions.assertEquals(abstractZookeeperTransporter.getZookeeperClientMap().get("127.0.0.1:" + zookeeperServerPort2), newZookeeperClient2); + + } + + @Test + public void testRepeatConnectForNoMatchBackUpAdd() throws Exception { + + URL url = URL.valueOf(zookeeperConnectionAddress1 + "/org.apache.dubbo.registry.RegistryService?backup=127.0.0.1:" + zookeeperServerPort1 + "&application=metadatareport-local-xml-provider2&dubbo=2.0.2&interface=org.apache.dubbo.registry.RegistryService&pid=47418&specVersion=2.7.0-SNAPSHOT×tamp=1547102428828"); + URL url2 = URL.valueOf(zookeeperConnectionAddress2 + "/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"); + ZookeeperClient newZookeeperClient = abstractZookeeperTransporter.connect(url); + //just for connected + newZookeeperClient.getContent("/dubbo/test"); + Assertions.assertEquals(abstractZookeeperTransporter.getZookeeperClientMap().size(), 1); + Assertions.assertEquals(abstractZookeeperTransporter.getZookeeperClientMap().get("127.0.0.1:" + zookeeperServerPort1), newZookeeperClient); + + ZookeeperClient newZookeeperClient2 = abstractZookeeperTransporter.connect(url2); + //just for connected + newZookeeperClient2.getContent("/dubbo/test"); + Assertions.assertNotEquals(newZookeeperClient, newZookeeperClient2); + Assertions.assertEquals(abstractZookeeperTransporter.getZookeeperClientMap().size(), 2); + Assertions.assertEquals(abstractZookeeperTransporter.getZookeeperClientMap().get("127.0.0.1:" + zookeeperServerPort2), newZookeeperClient2); + + } + + @Test + public void testSameHostWithDifferentUser() throws Exception { + URL url1 = URL.valueOf("zookeeper://us1:pw1@127.0.0.1:" + zookeeperServerPort1 + "/path1"); + URL url2 = URL.valueOf("zookeeper://us2:pw2@127.0.0.1:" + zookeeperServerPort1 + "/path2"); + ZookeeperClient client1 = abstractZookeeperTransporter.connect(url1); + ZookeeperClient client2 = abstractZookeeperTransporter.connect(url2); + assertThat(client1, not(client2)); + } +} diff --git a/dubbo-remoting/dubbo-remoting-zookeeper/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter b/dubbo-remoting/dubbo-remoting-zookeeper/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter index 80528a2606..44f9374cd1 100644 --- a/dubbo-remoting/dubbo-remoting-zookeeper/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter +++ b/dubbo-remoting/dubbo-remoting-zookeeper/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter @@ -1,2 +1 @@ curator=org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperTransporter -curator5=org.apache.dubbo.remoting.zookeeper.curator.Curator5ZookeeperTransporter diff --git a/dubbo-remoting/pom.xml b/dubbo-remoting/pom.xml index bcf549265e..f1c154729e 100644 --- a/dubbo-remoting/pom.xml +++ b/dubbo-remoting/pom.xml @@ -35,6 +35,7 @@ dubbo-remoting-http dubbo-remoting-netty dubbo-remoting-zookeeper + dubbo-remoting-zookeeper-curator5 dubbo-remoting-netty4