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/10/12 16:37:19 UTC

[geode] branch develop updated: GEODE-8517: GatewaySenderEventImpl's 2 new attributes were introduced… (#5530)

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 e85a1bd  GEODE-8517: GatewaySenderEventImpl's 2 new attributes were introduced… (#5530)
e85a1bd is described below

commit e85a1bd450292eb3db098d826734e6ba64151ad0
Author: Xiaojian Zhou <ge...@users.noreply.github.com>
AuthorDate: Mon Oct 12 09:36:30 2020 -0700

    GEODE-8517: GatewaySenderEventImpl's 2 new attributes were introduced… (#5530)
    
    
    Co-authored-by: Jianxia Chen <11...@users.noreply.github.com>
---
 .../codeAnalysis/sanctionedDataSerializables.txt   |  4 +-
 .../internal/cache/wan/GatewaySenderEventImpl.java | 12 ++--
 .../cache/wan/GatewaySenderEventImplTest.java      | 79 ++++++++++++++++++++++
 3 files changed, 87 insertions(+), 8 deletions(-)

diff --git a/geode-core/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt b/geode-core/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt
index cbc995d..204be50 100644
--- a/geode-core/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt
+++ b/geode-core/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt
@@ -1922,10 +1922,10 @@ toData,89
 
 org/apache/geode/internal/cache/wan/GatewaySenderEventImpl,6
 fromData,62
-fromDataPre_GEODE_1_13_0_0,31
+fromDataPre_GEODE_1_14_0_0,31
 fromDataPre_GEODE_1_9_0_0,200
 toData,59
-toDataPre_GEODE_1_13_0_0,18
+toDataPre_GEODE_1_14_0_0,18
 toDataPre_GEODE_1_9_0_0,151
 
 org/apache/geode/internal/cache/wan/GatewaySenderQueueEntrySynchronizationOperation$GatewaySenderQueueEntrySynchronizationEntry,2
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImpl.java
index 88f19f3..e4a8b75 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImpl.java
@@ -710,7 +710,7 @@ public class GatewaySenderEventImpl
   @Override
   public void toData(DataOutput out,
       SerializationContext context) throws IOException {
-    toDataPre_GEODE_1_13_0_0(out, context);
+    toDataPre_GEODE_1_14_0_0(out, context);
     boolean hasTransaction = this.transactionId != null;
     DataSerializer.writeBoolean(hasTransaction, out);
     if (hasTransaction) {
@@ -719,7 +719,7 @@ public class GatewaySenderEventImpl
     }
   }
 
