This is an automated email from the ASF dual-hosted git repository.

echobravo pushed a commit to branch release/1.12.0
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/release/1.12.0 by this push:
     new 550cb2e  GEODE-7763: Do not exportValue if no clients are waiting for 
result (#4771)
550cb2e is described below

commit 550cb2edf3778d6151a07d6248dbdc42cd9a1b18
Author: Jason Huynh <huyn...@gmail.com>
AuthorDate: Wed Mar 11 12:29:30 2020 -0700

    GEODE-7763: Do not exportValue if no clients are waiting for result (#4771)
    
    * Avoid doing unnecessary serialization
    
    (cherry picked from commit b4c3e9413f0008635b0a0c9116c96147d1e4ceec)
---
 .../cache/tier/sockets/CacheClientNotifier.java    | 12 +++++-----
 .../tier/sockets/CacheClientNotifierTest.java      | 28 ++++++++++++++++++++++
 2 files changed, 34 insertions(+), 6 deletions(-)

diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientNotifier.java
 
b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientNotifier.java
index 5326dac..b6d5f7c 100755
--- 
a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientNotifier.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientNotifier.java
@@ -691,6 +691,12 @@ public class CacheClientNotifier {
       wrapper.incrementPutInProgressCounter("notify clients");
       conflatable = wrapper;
     }
+    if (!filterClients.isEmpty()) {
+      if (event.getOperation().isEntry()) {
+        EntryEventImpl entryEvent = (EntryEventImpl) event;
+        entryEvent.exportNewValue(clientMessage);
+      }
+    }
 
     clientRegistrationEventQueueManager.add(event, conflatable, filterClients, 
this);
 
@@ -1025,12 +1031,6 @@ public class CacheClientNotifier {
         new ClientUpdateMessageImpl(operation, (LocalRegion) 
event.getRegion(), keyOfInterest, null,
             delta, (byte) 0x01, callbackArgument, membershipID, 
eventIdentifier, versionTag);
 
-    if (event.getOperation().isEntry()) {
-      EntryEventImpl entryEvent = (EntryEventImpl) event;
-      // only need a value if notifyBySubscription is true
-      entryEvent.exportNewValue(clientUpdateMsg);
-    }
-
     if (isNetLoad) {
       clientUpdateMsg.setIsNetLoad(isNetLoad);
     }
diff --git 
a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CacheClientNotifierTest.java
 
b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CacheClientNotifierTest.java
index e9c7115..437c979 100644
--- 
a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CacheClientNotifierTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CacheClientNotifierTest.java
@@ -48,10 +48,13 @@ import org.junit.Test;
 import org.apache.geode.cache.Operation;
 import org.apache.geode.cache.query.internal.cq.ServerCQ;
 import org.apache.geode.internal.cache.DistributedRegion;
+import org.apache.geode.internal.cache.EntryEventImpl;
+import org.apache.geode.internal.cache.EnumListenerEvent;
 import org.apache.geode.internal.cache.FilterProfile;
 import org.apache.geode.internal.cache.FilterRoutingInfo;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.InternalCacheEvent;
+import org.apache.geode.internal.cache.LocalRegion;
 import org.apache.geode.internal.cache.RegionQueueException;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.test.fake.Fakes;
@@ -159,6 +162,31 @@ public class CacheClientNotifierTest {
   }
 
   @Test
+  public void initializingMessageShouldntSerializeValuePrematurely() throws 
Exception {
+    InternalCache internalCache = Fakes.cache();
+    CacheServerStats cacheServerStats = mock(CacheServerStats.class);
+    ConnectionListener connectionListener = mock(ConnectionListener.class);
+    ClientProxyMembershipID clientProxyMembershipID = 
mock(ClientProxyMembershipID.class);
+    ClientRegistrationMetadata clientRegistrationMetadata = 
mock(ClientRegistrationMetadata.class);
+    StatisticsClock statisticsClock = mock(StatisticsClock.class);
+
+    when(clientRegistrationMetadata.getClientProxyMembershipID()).thenReturn(
+        clientProxyMembershipID);
+
+    CacheClientNotifier cacheClientNotifier = 
CacheClientNotifier.getInstance(internalCache,
+        new ClientRegistrationEventQueueManager(), statisticsClock, 
cacheServerStats, 0, 0,
+        connectionListener, null, false);
+    LocalRegion region = mock(LocalRegion.class);
+
+    EntryEventImpl entryEvent = mock(EntryEventImpl.class);
+    when(entryEvent.getEventType()).thenReturn(EnumListenerEvent.AFTER_CREATE);
+    when(entryEvent.getOperation()).thenReturn(Operation.CREATE);
+    when(entryEvent.getRegion()).thenReturn(region);
+    cacheClientNotifier.constructClientMessage(entryEvent);
+    verify(entryEvent, times(0)).exportNewValue(any());
+  }
+
+  @Test
   public void clientRegistrationFailsQueueStillDrained()
       throws ClassNotFoundException, NoSuchMethodException, 
InvocationTargetException,
       IllegalAccessException, IOException {

Reply via email to