Author: brandonwilliams
Date: Mon Apr 18 18:57:23 2011
New Revision: 1094694

URL: http://svn.apache.org/viewvc?rev=1094694&view=rev
Log:
Revert "Keep endpoint state until aVeryLongTime when not a fat client"

This reverts commit db9164ffd96ebc7752fc5789c90c7211ba323ad2.

For CASSANDRA-2371.

Modified:
    
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/gms/Gossiper.java

Modified: 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/gms/Gossiper.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/gms/Gossiper.java?rev=1094694&r1=1094693&r2=1094694&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/gms/Gossiper.java
 (original)
+++ 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/gms/Gossiper.java
 Mon Apr 18 18:57:23 2011
@@ -237,18 +237,17 @@ public class Gossiper implements IFailur
     }
 
     /**
-     * Removes the endpoint from gossip completely
+     * Removes the endpoint from unreachable endpoint set
      *
      * @param endpoint endpoint to be removed from the current membership.
     */
     void evictFromMembership(InetAddress endpoint)
     {
         unreachableEndpoints_.remove(endpoint);
-        endpointStateMap_.remove(endpoint);
     }
 
     /**
-     * Removes the endpoint from Gossip but retains endpoint state
+     * Removes the endpoint completely from Gossip
      */
     public void removeEndpoint(InetAddress endpoint)
     {
@@ -258,7 +257,7 @@ public class Gossiper implements IFailur
 
         liveEndpoints_.remove(endpoint);
         unreachableEndpoints_.remove(endpoint);
-        // do not remove endpointState until aVeryLongTime
+        // do not remove endpointState until the quarantine expires
         FailureDetector.instance.remove(endpoint);
         justRemovedEndpoints_.put(endpoint, System.currentTimeMillis());
     }
@@ -428,15 +427,20 @@ public class Gossiper implements IFailur
             {
                 long duration = now - epState.getUpdateTimestamp();
 
-                if 
(StorageService.instance.getTokenMetadata().isMember(endpoint))
-                    epState.setHasToken(true);
                 // check if this is a fat client. fat clients are removed 
automatically from
                 // gosip after FatClientTimeout
-                if (!epState.getHasToken() && !epState.isAlive() && 
!justRemovedEndpoints_.containsKey(endpoint) && (duration > FatClientTimeout_))
+                if (!epState.getHasToken() && !epState.isAlive() && (duration 
> FatClientTimeout_))
                 {
-                    logger_.info("FatClient " + endpoint + " has been silent 
for " + FatClientTimeout_ + "ms, removing from gossip");
-                    removeEndpoint(endpoint); // will put it in 
justRemovedEndpoints to respect quarantine delay
-                    evictFromMembership(endpoint); // can get rid of the state 
immediately
+                    if 
(StorageService.instance.getTokenMetadata().isMember(endpoint))
+                        epState.setHasToken(true);
+                    else
+                    {
+                        if (!justRemovedEndpoints_.containsKey(endpoint)) // 
if the node was decommissioned, it will have been removed but still appear as a 
fat client
+                        {
+                            logger_.info("FatClient " + endpoint + " has been 
silent for " + FatClientTimeout_ + "ms, removing from gossip");
+                            removeEndpoint(endpoint); // after quarantine 
justRemoveEndpoints will remove the state
+                        }
+                    }
                 }
 
                 if ( !epState.isAlive() && (duration > aVeryLongTime_) )
@@ -456,6 +460,7 @@ public class Gossiper implements IFailur
                     if (logger_.isDebugEnabled())
                         logger_.debug(QUARANTINE_DELAY + " elapsed, " + 
entry.getKey() + " gossip quarantine over");
                     justRemovedEndpoints_.remove(entry.getKey());
+                    endpointStateMap_.remove(entry.getKey());
                 }
             }
         }


Reply via email to