-  public void toDataPre_GEODE_1_13_0_0(DataOutput out,
+  public void toDataPre_GEODE_1_14_0_0(DataOutput out,
       SerializationContext context) throws IOException {
     toDataPre_GEODE_1_9_0_0(out, context);
     DataSerializer.writeBoolean(this.isConcurrencyConflict, out);
@@ -754,8 +754,8 @@ public class GatewaySenderEventImpl
   @Override
   public void fromData(DataInput in,
       DeserializationContext context) throws IOException, ClassNotFoundException {
-    fromDataPre_GEODE_1_13_0_0(in, context);
-    if (version >= KnownVersion.GEODE_1_13_0.ordinal()) {
+    fromDataPre_GEODE_1_14_0_0(in, context);
+    if (version >= KnownVersion.GEODE_1_14_0.ordinal()) {
       boolean hasTransaction = DataSerializer.readBoolean(in);
       if (hasTransaction) {
         this.isLastEventInTransaction = DataSerializer.readBoolean(in);
@@ -764,7 +764,7 @@ public class GatewaySenderEventImpl
     }
   }
 
-  public void fromDataPre_GEODE_1_13_0_0(DataInput in, DeserializationContext context)
+  public void fromDataPre_GEODE_1_14_0_0(DataInput in, DeserializationContext context)
       throws IOException, ClassNotFoundException {
     fromDataPre_GEODE_1_9_0_0(in, context);
     if (version >= KnownVersion.GEODE_1_9_0.ordinal()) {
@@ -1287,7 +1287,7 @@ public class GatewaySenderEventImpl
 
   @Override
   public KnownVersion[] getSerializationVersions() {
-    return new KnownVersion[] {KnownVersion.GEODE_1_9_0, KnownVersion.GEODE_1_13_0};
+    return new KnownVersion[] {KnownVersion.GEODE_1_9_0, KnownVersion.GEODE_1_14_0};
   }
 
   public int getSerializedValueSize() {
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImplTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImplTest.java
index 9c8d216..3add1a1 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImplTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImplTest.java
@@ -14,20 +14,40 @@
  */
 package org.apache.geode.internal.cache.wan;
 
+import static org.apache.geode.internal.serialization.KnownVersion.GEODE_1_13_0;
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.isA;
 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;
 
+import java.io.DataInput;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TestName;
 
 import org.apache.geode.cache.Operation;
+import org.apache.geode.cache.TransactionId;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
+import org.apache.geode.internal.InternalDataSerializer;
+import org.apache.geode.internal.cache.EventID;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.LocalRegion;
 import org.apache.geode.internal.cache.wan.parallel.ParallelGatewaySenderHelper;
+import org.apache.geode.internal.serialization.DSCODE;
+import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
+import org.apache.geode.internal.serialization.ObjectDeserializer;
+import org.apache.geode.internal.serialization.VersionedDataInputStream;
+import org.apache.geode.internal.serialization.VersionedDataOutputStream;
 import org.apache.geode.test.fake.Fakes;
 
 public class GatewaySenderEventImplTest {
@@ -50,6 +70,64 @@ public class GatewaySenderEventImplTest {
   }
 
   @Test
+  public void versionedFromData() throws IOException, ClassNotFoundException {
+    GatewaySenderEventImpl gatewaySenderEvent = spy(GatewaySenderEventImpl.class);
+    DataInput dataInput = mock(DataInput.class);
+    DeserializationContext deserializationContext = mock(DeserializationContext.class);
+    ObjectDeserializer objectDeserializer = mock(ObjectDeserializer.class);
+    EventID eventID = mock(EventID.class);
+    GatewaySenderEventCallbackArgument gatewaySenderEventCallbackArgument =
+        mock(GatewaySenderEventCallbackArgument.class);
+    TransactionId transactionId = mock(TransactionId.class);
+    when(deserializationContext.getDeserializer()).thenReturn(objectDeserializer);
+    when(objectDeserializer.readObject(dataInput)).thenReturn(eventID,
+        gatewaySenderEventCallbackArgument);
+    when(dataInput.readByte()).thenReturn(DSCODE.STRING.toByte());
+    when(dataInput.readBoolean()).thenReturn(true);
+    when(dataInput.readShort()).thenReturn(KnownVersion.GEODE_1_13_0.ordinal());
+
+    gatewaySenderEvent.fromData(dataInput, deserializationContext);
+    assertThat(gatewaySenderEvent.getTransactionId()).isNull();
+
+    when(dataInput.readShort()).thenReturn(KnownVersion.GEODE_1_14_0.ordinal());
+    when(objectDeserializer.readObject(dataInput)).thenReturn(eventID, new Object(),
+        gatewaySenderEventCallbackArgument, transactionId);
+    gatewaySenderEvent.fromData(dataInput, deserializationContext);
+    assertThat(gatewaySenderEvent.getTransactionId()).isNotNull();
+  }
+
+  @Test
+  public void testSerializingDataFromVersion_1_14_0_OrNewerToVersion_1_13_0() throws IOException {
+    InternalDataSerializer internalDataSerializer = spy(InternalDataSerializer.class);
+    GatewaySenderEventImpl gatewaySenderEvent = spy(GatewaySenderEventImpl.class);
+    OutputStream outputStream = mock(OutputStream.class);
+    VersionedDataOutputStream versionedDataOutputStream =
+        new VersionedDataOutputStream(outputStream, GEODE_1_13_0);
+
+    internalDataSerializer.invokeToData(gatewaySenderEvent, versionedDataOutputStream);
+    verify(gatewaySenderEvent, times(0)).toData(any(), any());
+    verify(gatewaySenderEvent, times(1)).toDataPre_GEODE_1_14_0_0(any(), any());
+    verify(gatewaySenderEvent, times(1)).toDataPre_GEODE_1_9_0_0(any(), any());
+  }
+
+  @Test
+  public void testDeserializingDataFromVersion_1_13_0_ToVersion_1_14_0_OrNewer()
+      throws IOException, ClassNotFoundException {
+    InternalDataSerializer internalDataSerializer = spy(InternalDataSerializer.class);
+    GatewaySenderEventImpl gatewaySenderEvent = spy(GatewaySenderEventImpl.class);
+    InputStream inputStream = mock(InputStream.class);
+    when(inputStream.read()).thenReturn(69); // NULL_STRING
+    when(inputStream.read(isA(byte[].class), isA(int.class), isA(int.class))).thenReturn(1);
+    VersionedDataInputStream versionedDataInputStream =
+        new VersionedDataInputStream(inputStream, GEODE_1_13_0);
+
+    internalDataSerializer.invokeFromData(gatewaySenderEvent, versionedDataInputStream);
+    verify(gatewaySenderEvent, times(0)).fromData(any(), any());
+    verify(gatewaySenderEvent, times(1)).fromDataPre_GEODE_1_14_0_0(any(), any());
+    verify(gatewaySenderEvent, times(1)).fromDataPre_GEODE_1_9_0_0(any(), any());
+  }
+
+  @Test
   public void testEquality() throws Exception {
     LocalRegion region = mock(LocalRegion.class);
     when(region.getFullPath()).thenReturn(testName.getMethodName() + "_region");
@@ -106,4 +184,5 @@ public class GatewaySenderEventImplTest {
             "key1", "value1", 0, 0);
     assertThat(event).isNotEqualTo(eventDifferentRegion);
   }
+
 }