This is an automated email from the ASF dual-hosted git repository. bschuchardt pushed a commit to branch feature/GEODE-7606 in repository https://gitbox.apache.org/repos/asf/geode.git
commit 23e7106cdd56fa0ebf1d756a51a769981ba8e715 Author: Bruce Schuchardt <[email protected]> AuthorDate: Thu Dec 19 13:51:32 2019 -0800 GEODE-7606 Break dependency on InternalDataSerializer Inject a serializer and deserializer into GMSLocator for use in reading and writing its persistent membership view. --- .../gms/locator/GMSLocatorIntegrationTest.java | 4 +++- .../locator/GMSLocatorRecoveryIntegrationTest.java | 8 ++++++-- .../membership/adapter/GMSLocatorAdapter.java | 4 +++- .../internal/membership/gms/locator/GMSLocator.java | 17 +++++++++++++---- .../membership/MembershipDependenciesJUnitTest.java | 4 ---- .../membership/gms/GMSMemberDataJUnitTest.java | 19 ++++++++++++++----- 6 files changed, 39 insertions(+), 17 deletions(-) diff --git a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorIntegrationTest.java index 4eefd71..9b25692 100644 --- a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorIntegrationTest.java +++ b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorIntegrationTest.java @@ -86,7 +86,9 @@ public class GMSLocatorIntegrationTest { SocketCreatorFactory .getSocketCreatorForComponent(SecurableCommunicationChannel.LOCATOR)), InternalDataSerializer.getDSFIDSerializer().getObjectSerializer(), - InternalDataSerializer.getDSFIDSerializer().getObjectDeserializer())); + InternalDataSerializer.getDSFIDSerializer().getObjectDeserializer()), + InternalDataSerializer.getDSFIDSerializer().getObjectSerializer(), + InternalDataSerializer.getDSFIDSerializer().getObjectDeserializer()); GMSMembership membership = mock(GMSMembership.class); when(membership.getServices()).thenReturn(services); gmsLocator.setMembership(membership); diff --git a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorRecoveryIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorRecoveryIntegrationTest.java index 5bb3539..fbb07f8 100644 --- a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorRecoveryIntegrationTest.java +++ b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorRecoveryIntegrationTest.java @@ -99,7 +99,9 @@ public class GMSLocatorRecoveryIntegrationTest { SocketCreatorFactory .getSocketCreatorForComponent(SecurableCommunicationChannel.LOCATOR)), InternalDataSerializer.getDSFIDSerializer().getObjectSerializer(), - InternalDataSerializer.getDSFIDSerializer().getObjectDeserializer())); + InternalDataSerializer.getDSFIDSerializer().getObjectDeserializer()), + InternalDataSerializer.getDSFIDSerializer().getObjectSerializer(), + InternalDataSerializer.getDSFIDSerializer().getObjectDeserializer()); gmsLocator.setViewFile(stateFile); } @@ -199,7 +201,9 @@ public class GMSLocatorRecoveryIntegrationTest { GMSLocator gmsLocator = new GMSLocator(localHost, distribution.getLocalMember().getHost() + "[" + port + "]", true, true, - new LocatorStats(), "", temporaryFolder.getRoot().toPath(), locatorClient); + new LocatorStats(), "", temporaryFolder.getRoot().toPath(), locatorClient, + InternalDataSerializer.getDSFIDSerializer().getObjectSerializer(), + InternalDataSerializer.getDSFIDSerializer().getObjectDeserializer()); gmsLocator.setViewFile(new File(temporaryFolder.getRoot(), "locator2.dat")); gmsLocator.init(null); diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSLocatorAdapter.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSLocatorAdapter.java index c079ad3..5d0e931 100644 --- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSLocatorAdapter.java +++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSLocatorAdapter.java @@ -67,7 +67,9 @@ public class GMSLocatorAdapter implements RestartableTcpHandler, NetLocator { gmsLocator = new GMSLocator<>(bindAddress, locatorString, usePreferredCoordinators, networkPartitionDetectionEnabled, - locatorStats, securityUDPDHAlgo, workingDirectory, locatorClient); + locatorStats, securityUDPDHAlgo, workingDirectory, locatorClient, + InternalDataSerializer.getDSFIDSerializer().getObjectSerializer(), + InternalDataSerializer.getDSFIDSerializer().getObjectDeserializer()); } catch (MembershipConfigurationException e) { throw new GemFireConfigException(e.getMessage()); } diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java index 8abcc8c..c04ad18 100644 --- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java +++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java @@ -50,7 +50,8 @@ import org.apache.geode.distributed.internal.membership.gms.interfaces.Locator; import org.apache.geode.distributed.internal.membership.gms.membership.HostAddress; import org.apache.geode.distributed.internal.membership.gms.messenger.GMSMemberWrapper; import org.apache.geode.distributed.internal.tcpserver.TcpClient; -import org.apache.geode.internal.InternalDataSerializer; +import org.apache.geode.internal.serialization.ObjectDeserializer; +import org.apache.geode.internal.serialization.ObjectSerializer; import org.apache.geode.internal.serialization.Version; import org.apache.geode.internal.serialization.VersionedDataInputStream; import org.apache.geode.logging.internal.log4j.api.LogService; @@ -71,6 +72,8 @@ public class GMSLocator<ID extends MemberIdentifier> implements Locator<ID> { private final Map<GMSMemberWrapper, byte[]> publicKeys = new ConcurrentHashMap<>(); private final Path workingDirectory; + private final ObjectSerializer objectSerializer; + private final ObjectDeserializer objectDeserializer; private volatile boolean isCoordinator; @@ -95,10 +98,14 @@ public class GMSLocator<ID extends MemberIdentifier> implements Locator<ID> { * @param locatorStats the locator statistics object * @param securityUDPDHAlgo DF algorithm * @param workingDirectory directory to use for view file (defaults to "user.dir") + * @param objectSerializer a serializer used to persist the membership view + * @param objectDeserializer a deserializer used to recover the membership view */ public GMSLocator(InetAddress bindAddress, String locatorString, boolean usePreferredCoordinators, boolean networkPartitionDetectionEnabled, LocatorStats locatorStats, - String securityUDPDHAlgo, Path workingDirectory, final TcpClient locatorClient) + String securityUDPDHAlgo, Path workingDirectory, final TcpClient locatorClient, + ObjectSerializer objectSerializer, + ObjectDeserializer objectDeserializer) throws MembershipConfigurationException { this.usePreferredCoordinators = usePreferredCoordinators; this.networkPartitionDetectionEnabled = networkPartitionDetectionEnabled; @@ -112,6 +119,8 @@ public class GMSLocator<ID extends MemberIdentifier> implements Locator<ID> { this.locatorStats = locatorStats; this.workingDirectory = workingDirectory; this.locatorClient = locatorClient; + this.objectSerializer = objectSerializer; + this.objectDeserializer = objectDeserializer; } public synchronized boolean setMembership(Membership<ID> membership) { @@ -347,7 +356,7 @@ public class GMSLocator<ID extends MemberIdentifier> implements Locator<ID> { oos.writeInt(Version.getCurrentVersion().ordinal()); oos.flush(); DataOutputStream dataOutputStream = new DataOutputStream(fileStream); - services.getSerializer().getObjectSerializer().writeObject(view, dataOutputStream); + objectSerializer.writeObject(view, dataOutputStream); } catch (Exception e) { logger.warn( "Peer locator encountered an error writing current membership to disk. Disabling persistence. Care should be taken when bouncing this locator as it will not be able to recover knowledge of the running distributed system", @@ -446,7 +455,7 @@ public class GMSLocator<ID extends MemberIdentifier> implements Locator<ID> { // TBD - services isn't available when we recover from disk so this will throw an NPE // recoveredView = (GMSMembershipView) services.getSerializer().readDSFID(input); - recoveredView = InternalDataSerializer.readObject(input); + recoveredView = objectDeserializer.readObject(input); // this is not a valid view so it shouldn't have a usable Id recoveredView.setViewId(-1); diff --git a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/MembershipDependenciesJUnitTest.java b/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/MembershipDependenciesJUnitTest.java index b5cd52d..870967b 100644 --- a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/MembershipDependenciesJUnitTest.java +++ b/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/MembershipDependenciesJUnitTest.java @@ -33,7 +33,6 @@ import org.apache.geode.distributed.Locator; import org.apache.geode.distributed.internal.LocatorStats; import org.apache.geode.distributed.internal.membership.adapter.LocalViewMessage; import org.apache.geode.internal.ClassPathLoader; -import org.apache.geode.internal.InternalDataSerializer; import org.apache.geode.internal.OSProcess; import org.apache.geode.internal.net.SocketCreator; import org.apache.geode.internal.net.SocketCreatorFactory; @@ -107,9 +106,6 @@ public class MembershipDependenciesJUnitTest { // TODO: Create a new stats interface for membership .or(type(LocatorStats.class)) - // TODO: Serialization needs to become its own module - .or(type(InternalDataSerializer.class)) // still used by GMSLocator - // TODO: .or(type(SocketCreator.class)) .or(type(SocketCreatorFactory.class)) diff --git a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberDataJUnitTest.java b/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberDataJUnitTest.java index faa381b..b50dcf2 100644 --- a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberDataJUnitTest.java +++ b/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberDataJUnitTest.java @@ -31,11 +31,13 @@ import java.io.DataOutputStream; import java.net.InetAddress; import org.jgroups.util.UUID; +import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; -import org.apache.geode.internal.InternalDataSerializer; import org.apache.geode.internal.serialization.BufferDataOutputStream; +import org.apache.geode.internal.serialization.DSFIDSerializer; +import org.apache.geode.internal.serialization.DSFIDSerializerFactory; import org.apache.geode.internal.serialization.DeserializationContext; import org.apache.geode.internal.serialization.SerializationContext; import org.apache.geode.internal.serialization.Version; @@ -45,6 +47,14 @@ import org.apache.geode.test.junit.categories.SecurityTest; @Category({SecurityTest.class}) public class GMSMemberDataJUnitTest { + private DSFIDSerializer dsfidSerializer; + + @Before + public void setup() { + dsfidSerializer = new DSFIDSerializerFactory().create(); + Services.registerSerializables(dsfidSerializer); + } + @Test public void testEqualsNotSameType() { GMSMemberData member = new GMSMemberData(); @@ -195,14 +205,14 @@ public class GMSMemberDataJUnitTest { ByteArrayOutputStream baos = new ByteArrayOutputStream(); GMSMemberData member = new GMSMemberData(); DataOutput dataOutput = new DataOutputStream(baos); - SerializationContext serializationContext = InternalDataSerializer.getDSFIDSerializer() + SerializationContext serializationContext = dsfidSerializer .createSerializationContext(dataOutput); member.writeEssentialData(dataOutput, serializationContext); // vmKind should be transmitted to a member with the current version ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); DataInput dataInput = new DataInputStream(bais); - DeserializationContext deserializationContext = InternalDataSerializer.getDSFIDSerializer() + DeserializationContext deserializationContext = dsfidSerializer .createDeserializationContext(dataInput); GMSMemberData newMember = new GMSMemberData(); newMember.readEssentialData(dataInput, deserializationContext); @@ -213,8 +223,7 @@ public class GMSMemberDataJUnitTest { member.writeEssentialData(dataOutput, serializationContext); bais = new ByteArrayInputStream(baos.toByteArray()); DataInputStream stream = new DataInputStream(bais); - deserializationContext = - InternalDataSerializer.createDeserializationContext(stream); + deserializationContext = dsfidSerializer.createDeserializationContext(stream); dataInput = new VersionedDataInputStream(stream, Version.GFE_90); newMember = new GMSMemberData(); newMember.readEssentialData(dataInput, deserializationContext);
