From a8ae530959c66734b2799cb68e31ae031e7f86ad Mon Sep 17 00:00:00 2001 From: "cloud.huang" Date: Wed, 4 Jul 2018 22:27:50 +0800 Subject: [PATCH 1/3] #218 fix LocalRegistry notifyConsumer bug --- .../java/com/alipay/sofa/rpc/registry/local/LocalRegistry.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extension-impl/registry-local/src/main/java/com/alipay/sofa/rpc/registry/local/LocalRegistry.java b/extension-impl/registry-local/src/main/java/com/alipay/sofa/rpc/registry/local/LocalRegistry.java index f73fb75cd..60f79b687 100644 --- a/extension-impl/registry-local/src/main/java/com/alipay/sofa/rpc/registry/local/LocalRegistry.java +++ b/extension-impl/registry-local/src/main/java/com/alipay/sofa/rpc/registry/local/LocalRegistry.java @@ -379,7 +379,7 @@ private void notifyConsumer(Map newCache) { LOGGER.debug("{} has differente", entry.getKey()); } ValueDifference differentValue = entry.getValue(); - ProviderGroup innew = differentValue.rightValue(); + ProviderGroup innew = differentValue.leftValue(); if (LOGGER.isDebugEnabled()) { LOGGER.debug("new(right) is {}", innew); } From dba98782cfa847af5c98d0fe8b22c0b12e2293b3 Mon Sep 17 00:00:00 2001 From: "cloud.huang" Date: Sat, 7 Jul 2018 10:54:27 +0800 Subject: [PATCH 2/3] #218 add notifyConsumerTest --- .../rpc/registry/local/LocalRegistry.java | 2 +- .../rpc/registry/local/LocalRegistryTest.java | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/extension-impl/registry-local/src/main/java/com/alipay/sofa/rpc/registry/local/LocalRegistry.java b/extension-impl/registry-local/src/main/java/com/alipay/sofa/rpc/registry/local/LocalRegistry.java index 60f79b687..ac9bb2230 100644 --- a/extension-impl/registry-local/src/main/java/com/alipay/sofa/rpc/registry/local/LocalRegistry.java +++ b/extension-impl/registry-local/src/main/java/com/alipay/sofa/rpc/registry/local/LocalRegistry.java @@ -356,7 +356,7 @@ public void destroy() { * * @param newCache the new cache */ - private void notifyConsumer(Map newCache) { + void notifyConsumer(Map newCache) { Map oldCache = memoryCache; // 比较两个map的差异 MapDifference difference = diff --git a/extension-impl/registry-local/src/test/java/com/alipay/sofa/rpc/registry/local/LocalRegistryTest.java b/extension-impl/registry-local/src/test/java/com/alipay/sofa/rpc/registry/local/LocalRegistryTest.java index 0725c6b0c..f02dee680 100644 --- a/extension-impl/registry-local/src/test/java/com/alipay/sofa/rpc/registry/local/LocalRegistryTest.java +++ b/extension-impl/registry-local/src/test/java/com/alipay/sofa/rpc/registry/local/LocalRegistryTest.java @@ -17,6 +17,7 @@ package com.alipay.sofa.rpc.registry.local; import com.alipay.sofa.rpc.client.ProviderGroup; +import com.alipay.sofa.rpc.client.ProviderInfo; import com.alipay.sofa.rpc.common.RpcConstants; import com.alipay.sofa.rpc.common.utils.FileUtils; import com.alipay.sofa.rpc.config.ApplicationConfig; @@ -108,6 +109,9 @@ public static void main(String[] args) { @Test public void testAll() throws Exception { + // test for notifyConsumer + notifyConsumerTest(); + int timeoutPerSub = 5000; ServerConfig serverConfig = new ServerConfig() @@ -229,6 +233,31 @@ public void testAll() throws Exception { Assert.assertTrue(registry.notifyListeners.size() == 0); } + public void notifyConsumerTest() { + LocalRegistry registry = new LocalRegistry(new RegistryConfig()); + ConsumerConfig consumer = new ConsumerConfig(); + consumer.setInterfaceId("test"); + LocalRegistryTest.MockProviderInfoListener providerInfoListener = new LocalRegistryTest.MockProviderInfoListener(); + consumer.setProviderInfoListener(providerInfoListener); + registry.subscribe(consumer); + String key = LocalRegistryHelper.buildListDataId(consumer, consumer.getProtocol()); + + registry.memoryCache.put(key, new ProviderGroup()); + + Map newCache = new HashMap(); + ProviderGroup newProviderGroup = new ProviderGroup(); + ProviderInfo providerInfo=new ProviderInfo().setHost("0.0.0.0"); + newProviderGroup.add(providerInfo); + newCache.put(key, newProviderGroup); + + registry.notifyConsumer(newCache); + + Map ps = providerInfoListener.getData(); + Assert.assertTrue(ps.size() > 0); + Assert.assertNotNull(ps.get(RpcConstants.ADDRESS_DEFAULT_GROUP)); + Assert.assertTrue(ps.get(RpcConstants.ADDRESS_DEFAULT_GROUP).size() == 1); + } + private static class MockProviderInfoListener implements ProviderInfoListener { Map ps = new HashMap(); From 485f7189464b37dcecab60d2ea0a94cb03b38f6f Mon Sep 17 00:00:00 2001 From: "cloud.huang" Date: Sat, 7 Jul 2018 11:21:01 +0800 Subject: [PATCH 3/3] #218 format --- .../rpc/registry/local/LocalRegistry.java | 2 +- .../rpc/registry/local/LocalRegistryTest.java | 52 +++++++++---------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/extension-impl/registry-local/src/main/java/com/alipay/sofa/rpc/registry/local/LocalRegistry.java b/extension-impl/registry-local/src/main/java/com/alipay/sofa/rpc/registry/local/LocalRegistry.java index ac9bb2230..49dd3c785 100644 --- a/extension-impl/registry-local/src/main/java/com/alipay/sofa/rpc/registry/local/LocalRegistry.java +++ b/extension-impl/registry-local/src/main/java/com/alipay/sofa/rpc/registry/local/LocalRegistry.java @@ -356,7 +356,7 @@ public void destroy() { * * @param newCache the new cache */ - void notifyConsumer(Map newCache) { + void notifyConsumer(Map newCache) { Map oldCache = memoryCache; // 比较两个map的差异 MapDifference difference = diff --git a/extension-impl/registry-local/src/test/java/com/alipay/sofa/rpc/registry/local/LocalRegistryTest.java b/extension-impl/registry-local/src/test/java/com/alipay/sofa/rpc/registry/local/LocalRegistryTest.java index f02dee680..a98ad65f0 100644 --- a/extension-impl/registry-local/src/test/java/com/alipay/sofa/rpc/registry/local/LocalRegistryTest.java +++ b/extension-impl/registry-local/src/test/java/com/alipay/sofa/rpc/registry/local/LocalRegistryTest.java @@ -109,8 +109,8 @@ public static void main(String[] args) { @Test public void testAll() throws Exception { - // test for notifyConsumer - notifyConsumerTest(); + // test for notifyConsumer + notifyConsumerTest(); int timeoutPerSub = 5000; @@ -233,30 +233,30 @@ public void testAll() throws Exception { Assert.assertTrue(registry.notifyListeners.size() == 0); } - public void notifyConsumerTest() { - LocalRegistry registry = new LocalRegistry(new RegistryConfig()); - ConsumerConfig consumer = new ConsumerConfig(); - consumer.setInterfaceId("test"); - LocalRegistryTest.MockProviderInfoListener providerInfoListener = new LocalRegistryTest.MockProviderInfoListener(); - consumer.setProviderInfoListener(providerInfoListener); - registry.subscribe(consumer); - String key = LocalRegistryHelper.buildListDataId(consumer, consumer.getProtocol()); - - registry.memoryCache.put(key, new ProviderGroup()); - - Map newCache = new HashMap(); - ProviderGroup newProviderGroup = new ProviderGroup(); - ProviderInfo providerInfo=new ProviderInfo().setHost("0.0.0.0"); - newProviderGroup.add(providerInfo); - newCache.put(key, newProviderGroup); - - registry.notifyConsumer(newCache); - - Map ps = providerInfoListener.getData(); - Assert.assertTrue(ps.size() > 0); - Assert.assertNotNull(ps.get(RpcConstants.ADDRESS_DEFAULT_GROUP)); - Assert.assertTrue(ps.get(RpcConstants.ADDRESS_DEFAULT_GROUP).size() == 1); - } + public void notifyConsumerTest() { + LocalRegistry registry = new LocalRegistry(new RegistryConfig()); + ConsumerConfig consumer = new ConsumerConfig(); + consumer.setInterfaceId("test"); + LocalRegistryTest.MockProviderInfoListener providerInfoListener = new LocalRegistryTest.MockProviderInfoListener(); + consumer.setProviderInfoListener(providerInfoListener); + registry.subscribe(consumer); + String key = LocalRegistryHelper.buildListDataId(consumer, consumer.getProtocol()); + + registry.memoryCache.put(key, new ProviderGroup()); + + Map newCache = new HashMap(); + ProviderGroup newProviderGroup = new ProviderGroup(); + ProviderInfo providerInfo = new ProviderInfo().setHost("0.0.0.0"); + newProviderGroup.add(providerInfo); + newCache.put(key, newProviderGroup); + + registry.notifyConsumer(newCache); + + Map ps = providerInfoListener.getData(); + Assert.assertTrue(ps.size() > 0); + Assert.assertNotNull(ps.get(RpcConstants.ADDRESS_DEFAULT_GROUP)); + Assert.assertTrue(ps.get(RpcConstants.ADDRESS_DEFAULT_GROUP).size() == 1); + } private static class MockProviderInfoListener implements ProviderInfoListener {