[geode] 01/02: GEODE-9295: Reply sent always while processing LatestLastAccessTimeMessage

2021-06-28 Thread nnag
This is an automated email from the ASF dual-hosted git repository.

nnag pushed a commit to branch support/1.12
in repository https://gitbox.apache.org/repos/asf/geode.git

commit 2d3e1f209c27037776fd5c3678d1e70a8a0234ea
Author: Nabarun Nag 
AuthorDate: Mon Jun 14 22:17:36 2021 -0700

GEODE-9295: Reply sent always  while processing LatestLastAccessTimeMessage

* Even if there any any exception, a reply will be sent back to the 
sender so that the sender's threads are not stuck.

(cherry picked from commit 31bb9b986ed5b1a8013af35b277147e28cd74d12)
---
 .../cache/LatestLastAccessTimeMessage.java | 48 +++---
 .../cache/LatestLastAccessTimeMessageTest.java | 11 +
 2 files changed, 35 insertions(+), 24 deletions(-)

diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessage.java
 
b/geode-core/src/main/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessage.java
index 46bb749..d90be52 100644
--- 
a/geode-core/src/main/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessage.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessage.java
@@ -62,34 +62,34 @@ public class LatestLastAccessTimeMessage extends 
PooledDistributionMessage
 
   @Override
   protected void process(ClusterDistributionManager dm) {
-final InternalCache cache = dm.getCache();
-if (cache == null) {
-  sendReply(dm, 0);
-  return;
-}
-final InternalDistributedRegion region =
-(InternalDistributedRegion) cache.getRegion(this.regionName);
-if (region == null) {
-  sendReply(dm, 0);
-  return;
-}
-final RegionEntry entry = region.getRegionEntry(this.key);
-if (entry == null) {
-  sendReply(dm, 0);
-  return;
-}
 long lastAccessed = 0L;
-// noinspection SynchronizationOnLocalVariableOrMethodParameter
-synchronized (entry) {
-  if (!entry.isInvalidOrRemoved()) {
-try {
-  lastAccessed = entry.getLastAccessed();
-} catch (InternalStatisticsDisabledException ignored) {
-  // last access time is not available
+try {
+  final InternalCache cache = dm.getCache();
+  if (cache == null) {
+return;
+  }
+  final InternalDistributedRegion region =
+  (InternalDistributedRegion) cache.getRegion(this.regionName);
+  if (region == null) {
+return;
+  }
+  final RegionEntry entry = region.getRegionEntry(this.key);
+  if (entry == null) {
+return;
+  }
+  // noinspection SynchronizationOnLocalVariableOrMethodParameter
+  synchronized (entry) {
+if (!entry.isInvalidOrRemoved()) {
+  try {
+lastAccessed = entry.getLastAccessed();
+  } catch (InternalStatisticsDisabledException ignored) {
+// last access time is not available
+  }
 }
   }
+} finally {
+  sendReply(dm, lastAccessed);
 }
-sendReply(dm, lastAccessed);
   }
 
   @VisibleForTesting
diff --git 
a/geode-core/src/test/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessageTest.java
 
b/geode-core/src/test/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessageTest.java
index 380006e..9f5062c 100644
--- 
a/geode-core/src/test/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessageTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessageTest.java
@@ -14,6 +14,7 @@
  */
 package org.apache.geode.internal.cache;
 
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
@@ -78,6 +79,16 @@ public class LatestLastAccessTimeMessageTest {
   }
 
   @Test
+  public void replyIsSentEvenIfThereIsAnException() {
+setupMessage();
+when(dm.getCache()).thenThrow(new RuntimeException());
+assertThatThrownBy(() -> {
+  lastAccessTimeMessage.process(dm);
+}).isExactlyInstanceOf(RuntimeException.class);
+verify(lastAccessTimeMessage).sendReply(dm, 0);
+  }
+
+  @Test
   public void processWithNullRegionRepliesZero() {
 setupMessage();
 setupRegion(false, false);


[geode] 01/02: GEODE-9295: Reply sent always while processing LatestLastAccessTimeMessage

2021-06-16 Thread nnag
This is an automated email from the ASF dual-hosted git repository.

nnag pushed a commit to branch support/1.13
in repository https://gitbox.apache.org/repos/asf/geode.git

commit 3a88dc11b08fc9ec18f2724568e950d61e77c84a
Author: Nabarun Nag 
AuthorDate: Mon Jun 14 22:17:36 2021 -0700

GEODE-9295: Reply sent always  while processing LatestLastAccessTimeMessage

* Even if there any any exception, a reply will be sent back to the 
sender so that the sender's threads are not stuck.

(cherry picked from commit 31bb9b986ed5b1a8013af35b277147e28cd74d12)
---
 .../cache/LatestLastAccessTimeMessage.java | 48 +++---
 .../cache/LatestLastAccessTimeMessageTest.java | 11 +
 2 files changed, 35 insertions(+), 24 deletions(-)

diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessage.java
 
b/geode-core/src/main/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessage.java
index 46bb749..d90be52 100644
--- 
a/geode-core/src/main/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessage.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessage.java
@@ -62,34 +62,34 @@ public class LatestLastAccessTimeMessage extends 
PooledDistributionMessage
 
   @Override
   protected void process(ClusterDistributionManager dm) {
-final InternalCache cache = dm.getCache();
-if (cache == null) {
-  sendReply(dm, 0);
-  return;
-}
-final InternalDistributedRegion region =
-(InternalDistributedRegion) cache.getRegion(this.regionName);
-if (region == null) {
-  sendReply(dm, 0);
-  return;
-}
-final RegionEntry entry = region.getRegionEntry(this.key);
-if (entry == null) {
-  sendReply(dm, 0);
-  return;
-}
 long lastAccessed = 0L;
-// noinspection SynchronizationOnLocalVariableOrMethodParameter
-synchronized (entry) {
-  if (!entry.isInvalidOrRemoved()) {
-try {
-  lastAccessed = entry.getLastAccessed();
-} catch (InternalStatisticsDisabledException ignored) {
-  // last access time is not available
+try {
+  final InternalCache cache = dm.getCache();
+  if (cache == null) {
+return;
+  }
+  final InternalDistributedRegion region =
+  (InternalDistributedRegion) cache.getRegion(this.regionName);
+  if (region == null) {
+return;
+  }
+  final RegionEntry entry = region.getRegionEntry(this.key);
+  if (entry == null) {
+return;
+  }
+  // noinspection SynchronizationOnLocalVariableOrMethodParameter
+  synchronized (entry) {
+if (!entry.isInvalidOrRemoved()) {
+  try {
+lastAccessed = entry.getLastAccessed();
+  } catch (InternalStatisticsDisabledException ignored) {
+// last access time is not available
+  }
 }
   }
+} finally {
+  sendReply(dm, lastAccessed);
 }
-sendReply(dm, lastAccessed);
   }
 
   @VisibleForTesting
diff --git 
a/geode-core/src/test/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessageTest.java
 
b/geode-core/src/test/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessageTest.java
index 380006e..9f5062c 100644
--- 
a/geode-core/src/test/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessageTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessageTest.java
@@ -14,6 +14,7 @@
  */
 package org.apache.geode.internal.cache;
 
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
@@ -78,6 +79,16 @@ public class LatestLastAccessTimeMessageTest {
   }
 
   @Test
+  public void replyIsSentEvenIfThereIsAnException() {
+setupMessage();
+when(dm.getCache()).thenThrow(new RuntimeException());
+assertThatThrownBy(() -> {
+  lastAccessTimeMessage.process(dm);
+}).isExactlyInstanceOf(RuntimeException.class);
+verify(lastAccessTimeMessage).sendReply(dm, 0);
+  }
+
+  @Test
   public void processWithNullRegionRepliesZero() {
 setupMessage();
 setupRegion(false, false);


[geode] 01/02: GEODE-9295: Reply sent always while processing LatestLastAccessTimeMessage

2021-06-16 Thread nnag
This is an automated email from the ASF dual-hosted git repository.

nnag pushed a commit to branch support/1.14
in repository https://gitbox.apache.org/repos/asf/geode.git

commit b2608507bd86b86126ae0c415d65c9772932e00e
Author: Nabarun Nag 
AuthorDate: Mon Jun 14 22:17:36 2021 -0700

GEODE-9295: Reply sent always  while processing LatestLastAccessTimeMessage

* Even if there any any exception, a reply will be sent back to the 
sender so that the sender's threads are not stuck.

(cherry picked from commit 31bb9b986ed5b1a8013af35b277147e28cd74d12)
---
 .../cache/LatestLastAccessTimeMessage.java | 48 +++---
 .../cache/LatestLastAccessTimeMessageTest.java | 11 +
 2 files changed, 35 insertions(+), 24 deletions(-)

diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessage.java
 
b/geode-core/src/main/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessage.java
index 46bb749..d90be52 100644
--- 
a/geode-core/src/main/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessage.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessage.java
@@ -62,34 +62,34 @@ public class LatestLastAccessTimeMessage extends 
PooledDistributionMessage
 
   @Override
   protected void process(ClusterDistributionManager dm) {
-final InternalCache cache = dm.getCache();
-if (cache == null) {
-  sendReply(dm, 0);
-  return;
-}
-final InternalDistributedRegion region =
-(InternalDistributedRegion) cache.getRegion(this.regionName);
-if (region == null) {
-  sendReply(dm, 0);
-  return;
-}
-final RegionEntry entry = region.getRegionEntry(this.key);
-if (entry == null) {
-  sendReply(dm, 0);
-  return;
-}
 long lastAccessed = 0L;
-// noinspection SynchronizationOnLocalVariableOrMethodParameter
-synchronized (entry) {
-  if (!entry.isInvalidOrRemoved()) {
-try {
-  lastAccessed = entry.getLastAccessed();
-} catch (InternalStatisticsDisabledException ignored) {
-  // last access time is not available
+try {
+  final InternalCache cache = dm.getCache();
+  if (cache == null) {
+return;
+  }
+  final InternalDistributedRegion region =
+  (InternalDistributedRegion) cache.getRegion(this.regionName);
+  if (region == null) {
+return;
+  }
+  final RegionEntry entry = region.getRegionEntry(this.key);
+  if (entry == null) {
+return;
+  }
+  // noinspection SynchronizationOnLocalVariableOrMethodParameter
+  synchronized (entry) {
+if (!entry.isInvalidOrRemoved()) {
+  try {
+lastAccessed = entry.getLastAccessed();
+  } catch (InternalStatisticsDisabledException ignored) {
+// last access time is not available
+  }
 }
   }
+} finally {
+  sendReply(dm, lastAccessed);
 }
-sendReply(dm, lastAccessed);
   }
 
   @VisibleForTesting
diff --git 
a/geode-core/src/test/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessageTest.java
 
b/geode-core/src/test/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessageTest.java
index 380006e..9f5062c 100644
--- 
a/geode-core/src/test/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessageTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/internal/cache/LatestLastAccessTimeMessageTest.java
@@ -14,6 +14,7 @@
  */
 package org.apache.geode.internal.cache;
 
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
@@ -78,6 +79,16 @@ public class LatestLastAccessTimeMessageTest {
   }
 
   @Test
+  public void replyIsSentEvenIfThereIsAnException() {
+setupMessage();
+when(dm.getCache()).thenThrow(new RuntimeException());
+assertThatThrownBy(() -> {
+  lastAccessTimeMessage.process(dm);
+}).isExactlyInstanceOf(RuntimeException.class);
+verify(lastAccessTimeMessage).sendReply(dm, 0);
+  }
+
+  @Test
   public void processWithNullRegionRepliesZero() {
 setupMessage();
 setupRegion(false, false);