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/08/07 21:58:44 UTC

[geode] branch feature/GEODE-6883-mcast-problems created (now 43f02f0)

This is an automated email from the ASF dual-hosted git repository.

bschuchardt pushed a change to branch feature/GEODE-6883-mcast-problems
in repository https://gitbox.apache.org/repos/asf/geode.git.


      at 43f02f0  GEODE-6883 refactor GMS classes

This branch includes the following new commits:

     new 43f02f0  GEODE-6883 refactor GMS classes

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[geode] 01/01: GEODE-6883 refactor GMS classes

Posted by bs...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bschuchardt pushed a commit to branch feature/GEODE-6883-mcast-problems
in repository https://gitbox.apache.org/repos/asf/geode.git

commit 43f02f07b05a62da6219a592a8b86a348682a3ec
Author: Bruce Schuchardt <bs...@pivotal.io>
AuthorDate: Wed Aug 7 14:13:44 2019 -0700

    GEODE-6883 refactor GMS classes
    
    refactoring to remove references to InternalDistributedMember or
    DistributionMessage in "gms" packages caused failures when
    multicast is enabled on Regions.
    
    Queued messages received during startup have partial sender identifiers
    and these need to have their isPartial bit set correctly so they won't
    be treated as full identifiers.
---
 .../cache30/DistributedMulticastRegionDUnitTest.java   |  5 ++---
 .../internal/membership/InternalDistributedMember.java |  4 ++--
 .../internal/membership/MembershipView.java            | 18 ++++++++++++++++++
 .../distributed/internal/membership/NetMember.java     |  3 +++
 .../internal/membership/adapter/GMSMemberAdapter.java  |  5 +++++
 .../membership/adapter/GMSMembershipManager.java       |  1 +
 .../distributed/internal/membership/gms/GMSMember.java | 15 +++++++++++----
 .../membership/gms/messenger/JGroupsMessenger.java     |  2 +-
 8 files changed, 43 insertions(+), 10 deletions(-)

diff --git a/geode-core/src/distributedTest/java/org/apache/geode/cache30/DistributedMulticastRegionDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/cache30/DistributedMulticastRegionDUnitTest.java
index 2e2b7ff..fcb4727 100755
--- a/geode-core/src/distributedTest/java/org/apache/geode/cache30/DistributedMulticastRegionDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/cache30/DistributedMulticastRegionDUnitTest.java
@@ -35,7 +35,6 @@ import java.util.concurrent.TimeUnit;
 
 import org.assertj.core.api.Assertions;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 
 import org.apache.geode.cache.AttributesFactory;
@@ -133,7 +132,6 @@ public class DistributedMulticastRegionDUnitTest extends JUnit4CacheTestCase {
     closeLocator();
   }
 
