This is an automated email from the ASF dual-hosted git repository. eshu11 pushed a commit to branch feature/GEODE-6497 in repository https://gitbox.apache.org/repos/asf/geode.git
commit 4234ca9f653be2e1f93e1506fb4e0651d20567c3 Author: eshu <[email protected]> AuthorDate: Thu Mar 7 16:15:11 2019 -0800 GEODE-6497: Send failed message to image requester when provider is shutting down. --- .../geode/internal/cache/InitialImageOperation.java | 14 +++++++++----- .../geode/internal/cache/InitialImageOperationTest.java | 16 ++++++++++++++++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageOperation.java index 635e8ee..81624f1 100644 --- a/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageOperation.java +++ b/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageOperation.java @@ -1485,8 +1485,8 @@ public class InitialImageOperation { logger.debug("RequestImageMessage: attempting to get region reference for {}, initLevel={}", regionPath, initLevel); } - InternalCache cache = dm.getCache(); - lclRgn = cache == null ? null : (LocalRegion) cache.getRegionByPath(regionPath); + InternalCache cache = dm.getExistingCache(); + lclRgn = cache == null ? null : (LocalRegion) cache.getRegion(regionPath); // if this is a targeted getInitialImage after a region was initialized, // make sure this is the region that was reinitialized. if (lclRgn != null && !lclRgn.isUsedForPartitionedRegionBucket() && targetReinitialized @@ -1875,9 +1875,7 @@ public class InitialImageOperation { if (thr != null) { rex = new ReplyException(thr); } - // null chunk signals receiver that we are aborting - ImageReplyMessage.send(getSender(), processorId, rex, dm, null, 0, 0, 1, true, 0, false, - null, null); + sendFailureMessage(dm, rex); } // !success if (internalAfterSentImageReply != null @@ -1887,6 +1885,12 @@ public class InitialImageOperation { } } + void sendFailureMessage(ClusterDistributionManager dm, ReplyException rex) { + // null chunk signals receiver that we are aborting + ImageReplyMessage.send(getSender(), processorId, rex, dm, null, 0, 0, 1, true, 0, false, + null, null); + } + /** * Serialize the entries into byte[] chunks, calling proc for each one. proc args: the byte[] diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/InitialImageOperationTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/InitialImageOperationTest.java index 840379a..8320e5c 100644 --- a/geode-core/src/test/java/org/apache/geode/internal/cache/InitialImageOperationTest.java +++ b/geode-core/src/test/java/org/apache/geode/internal/cache/InitialImageOperationTest.java @@ -15,12 +15,16 @@ package org.apache.geode.internal.cache; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.junit.Before; import org.junit.Test; +import org.apache.geode.cache.CacheClosedException; import org.apache.geode.cache.Scope; import org.apache.geode.distributed.internal.ClusterDistributionManager; @@ -50,4 +54,16 @@ public class InitialImageOperationTest { LocalRegion value = InitialImageOperation.getGIIRegion(dm, path, false); assertThat(value).isSameAs(region); } + + @Test + public void processRequestImageMessageWillSendFailureMessageIfGotCancelException() { + InitialImageOperation.RequestImageMessage message = + spy(new InitialImageOperation.RequestImageMessage()); + message.regionPath = "regionPath"; + when(dm.getExistingCache()).thenThrow(new CacheClosedException()); + + message.process(dm); + + verify(message).sendFailureMessage(eq(dm), eq(null)); + } }
