You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@helix.apache.org by jx...@apache.org on 2019/11/21 00:32:52 UTC
[helix] 03/05: Add unit test.
This is an automated email from the ASF dual-hosted git repository.
jxue pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/helix.git
View the commit online:
https://github.com/apache/helix/commit/9935fe51d83ab29e880165c11458f460cbff1d73
commit 9935fe51d83ab29e880165c11458f460cbff1d73
Author: Huizhi Lu <ih...@gmail.com>
AuthorDate: Tue Nov 5 18:35:51 2019 -0800
Add unit test.
---
.../helix/common/caches/BasicClusterDataCache.java | 1 +
.../helix/spectator/TestRoutingDataCache.java | 43 ++++++++++++++++++++++
2 files changed, 44 insertions(+)
diff --git a/helix-core/src/main/java/org/apache/helix/common/caches/BasicClusterDataCache.java b/helix-core/src/main/java/org/apache/helix/common/caches/BasicClusterDataCache.java
index 1260a2b..3584b36 100644
--- a/helix-core/src/main/java/org/apache/helix/common/caches/BasicClusterDataCache.java
+++ b/helix-core/src/main/java/org/apache/helix/common/caches/BasicClusterDataCache.java
@@ -113,6 +113,7 @@ public class BasicClusterDataCache implements ControlContextProvider {
if (_propertyDataChangedMap.get(HelixConstants.ChangeType.LIVE_INSTANCE)) {
long start = System.currentTimeMillis();
+ System.out.println("reloading live instances");
_propertyDataChangedMap.put(HelixConstants.ChangeType.LIVE_INSTANCE, false);
_propertyDataChangedMap.put(HelixConstants.ChangeType.CURRENT_STATE, true);
_liveInstancePropertyCache.refresh(accessor);
diff --git a/helix-core/src/test/java/org/apache/helix/spectator/TestRoutingDataCache.java b/helix-core/src/test/java/org/apache/helix/spectator/TestRoutingDataCache.java
index 09bcac4..bf10bf4 100644
--- a/helix-core/src/test/java/org/apache/helix/spectator/TestRoutingDataCache.java
+++ b/helix-core/src/test/java/org/apache/helix/spectator/TestRoutingDataCache.java
@@ -19,6 +19,8 @@ package org.apache.helix.spectator;
* under the License.
*/
+import java.util.Map;
+
import org.apache.helix.HelixConstants;
import org.apache.helix.PropertyType;
import org.apache.helix.TestHelper;
@@ -26,6 +28,7 @@ import org.apache.helix.ZNRecord;
import org.apache.helix.integration.common.ZkStandAloneCMTestBase;
import org.apache.helix.manager.zk.ZkBaseDataAccessor;
import org.apache.helix.mock.MockZkHelixDataAccessor;
+import org.apache.helix.model.CurrentState;
import org.apache.helix.tools.ClusterVerifiers.BestPossibleExternalViewVerifier;
import org.apache.helix.tools.ClusterVerifiers.ZkHelixClusterVerifier;
import org.testng.Assert;
@@ -122,4 +125,44 @@ public class TestRoutingDataCache extends ZkStandAloneCMTestBase {
cache.refresh(accessor);
Assert.assertEquals(accessor.getReadCount(PropertyType.EXTERNALVIEW), 1);
}
+
+ @Test
+ public void testCurrentStatesSelectiveUpdate() {
+ String clusterName = "CLUSTER_" + TestHelper.getTestClassName();
+ MockZkHelixDataAccessor accessor =
+ new MockZkHelixDataAccessor(CLUSTER_NAME, new ZkBaseDataAccessor<>(_gZkClient));
+ RoutingDataCache cache = new RoutingDataCache(clusterName, PropertyType.CURRENTSTATES);
+
+ // Empty current states map before refreshing.
+ Assert.assertTrue(cache.getCurrentStatesMap().isEmpty());
+
+ // 1. Initial cache refresh.
+ cache.refresh(accessor);
+ Map<String, Map<String, Map<String, CurrentState>>> currentStatesV1 = cache.getCurrentStatesMap();
+
+ // Current states map is not empty and size equals to number of live instances.
+ Assert.assertFalse(currentStatesV1.isEmpty());
+ Assert.assertEquals(currentStatesV1.size(), _participants.length);
+
+ // 2. Without any change, refresh routing data cache.
+ cache.refresh(accessor);
+ // Because of no current states change, current states cache doesn't refresh.
+ Assert.assertEquals(cache.getCurrentStatesMap(), currentStatesV1);
+
+ // 3. Stop one participant to make live instance change and refresh routing data cache.
+ _participants[0].syncStop();
+ cache.notifyDataChange(HelixConstants.ChangeType.LIVE_INSTANCE);
+ cache.refresh(accessor);
+ Map<String, Map<String, Map<String, CurrentState>>> currentStatesV2 = cache.getCurrentStatesMap();
+
+ // Current states cache should refresh and change.
+ Assert.assertFalse(currentStatesV2.isEmpty());
+ Assert.assertEquals(currentStatesV2.size(), _participants.length - 1);
+ Assert.assertFalse(currentStatesV1.equals(currentStatesV2));
+
+ cache.refresh(accessor);
+
+ // No change.
+ Assert.assertEquals(cache.getCurrentStatesMap(), currentStatesV2);
+ }
}