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>'].