You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by bs...@apache.org on 2019/12/19 21:53:22 UTC

[geode] 01/01: GEODE-7606 Break dependency on InternalDataSerializer

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 <bs...@pivotal.io>
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);