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