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));
+  }
 }

Reply via email to