-  @Ignore
   @Test
   public void testMulticastAfterReconnect() {
     final String name = "mcastRegion";
@@ -166,7 +164,7 @@ public class DistributedMulticastRegionDUnitTest extends JUnit4CacheTestCase {
 
     DistributedTestUtils.crashDistributedSystem(vm1);
     vm0.invoke(doPuts);
-    vm1.invoke(() -> {
+    vm1.invoke("wait for vm1 to reconnect", () -> {
       basicGetCache().waitUntilReconnected(30, TimeUnit.SECONDS);
       assertNotNull(basicGetCache().getReconnectedCache());
       cache = (InternalCache) basicGetCache().getReconnectedCache();
@@ -281,6 +279,7 @@ public class DistributedMulticastRegionDUnitTest extends JUnit4CacheTestCase {
   @Override
   public Properties getDistributedSystemProperties() {
     Properties p = new Properties();
+    p.put(NAME, "vm" + VM.getCurrentVMNum());
     p.put(DISABLE_AUTO_RECONNECT, "false");
     p.put(MAX_WAIT_TIME_RECONNECT, "20");
     p.put(STATISTIC_SAMPLING_ENABLED, "true");
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
index bd14909..7327829 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
@@ -174,7 +174,7 @@ public class InternalDistributedMember implements DistributedMember, Externaliza
   public InternalDistributedMember(NetMember m) {
     netMbr = m;
 
-    if (netMbr.getHostName() == null) {
+    if (netMbr.getHostName() == null || netMbr.isPartial()) {
       String hostName = SocketCreator.resolve_dns ? SocketCreator.getHostName(m.getInetAddress())
           : m.getInetAddress().getHostAddress();
       netMbr.setHostName(hostName);
@@ -187,7 +187,7 @@ public class InternalDistributedMember implements DistributedMember, Externaliza
       this.versionObj = Version.CURRENT;
     }
     cachedToString = null;
-    this.isPartial = false;
+    this.isPartial = m.isPartial();
   }
 
   /**
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/MembershipView.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/MembershipView.java
index 9371cae..096b62d 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/MembershipView.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/MembershipView.java
@@ -148,6 +148,24 @@ public class MembershipView {
     return null;
   }
 
+
+  /**
+   * Returns the ID from this view that is equal to the argument. If no such ID exists the argument
+   * is returned.
+   */
+  public synchronized InternalDistributedMember getCanonicalID(InternalDistributedMember id) {
+    if (hashedMembers.contains(id)) {
+      for (InternalDistributedMember m : this.members) {
+        if (id.equals(m)) {
+          return m;
+        }
+      }
+    }
+    return id;
+  }
+
+
+
   public InternalDistributedMember getCoordinator() {
     for (InternalDistributedMember addr : members) {
       if (addr.getNetMember().preferredForCoordinator()) {
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/NetMember.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/NetMember.java
index 920db7c..1623bd7 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/NetMember.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/NetMember.java
@@ -109,4 +109,7 @@ public interface NetMember extends Comparable<NetMember> {
   void setHostName(String hostName);
 
   String getHostName();
+
+  /** is this a partial ID created without full identifier information? */
+  boolean isPartial();
 }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSMemberAdapter.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSMemberAdapter.java
index 978fdef..a06e362 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSMemberAdapter.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSMemberAdapter.java
@@ -171,6 +171,11 @@ public class GMSMemberAdapter implements NetMember {
   }
 
   @Override
+  public boolean isPartial() {
+    return gmsMember.isPartial();
+  }
+
+  @Override
   public void setDurableClientAttributes(DurableClientAttributes attributes) {
     durableClientAttributes = attributes;
     if (attributes != null) {
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSMembershipManager.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSMembershipManager.java
index 881866c..3893e41 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSMembershipManager.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSMembershipManager.java
@@ -1151,6 +1151,7 @@ public class GMSMembershipManager implements MembershipManager {
 
     if (o.isDistributionMessage()) { // normal message
       try {
+        o.dmsg.setSender(latestView.getCanonicalID(o.dmsg.getSender()));
         dispatchMessage(o.dmsg);
       } catch (MemberShunnedException e) {
         // message from non-member - ignore
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMember.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMember.java
index bacae83..71ec3a1 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMember.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMember.java
@@ -64,6 +64,11 @@ public class GMSMember implements DataSerializableFixedID {
   private String durableId;
   private int durableTimeout;
 
+  private boolean isPartial; // transient state - created with readEssentialData
+
+  public boolean isPartial() {
+    return isPartial;
+  }
 
   // Used only by Externalization
   public GMSMember() {}
@@ -340,10 +345,11 @@ public class GMSMember implements DataSerializableFixedID {
     StringBuilder sb = new StringBuilder(100);
     String uuid = formatUUID();
 
-    sb.append("GMSMember[addr=").append(inetAddr).append(";port=").append(udpPort)
-        .append(";kind=").append(vmKind).append(";processId=").append(";viewId=").append(vmViewId)
-        .append(processId).append(";v").append(versionOrdinal).append(";name=")
-        .append(name).append(uuid).append(";weight=").append(memberWeight)
+    sb.append("GMSMember[name=").append(name)
+        .append(";addr=").append(inetAddr).append(";port=").append(udpPort)
+        .append(";kind=").append(vmKind).append(";processId=").append(processId)
+        .append(";viewId=").append(vmViewId)
+        .append(";version=").append(versionOrdinal).append(uuid)
         .append("]");
     return sb.toString();
   }
@@ -620,6 +626,7 @@ public class GMSMember implements DataSerializableFixedID {
     if (InternalDataSerializer.getVersionForDataStream(in).compareTo(Version.GEODE_1_2_0) >= 0) {
       this.vmKind = in.readByte();
     }
+    this.isPartial = true;
   }
 
 
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessenger.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessenger.java
index 6e396e8..8b0dcf6 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessenger.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessenger.java
@@ -1170,7 +1170,7 @@ public class JGroupsMessenger implements Messenger {
           try {
             Digest digest = new Digest();
             digest.readFrom(dis);
-            logger.trace("installing JGroups message digest {}", digest);
+            logger.trace("installing JGroups message digest {} from {}", digest, m);
             this.myChannel.getProtocolStack().getTopProtocol()
                 .down(new Event(Event.MERGE_DIGEST, digest));
             jrsp.setMessengerData(null);