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 2015/09/08 23:34:08 UTC

[1/2] incubator-geode git commit: GEODE-77 improved handling of join requests having the same host:port as a previous member

Repository: incubator-geode
Updated Branches:
  refs/heads/feature/GEODE-77 4a5119c28 -> ddae00976


GEODE-77 improved handling of join requests having the same host:port as a previous member

This adds a check of the UUID bytes in an address's NetMember in
compareTo to keep a new address from matching an old one.  The
test TXDistributedDUnitTest was failing consistently when a member
crashed its distributed system and then tried to reconnect immediately.
This is due to how JGroups allocates its ports starting with the first
number in the port range and sequencing through until it finds one that's
available.  GemFire had used a random selection algorithm for this.


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/1002aa04
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/1002aa04
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/1002aa04

Branch: refs/heads/feature/GEODE-77
Commit: 1002aa047b6904151bfd6e608bfe0a6467773451
Parents: 4a5119c
Author: Bruce Schuchardt <bs...@pivotal.io>
Authored: Tue Sep 8 14:32:43 2015 -0700
Committer: Bruce Schuchardt <bs...@pivotal.io>
Committed: Tue Sep 8 14:32:43 2015 -0700

----------------------------------------------------------------------
 .../membership/InternalDistributedMember.java   |  3 ++-
 .../internal/membership/NetMember.java          | 26 +-----------------
 .../internal/membership/gms/GMSMember.java      | 28 +++++++++++---------
 .../gms/mgr/GMSMembershipManager.java           |  2 +-
 .../gemfire/cache30/TXDistributedDUnitTest.java |  2 +-
 5 files changed, 20 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/1002aa04/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/InternalDistributedMember.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/InternalDistributedMember.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/InternalDistributedMember.java
index 56eee0d..d29fe97 100755
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/InternalDistributedMember.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/InternalDistributedMember.java
@@ -652,10 +652,11 @@ public final class InternalDistributedMember
         return i;
       }
     }
+    
+    return this.netMbr.compareTo(other.netMbr);
 
     // purposely avoid comparing roles
     // @todo Add durableClientAttributes to compare
-    return 0;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/1002aa04/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/NetMember.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/NetMember.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/NetMember.java
index a110ff2..6fc9ada 100755
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/NetMember.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/NetMember.java
@@ -19,7 +19,7 @@ import java.net.InetAddress;
  * @author jpenney
  *
  */
