You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by zh...@apache.org on 2020/08/15 03:20:45 UTC
[geode] branch develop updated: GEODE-8432: use regionPath directly instead of getRegion when put eve… (#5459)
This is an automated email from the ASF dual-hosted git repository.
zhouxj 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 8021084 GEODE-8432: use regionPath directly instead of getRegion when put eve… (#5459)
8021084 is described below
commit 8021084e4fdb4e03ef8495a190cc1618a6db67ba
Author: Xiaojian Zhou <ge...@users.noreply.github.com>
AuthorDate: Fri Aug 14 20:19:48 2020 -0700
GEODE-8432: use regionPath directly instead of getRegion when put eve… (#5459)
---
.../wan/parallel/ParallelGatewaySenderQueue.java | 13 +++---
.../ParallelGatewaySenderQueueJUnitTest.java | 49 ++++++++++++++++++++++
2 files changed, 55 insertions(+), 7 deletions(-)
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/parallel/ParallelGatewaySenderQueue.java b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/parallel/ParallelGatewaySenderQueue.java
index df531ce..9625ef4 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/parallel/ParallelGatewaySenderQueue.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/parallel/ParallelGatewaySenderQueue.java
@@ -693,15 +693,14 @@ public class ParallelGatewaySenderQueue implements RegionQueue {
boolean isDREvent = isDREvent(sender.getCache(), value);
- Region region = value.getRegion();
- String regionPath = null;
- if (isDREvent) {
- regionPath = region.getFullPath();
- } else {
- regionPath = ColocationHelper.getLeaderRegion((PartitionedRegion) region).getFullPath();
+ String regionPath = value.getRegionPath();
+ if (!isDREvent) {
+ regionPath = ColocationHelper
+ .getLeaderRegion((PartitionedRegion) sender.getCache().getRegion(regionPath))
+ .getFullPath();
}
if (isDebugEnabled) {
- logger.debug("Put is for the region {}", region);
+ logger.debug("Put is for the region {}", regionPath);
}
if (!this.userRegionNameToShadowPRMap.containsKey(regionPath)) {
if (isDebugEnabled) {
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/wan/parallel/ParallelGatewaySenderQueueJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/wan/parallel/ParallelGatewaySenderQueueJUnitTest.java
index b8acbcf..7f51b7b 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/wan/parallel/ParallelGatewaySenderQueueJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/wan/parallel/ParallelGatewaySenderQueueJUnitTest.java
@@ -17,7 +17,9 @@ package org.apache.geode.internal.cache.wan.parallel;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -37,6 +39,7 @@ import org.mockito.stubbing.Answer;
import org.apache.geode.CancelCriterion;
import org.apache.geode.cache.DataPolicy;
+import org.apache.geode.cache.PartitionAttributes;
import org.apache.geode.cache.PartitionAttributesFactory;
import org.apache.geode.cache.Region;
import org.apache.geode.internal.cache.AbstractBucketRegionQueue;
@@ -76,6 +79,52 @@ public class ParallelGatewaySenderQueueJUnitTest {
}
@Test
+ public void whenReplicatedDataRegionNotReadyShouldNotThrowException() throws Exception {
+ GatewaySenderEventImpl event = mock(GatewaySenderEventImpl.class);
+ when(event.makeHeapCopyIfOffHeap()).thenReturn(event);
+ when(event.getRegion()).thenReturn(null);
+ String regionPath = "/testRegion";
+ when(event.getRegionPath()).thenReturn(regionPath);
+ Mockito.doThrow(new IllegalStateException()).when(event).release();
+ Queue backingList = new LinkedList();
+ backingList.add(event);
+
+ queue = spy(queue);
+ doReturn(true).when(queue).isDREvent(any(), any());
+ boolean putDone = queue.put(event);
+ assertThat(putDone).isFalse();
+ }
+
+ @Test
+ public void whenPartitionedDataRegionNotReadyShouldNotThrowException() throws Exception {
+ GatewaySenderEventImpl event = mock(GatewaySenderEventImpl.class);
+ when(event.makeHeapCopyIfOffHeap()).thenReturn(event);
+ when(event.getRegion()).thenReturn(null);
+ String regionPath = "/testRegion";
+ when(event.getRegionPath()).thenReturn(regionPath);
+ PartitionedRegion region = mock(PartitionedRegion.class);
+ when(region.getFullPath()).thenReturn(regionPath);
+ when(cache.getRegion(regionPath)).thenReturn(region);
+ PartitionAttributes pa = mock(PartitionAttributes.class);
+ when(region.getPartitionAttributes()).thenReturn(pa);
+ when(pa.getColocatedWith()).thenReturn(null);
+
+ Mockito.doThrow(new IllegalStateException()).when(event).release();
+ Queue backingList = new LinkedList();
+ backingList.add(event);
+
+ BucketRegionQueue bucketRegionQueue = mockBucketRegionQueue(backingList);
+
+ TestableParallelGatewaySenderQueue queue = new TestableParallelGatewaySenderQueue(sender,
+ Collections.emptySet(), 0, 1, metaRegionFactory);
+ queue.setMockedAbstractBucketRegionQueue(bucketRegionQueue);
+
+ queue = spy(queue);
+ boolean putDone = queue.put(event);
+ assertThat(putDone).isFalse();
+ }
+
+ @Test
public void whenEventReleaseFromOffHeapFailsExceptionShouldNotBeThrownToAckReaderThread()
throws Exception {
GatewaySenderEventImpl event = mock(GatewaySenderEventImpl.class);