You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by bo...@apache.org on 2021/03/03 18:51:30 UTC
[geode] 01/01: GEODE-8992: Added operationDetail to toData/fromData
This is an automated email from the ASF dual-hosted git repository.
boglesby pushed a commit to branch feature/GEODE-8992
in repository https://gitbox.apache.org/repos/asf/geode.git
commit 97c95520e6eabdb1bb8cfa6708e0b812da8b2c17
Author: Barry Oglesby <bo...@pivotal.io>
AuthorDate: Wed Mar 3 10:38:09 2021 -0800
GEODE-8992: Added operationDetail to toData/fromData
---
.../codeAnalysis/sanctionedDataSerializables.txt | 8 +-
.../internal/cache/wan/GatewaySenderEventImpl.java | 15 ++-
.../cache/wan/GatewaySenderEventImplTest.java | 130 +++++++++++++++++++--
3 files changed, 140 insertions(+), 13 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 03e7c5b..5f50033 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,12 +1922,14 @@ org/apache/geode/internal/cache/wan/GatewaySenderEventCallbackArgument,2
fromData,65
toData,89
-org/apache/geode/internal/cache/wan/GatewaySenderEventImpl,6
-fromData,62
+org/apache/geode/internal/cache/wan/GatewaySenderEventImpl,8
+fromData,17
fromDataPre_GEODE_1_14_0_0,31
+fromDataPre_GEODE_1_15_0_0,62
fromDataPre_GEODE_1_9_0_0,200
-toData,59
+toData,17
toDataPre_GEODE_1_14_0_0,18
+toDataPre_GEODE_1_15_0_0,59
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 e4a8b75..369157c 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,6 +710,12 @@ public class GatewaySenderEventImpl
@Override
public void toData(DataOutput out,
SerializationContext context) throws IOException {
+ toDataPre_GEODE_1_15_0_0(out, context);
+ out.writeInt(this.operationDetail);
+ }
+
+ public void toDataPre_GEODE_1_15_0_0(DataOutput out,
+ SerializationContext context) throws IOException {
toDataPre_GEODE_1_14_0_0(out, context);
boolean hasTransaction = this.transactionId != null;
DataSerializer.writeBoolean(hasTransaction, out);
@@ -754,6 +760,12 @@ public class GatewaySenderEventImpl
@Override
public void fromData(DataInput in,
DeserializationContext context) throws IOException, ClassNotFoundException {
+ fromDataPre_GEODE_1_15_0_0(in, context);
+ this.operationDetail = in.readInt();
+ }
+
+ public void fromDataPre_GEODE_1_15_0_0(DataInput in, DeserializationContext context)
+ throws IOException, ClassNotFoundException {
fromDataPre_GEODE_1_14_0_0(in, context);
if (version >= KnownVersion.GEODE_1_14_0.ordinal()) {
boolean hasTransaction = DataSerializer.readBoolean(in);
@@ -1287,7 +1299,8 @@ public class GatewaySenderEventImpl
@Override
public KnownVersion[] getSerializationVersions() {
- return new KnownVersion[] {KnownVersion.GEODE_1_9_0, KnownVersion.GEODE_1_14_0};
+ return new KnownVersion[] {KnownVersion.GEODE_1_9_0, KnownVersion.GEODE_1_14_0,
+ KnownVersion.GEODE_1_15_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 3add1a1..69f686d 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
@@ -15,6 +15,8 @@
package org.apache.geode.internal.cache.wan;
import static org.apache.geode.internal.serialization.KnownVersion.GEODE_1_13_0;
+import static org.apache.geode.internal.serialization.KnownVersion.GEODE_1_14_0;
+import static org.apache.geode.internal.serialization.KnownVersion.GEODE_1_8_0;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.isA;
@@ -29,10 +31,13 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import junitparams.JUnitParamsRunner;
+import junitparams.Parameters;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestName;
+import org.junit.runner.RunWith;
import org.apache.geode.cache.Operation;
import org.apache.geode.cache.TransactionId;
@@ -41,6 +46,7 @@ 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.TXId;
import org.apache.geode.internal.cache.wan.parallel.ParallelGatewaySenderHelper;
import org.apache.geode.internal.serialization.DSCODE;
import org.apache.geode.internal.serialization.DeserializationContext;
@@ -48,8 +54,10 @@ 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.internal.util.BlobHelper;
import org.apache.geode.test.fake.Fakes;
+@RunWith(JUnitParamsRunner.class)
public class GatewaySenderEventImplTest {
private GemFireCacheImpl cache;
@@ -89,7 +97,7 @@ public class GatewaySenderEventImplTest {
gatewaySenderEvent.fromData(dataInput, deserializationContext);
assertThat(gatewaySenderEvent.getTransactionId()).isNull();
- when(dataInput.readShort()).thenReturn(KnownVersion.GEODE_1_14_0.ordinal());
+ when(dataInput.readShort()).thenReturn(GEODE_1_14_0.ordinal());
when(objectDeserializer.readObject(dataInput)).thenReturn(eventID, new Object(),
gatewaySenderEventCallbackArgument, transactionId);
gatewaySenderEvent.fromData(dataInput, deserializationContext);
@@ -97,21 +105,29 @@ public class GatewaySenderEventImplTest {
}
@Test
- public void testSerializingDataFromVersion_1_14_0_OrNewerToVersion_1_13_0() throws IOException {
+ @Parameters(method = "getVersionsAndExpectedInvocations")
+ public void testSerializingDataFromCurrentVersionToOldVersion(VersionAndExpectedInvocations vaei)
+ 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);
+ new VersionedDataOutputStream(outputStream, vaei.getVersion());
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());
+ verify(gatewaySenderEvent, times(vaei.getPre115Invocations())).toDataPre_GEODE_1_15_0_0(any(),
+ any());
+ verify(gatewaySenderEvent, times(vaei.getPre114Invocations())).toDataPre_GEODE_1_14_0_0(any(),
+ any());
+ verify(gatewaySenderEvent, times(vaei.getPre19Invocations())).toDataPre_GEODE_1_9_0_0(any(),
+ any());
}
@Test
- public void testDeserializingDataFromVersion_1_13_0_ToVersion_1_14_0_OrNewer()
+ @Parameters(method = "getVersionsAndExpectedInvocations")
+ public void testDeserializingDataFromOldVersionToCurrentVersion(
+ VersionAndExpectedInvocations vaei)
throws IOException, ClassNotFoundException {
InternalDataSerializer internalDataSerializer = spy(InternalDataSerializer.class);
GatewaySenderEventImpl gatewaySenderEvent = spy(GatewaySenderEventImpl.class);
@@ -119,12 +135,24 @@ public class GatewaySenderEventImplTest {
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);
+ new VersionedDataInputStream(inputStream, vaei.getVersion());
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());
+ verify(gatewaySenderEvent, times(vaei.getPre115Invocations())).fromDataPre_GEODE_1_15_0_0(any(),
+ any());
+ verify(gatewaySenderEvent, times(vaei.getPre114Invocations())).fromDataPre_GEODE_1_14_0_0(any(),
+ any());
+ verify(gatewaySenderEvent, times(vaei.getPre19Invocations())).fromDataPre_GEODE_1_9_0_0(any(),
+ any());
+ }
+
+ private VersionAndExpectedInvocations[] getVersionsAndExpectedInvocations() {
+ return new VersionAndExpectedInvocations[] {
+ new VersionAndExpectedInvocations(GEODE_1_8_0, 1, 0, 0),
+ new VersionAndExpectedInvocations(GEODE_1_13_0, 1, 1, 0),
+ new VersionAndExpectedInvocations(GEODE_1_14_0, 1, 1, 1)
+ };
}
@Test
@@ -185,4 +213,88 @@ public class GatewaySenderEventImplTest {
assertThat(event).isNotEqualTo(eventDifferentRegion);
}
+ @Test
+ public void testSerialization() throws Exception {
+ // Set up test
+ LocalRegion region = mock(LocalRegion.class);
+ when(region.getFullPath()).thenReturn(testName.getMethodName() + "_region");
+ when(region.getCache()).thenReturn(cache);
+ TXId txId = new TXId(cache.getMyId(), 0);
+ when(region.getTXId()).thenReturn(txId);
+
+ // Create GatewaySenderEventImpl
+ GatewaySenderEventImpl originalEvent =
+ ParallelGatewaySenderHelper.createGatewaySenderEvent(region, Operation.PUTALL_CREATE,
+ "key1", "value1", 1, 3, 3, 113);
+
+ // Serialize GatewaySenderEventImpl
+ byte[] eventBytes = BlobHelper.serializeToBlob(originalEvent);
+
+ // Deserialize GatewaySenderEventImpl
+ GatewaySenderEventImpl deserializedEvent =
+ (GatewaySenderEventImpl) BlobHelper.deserializeBlob(eventBytes);
+
+ // Verify fields are equal
+ assertThat(originalEvent.getEventId()).isEqualTo(deserializedEvent.getEventId());
+ assertThat(originalEvent.getAction()).isEqualTo(deserializedEvent.getAction());
+ assertThat(originalEvent.getOperation()).isEqualTo(deserializedEvent.getOperation());
+ assertThat(originalEvent.getRegionPath()).isEqualTo(deserializedEvent.getRegionPath());
+ assertThat(originalEvent.getKey()).isEqualTo(deserializedEvent.getKey());
+ assertThat(originalEvent.getDeserializedValue())
+ .isEqualTo(deserializedEvent.getDeserializedValue());
+ assertThat(originalEvent.getValueIsObject()).isEqualTo(deserializedEvent.getValueIsObject());
+ assertThat(originalEvent.getNumberOfParts()).isEqualTo(deserializedEvent.getNumberOfParts());
+ assertThat(originalEvent.getCallbackArgument())
+ .isEqualTo(deserializedEvent.getCallbackArgument());
+ assertThat(originalEvent.getPossibleDuplicate())
+ .isEqualTo(deserializedEvent.getPossibleDuplicate());
+ assertThat(originalEvent.getCreationTime()).isEqualTo(deserializedEvent.getCreationTime());
+ assertThat(originalEvent.getShadowKey()).isEqualTo(deserializedEvent.getShadowKey());
+ assertThat(originalEvent.getVersionTimeStamp())
+ .isEqualTo(deserializedEvent.getVersionTimeStamp());
+ assertThat(originalEvent.isAcked).isEqualTo(deserializedEvent.isAcked);
+ assertThat(originalEvent.isDispatched).isEqualTo(deserializedEvent.isDispatched);
+ assertThat(originalEvent.getBucketId()).isEqualTo(deserializedEvent.getBucketId());
+ assertThat(originalEvent.isConcurrencyConflict())
+ .isEqualTo(deserializedEvent.isConcurrencyConflict());
+ assertThat(originalEvent.getTransactionId())
+ .isEqualTo(deserializedEvent.getTransactionId());
+ assertThat(originalEvent.isLastEventInTransaction())
+ .isEqualTo(deserializedEvent.isLastEventInTransaction());
+ }
+
+ public static class VersionAndExpectedInvocations {
+
+ private final KnownVersion version;
+
+ private final int pre19Invocations;
+
+ private final int pre114Invocations;
+
+ private final int pre115Invocations;
+
+ public VersionAndExpectedInvocations(KnownVersion version, int pre19Invocations,
+ int pre114Invocations, int pre115Invocations) {
+ this.version = version;
+ this.pre19Invocations = pre19Invocations;
+ this.pre114Invocations = pre114Invocations;
+ this.pre115Invocations = pre115Invocations;
+ }
+
+ public KnownVersion getVersion() {
+ return this.version;
+ }
+
+ public int getPre19Invocations() {
+ return this.pre19Invocations;
+ }
+
+ public int getPre114Invocations() {
+ return this.pre114Invocations;
+ }
+
+ public int getPre115Invocations() {
+ return this.pre115Invocations;
+ }
+ }
}