-public interface NetMember
+public interface NetMember extends Comparable<NetMember>
 {
 
   public void setAttributes(MemberAttributes args);
@@ -60,30 +60,6 @@ public interface NetMember
   
   public byte getMemberWeight();
 
-  /**
-   * Establishes an order between 2 addresses. Assumes other contains non-null IpAddress.
-   * Excludes channel_name from comparison.
-   * @return 0 for equality, value less than 0 if smaller, greater than 0 if greater.
-   */
-  public int compare(NetMember other);
-
-  /**
-   * implements the java.lang.Comparable interface
-   * @see java.lang.Comparable
-   * @param o - the Object to be compared
-   * @return a negative integer, zero, or a positive integer as this object is less than,
-   *         equal to, or greater than the specified object.
-   * @exception java.lang.ClassCastException - if the specified object's type prevents it
-   *            from being compared to this Object.
-   */
-  public int compareTo(Object o);
-
-  public boolean equals(Object obj);
-
-  public int hashCode();
-
-  public String toString();
-  
   /** write identity information not known by DistributedMember instances */
   public void writeAdditionalData(DataOutput out) throws IOException;
   

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/1002aa04/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMember.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMember.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMember.java
index 20bdf1d..0cf2cc7 100755
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMember.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMember.java
@@ -202,16 +202,7 @@ public class GMSMember implements NetMember, DataSerializableFixedID {
     return this.uuidLSBs;
   }
 
-  /**
-   * Establishes an order between 2 addresses. Assumes other contains non-null IpAddress.
-   * Excludes channel_name from comparison.
-   * @return 0 for equality, value less than 0 if smaller, greater than 0 if greater.
-   */
-  public int compare(NetMember other) {
-    return compareTo(other);
-  }
-
-  /**
+  /*
    * implements the java.lang.Comparable interface
    * @see java.lang.Comparable
    * @param o - the Object to be compared
@@ -220,12 +211,12 @@ public class GMSMember implements NetMember, DataSerializableFixedID {
    * @exception java.lang.ClassCastException - if the specified object's type prevents it
    *            from being compared to this Object.
    */
-  public int compareTo(Object o) {
+  public int compareTo(NetMember o) {
     if (o == this) {
       return 0;
     }
     // obligatory type check
-    if ((o == null) || !(o instanceof GMSMember)) {
+    if (o == null || !(o instanceof GMSMember) ) {
       throw new ClassCastException(LocalizedStrings.JGroupMember_JGROUPMEMBERCOMPARETO_COMPARISON_BETWEEN_DIFFERENT_CLASSES.toLocalizedString());
     }
     byte[] myAddr = inetAddr.getAddress();
@@ -269,6 +260,17 @@ public class GMSMember implements NetMember, DataSerializableFixedID {
         }
       }
     }
+    if (result == 0 && this.uuidMSBs != 0 && his.uuidMSBs != 0) {
+      if (this.uuidMSBs < his.uuidMSBs) {
+        result = -1;
+      } else if (his.uuidMSBs < this.uuidMSBs) {
+        result = 1;
+      } else if (this.uuidLSBs < his.uuidLSBs) {
+        result = -1;
+      } else if (his.uuidLSBs < this.uuidLSBs) {
+        result = 1;
+      }
+    }
     return result;
   }
 
@@ -278,7 +280,7 @@ public class GMSMember implements NetMember, DataSerializableFixedID {
     if ((obj == null) || !(obj instanceof GMSMember)) {
       return false;
     }
-    return compareTo(obj) == 0;
+    return compareTo((GMSMember)obj) == 0;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/1002aa04/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/mgr/GMSMembershipManager.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/mgr/GMSMembershipManager.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/mgr/GMSMembershipManager.java
index 1cc079e..418b82b 100755
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/mgr/GMSMembershipManager.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/mgr/GMSMembershipManager.java
@@ -791,7 +791,7 @@ public class GMSMembershipManager implements MembershipManager, Manager
         boolean ok = services.getJoinLeave().join();
         
         if (!ok) {
-          throw new GemFireConfigException("Unable to contact a Locator service.  " +
+          throw new GemFireConfigException("Unable to join the distributed system.  " +
               "Operation either timed out, was stopped or Locator does not exist.");
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/1002aa04/gemfire-core/src/test/java/com/gemstone/gemfire/cache30/TXDistributedDUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/cache30/TXDistributedDUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/cache30/TXDistributedDUnitTest.java
index 03f0ca6..aeb3c18 100644
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/cache30/TXDistributedDUnitTest.java
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/cache30/TXDistributedDUnitTest.java
@@ -508,7 +508,7 @@ public class TXDistributedDUnitTest extends CacheTestCase {
   }
 
   public void testHighAvailabilityFeatures() throws Exception {
-    addExpectedException("killing members ds");
+    addExpectedException("DistributedSystemDisconnectedException");
 //    final CacheTransactionManager txMgr = this.getCache().getCacheTransactionManager();
 //    final TXManagerImpl txMgrImpl = (TXManagerImpl) txMgr;
     final String rgnName = getUniqueName();


[2/2] incubator-geode git commit: GEODE-77 reduced some health monitor logging to trace level

Posted by bs...@apache.org.
GEODE-77 reduced some health monitor logging to trace level

During HA events I observed the health monitor create in excess of 1gb of
log entries per second.  That's way too much for debug-level logging.


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/ddae0097
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/ddae0097
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/ddae0097

Branch: refs/heads/feature/GEODE-77
Commit: ddae00976e4510bf41aca6b7f87dd6b1b3df5574
Parents: 1002aa0
Author: Bruce Schuchardt <bs...@pivotal.io>
Authored: Tue Sep 8 14:33:50 2015 -0700
Committer: Bruce Schuchardt <bs...@pivotal.io>
Committed: Tue Sep 8 14:33:50 2015 -0700

----------------------------------------------------------------------
 .../internal/membership/gms/fd/GMSHealthMonitor.java      | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ddae0097/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/fd/GMSHealthMonitor.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
index 84f537d..613299a 100755
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
@@ -182,7 +182,7 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
         long interval = memberTimeoutInMillis / GMSHealthMonitor.LOGICAL_INTERVAL;
         long lastTS = currentTime - nextNeighbourTS.getTimeStamp();
         if (lastTS + interval >= memberTimeoutInMillis) {
-          logger.debug("Checking member {} ", neighbour);
+          logger.trace("Checking member {} ", neighbour);
           // now do check request for this member;
           checkMember(neighbour);
         }
@@ -232,7 +232,7 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
           String reason = String.format("Member isn't responding to check message: %s", pingMember);
           GMSHealthMonitor.this.sendSuspectMessage(pingMember, reason);
         } else {
-          logger.debug("Setting next neighbour as member {} has not responded.", pingMember);
+          logger.trace("Setting next neighbour as member {} has not responded.", pingMember);
           // back to previous one
           setNextNeighbour(GMSHealthMonitor.this.currentView, null);
         }
@@ -257,7 +257,7 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
    */
   private boolean doCheckMember(InternalDistributedMember pingMember) {
     //TODO: need to some tcp check
-    logger.debug("Checking member {}", pingMember);
+    logger.trace("Checking member {}", pingMember);
     final PingRequestMessage prm = constructPingRequestMessage(pingMember);
     final Response pingResp = new Response();
     requestIdVsResponse.put(prm.getRequestId(), pingResp);
@@ -266,7 +266,7 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
       // TODO: send is throwing exception
       if (membersNotReceivedMsg != null && membersNotReceivedMsg.contains(pingMember)) {
         // member is not part of current view.
-        logger.debug("Member {} is not part of current view.", pingMember);
+        logger.trace("Member {} is not part of current view.", pingMember);
       } else {
         synchronized (pingResp) {
           if (pingResp.getResponseMsg() == null) {
@@ -396,7 +396,7 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
     if (index != -1) {
       int nextNeighbourIndex = (index + 1) % allMembers.size();
       nextNeighbour = allMembers.get(nextNeighbourIndex);
-      logger.debug("Next neighbour to check is {}", nextNeighbour);
+      logger.trace("Next neighbour to check is {}", nextNeighbour);
     }
 
     if (!sameView || memberVsLastMsgTS.size() == 0) {