You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ja...@apache.org on 2017/10/04 00:16:25 UTC
[geode] branch develop updated: GEODE-3712:
PartitionedRegionQueryEvaluator should shuffle node list
This is an automated email from the ASF dual-hosted git repository.
jasonhuynh pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push:
new 09bb75c GEODE-3712: PartitionedRegionQueryEvaluator should shuffle node list
09bb75c is described below
commit 09bb75c850f64456a673d4cf85744faee60df257
Author: Jason Huynh <hu...@gmail.com>
AuthorDate: Tue Sep 26 08:54:59 2017 -0700
GEODE-3712: PartitionedRegionQueryEvaluator should shuffle node list
---
.../internal/cache/PartitionedRegionQueryEvaluator.java | 9 ++++++---
.../cache/PartitionedRegionQueryEvaluatorTest.java | 17 ++++++++++++++++-
2 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionQueryEvaluator.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionQueryEvaluator.java
index 94c7641..ac9ee84 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionQueryEvaluator.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionQueryEvaluator.java
@@ -29,6 +29,7 @@ import org.apache.geode.internal.Assert;
import org.apache.geode.internal.NanoTimer;
import org.apache.geode.internal.Version;
import org.apache.geode.internal.cache.partitioned.QueryMessage;
+import org.apache.geode.internal.cache.partitioned.RegionAdvisor;
import org.apache.geode.internal.cache.partitioned.StreamingPartitionOperation;
import org.apache.geode.internal.i18n.LocalizedStrings;
import org.apache.geode.internal.logging.LogService;
@@ -828,7 +829,7 @@ public class PartitionedRegionQueryEvaluator extends StreamingPartitionOperation
}
}
- final List allNodes = getAllNodes();
+ final List allNodes = getAllNodes(this.pr.getRegionAdvisor());
/*
* for(Map.Entry<InternalDistributedMember, Collection<Collection>> entry :
* resultsPerMember.entrySet()) { InternalDistributedMember member = entry.getKey();
@@ -877,8 +878,10 @@ public class PartitionedRegionQueryEvaluator extends StreamingPartitionOperation
return pr.getRegionAdvisor().getBucketOwners(bid.intValue());
}
- protected ArrayList getAllNodes() {
- return new ArrayList(this.pr.getRegionAdvisor().adviseDataStore());
+ protected ArrayList getAllNodes(RegionAdvisor regionAdvisor) {
+ ArrayList nodes = new ArrayList(regionAdvisor.adviseDataStore());
+ Collections.shuffle(nodes);
+ return nodes;
}
/**
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/PartitionedRegionQueryEvaluatorTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/PartitionedRegionQueryEvaluatorTest.java
index 7df2413..1cff3ce 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/PartitionedRegionQueryEvaluatorTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/PartitionedRegionQueryEvaluatorTest.java
@@ -14,6 +14,7 @@
*/
package org.apache.geode.internal.cache;
+import static org.awaitility.Awaitility.await;
import static org.junit.Assert.*;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.*;
@@ -27,7 +28,9 @@ import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.Set;
+import java.util.concurrent.TimeUnit;
+import org.awaitility.Awaitility;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.categories.Category;
@@ -43,6 +46,7 @@ import org.apache.geode.cache.query.internal.types.ObjectTypeImpl;
import org.apache.geode.distributed.internal.DistributionMessage;
import org.apache.geode.distributed.internal.InternalDistributedSystem;
import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.cache.partitioned.RegionAdvisor;
import org.apache.geode.test.fake.Fakes;
import org.apache.geode.test.junit.categories.UnitTest;
@@ -199,7 +203,18 @@ public class PartitionedRegionQueryEvaluatorTest {
assertEquals(expectedResults.size(), results.size());
results.removeAll(expectedResults);
assertTrue(results.isEmpty());
+ }
+ @Test
+ public void testGetAllNodesShouldBeRandomized() {
+ List bucketList = createBucketList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
+ Set bucketSet = new HashSet(bucketList);
+ PartitionedRegionQueryEvaluator prqe = new PartitionedRegionQueryEvaluator(system, pr, query,
+ null, new LinkedResultSet(), bucketSet);
+ RegionAdvisor regionAdvisor = mock(RegionAdvisor.class);
+ when(regionAdvisor.adviseDataStore()).thenReturn(bucketSet);
+ await().atMost(10, TimeUnit.SECONDS)
+ .until(() -> !(bucketList.equals(prqe.getAllNodes(regionAdvisor))));
}
private Map<InternalDistributedMember, List<Integer>> createFakeBucketMap() {
@@ -306,7 +321,7 @@ public class PartitionedRegionQueryEvaluatorTest {
}
@Override
- protected ArrayList getAllNodes() {
+ protected ArrayList getAllNodes(RegionAdvisor advisor) {
return currentScenario().allNodes;
}
--
To stop receiving notification emails like this one, please contact
['"commits@geode.apache.org" <co...@geode.apache.org>'].