pivotal-eshu commented on code in PR #7596:
URL: https://github.com/apache/geode/pull/7596#discussion_r855680249


##########
geode-core/src/test/java/org/apache/geode/internal/cache/BucketRegionTest.java:
##########
@@ -715,4 +722,178 @@ public void 
txHandleWANEventDoesNotCallHandleWANEventIfParallelWanNotEnabled() {
 
     verify(bucketRegion, never()).handleWANEvent(event);
   }
+
+  @Test
+  public void 
needToWaitForColocatedBucketsBecomePrimaryReturnsTrueIfHasChildRegionAndWasNotPrimary()
 {
+    BucketRegion bucketRegion =
+        spy(new BucketRegion(regionName, regionAttributes, partitionedRegion,
+            cache, internalRegionArgs, disabledClock()));
+    doReturn(true).when(bucketRegion).hasChildRegion();
+
+    
assertThat(bucketRegion.needToWaitForColocatedBucketsBecomePrimary()).isTrue();
+  }
+
+  @Test
+  public void 
needToWaitForColocatedBucketsBecomePrimaryReturnsFalseIfHasChildRegionAndWasPrimary()
 {
+    BucketRegion bucketRegion =
+        spy(new BucketRegion(regionName, regionAttributes, partitionedRegion,
+            cache, internalRegionArgs, disabledClock()));
+    doReturn(true).when(bucketRegion).hasChildRegion();
+    bucketRegion.notPrimary = false;
+
+    
assertThat(bucketRegion.needToWaitForColocatedBucketsBecomePrimary()).isFalse();
+  }
+
+  @Test
+  public void 
needToWaitForColocatedBucketsBecomePrimaryReturnsFalseIfNoChildRegion() {
+    BucketRegion bucketRegion =
+        spy(new BucketRegion(regionName, regionAttributes, partitionedRegion,
+            cache, internalRegionArgs, disabledClock()));
+    doReturn(false).when(bucketRegion).hasChildRegion();
+
+    
assertThat(bucketRegion.needToWaitForColocatedBucketsBecomePrimary()).isFalse();
+  }
+
+  @Test
+  public void 
handleWANEventDoesNotWaitForAllChildColocatedBucketsBecomePrimaryIfNoNeedToWait()
 {
+    BucketRegion bucketRegion =
+        spy(new BucketRegion(regionName, regionAttributes, partitionedRegion,
+            cache, internalRegionArgs, disabledClock()));
+    when(bucketAdvisor.isPrimary()).thenReturn(true);
+    
doReturn(false).when(bucketRegion).needToWaitForColocatedBucketsBecomePrimary();
+
+    when(partitionedRegion.getTotalNumberOfBuckets()).thenReturn(4);
+    doReturn(0).when(bucketRegion).getId();
+
+    bucketRegion.handleWANEvent(event);
+
+    verify(bucketRegion, 
never()).waitForAllChildColocatedBucketsBecomePrimary();
+    verify(event).setTailKey(4L);
+  }
+
+  @Test
+  public void 
handleWANEventWaitsForAllChildColocatedBucketsBecomePrimaryIfWasNotPrimary() {
+    BucketRegion bucketRegion =
+        spy(new BucketRegion(regionName, regionAttributes, partitionedRegion,
+            cache, internalRegionArgs, disabledClock()));
+    when(bucketAdvisor.isPrimary()).thenReturn(true);
+    doReturn(true).when(bucketRegion).hasChildRegion();
+    
doNothing().when(bucketRegion).waitForAllChildColocatedBucketsBecomePrimary();
+    when(partitionedRegion.getTotalNumberOfBuckets()).thenReturn(4);
+    doReturn(0).when(bucketRegion).getId();
+
+    bucketRegion.handleWANEvent(event);
+
+    verify(bucketRegion).waitForAllChildColocatedBucketsBecomePrimary();
+    verify(event).setTailKey(4L);
+  }
+
+  @Test
+  public void handleWANEventSetNotPrimaryIfWasPrimaryAndNoLongerAPrimary() {
+    BucketRegion bucketRegion =
+        spy(new BucketRegion(regionName, regionAttributes, partitionedRegion,
+            cache, internalRegionArgs, disabledClock()));
+    when(bucketAdvisor.isPrimary()).thenReturn(false);
+    bucketRegion.notPrimary = false;
+
+    bucketRegion.handleWANEvent(event);
+
+    verify(bucketRegion).setNotPrimaryIfNecessary();
+    assertThat(bucketRegion.notPrimary).isTrue();
+    assertThat(bucketRegion.allChildBucketsBecomePrimary).isFalse();
+  }
+
+  @Test
+  public void handleWANEventDoesNotSetNotPrimaryIfWasNotPrimary() {
+    BucketRegion bucketRegion =
+        spy(new BucketRegion(regionName, regionAttributes, partitionedRegion,
+            cache, internalRegionArgs, disabledClock()));
+    when(bucketAdvisor.isPrimary()).thenReturn(false);
+    bucketRegion.notPrimary = true;
+
+    bucketRegion.handleWANEvent(event);
+
+    verify(bucketRegion, never()).setNotPrimaryIfNecessary();
+  }
+
+  @Test
+  public void onlyOneThreadWillExecuteCheckIfAllChildBucketsBecomePrimary() 
throws Exception {
+    BucketRegion bucketRegion =
+        spy(new BucketRegion(regionName, regionAttributes, partitionedRegion,
+            cache, internalRegionArgs, disabledClock()));
+    
doNothing().when(bucketRegion).executeCheckIfAllChildBucketsBecomePrimary();
+
+    Future<?> future = 
executor.submit(bucketRegion::waitForAllChildColocatedBucketsBecomePrimary);
+    Future<?> future2 = 
executor.submit(bucketRegion::waitForAllChildColocatedBucketsBecomePrimary);
+
+    future.get();
+    future2.get();

Review Comment:
   Not sure if we definitely can hit the race issue in the unit test. Is there 
any suggestion for this?
   



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscr...@geode.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to