You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by br...@apache.org on 2011/01/03 23:22:13 UTC

svn commit: r1054808 - in /cassandra/branches/cassandra-0.7: ./ src/java/org/apache/cassandra/service/ src/java/org/apache/cassandra/tools/

Author: brandonwilliams
Date: Mon Jan  3 22:22:13 2011
New Revision: 1054808

URL: http://svn.apache.org/viewvc?rev=1054808&view=rev
Log:
ability to forcibly mark machines failed by disabling gossip via JMX.
Patch by brandonwilliams, reviewed by jbellis for CASSANDRA-1108

Modified:
    cassandra/branches/cassandra-0.7/CHANGES.txt
    cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageService.java
    cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageServiceMBean.java
    cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeCmd.java
    cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeProbe.java

Modified: cassandra/branches/cassandra-0.7/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/CHANGES.txt?rev=1054808&r1=1054807&r2=1054808&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.7/CHANGES.txt Mon Jan  3 22:22:13 2011
@@ -30,6 +30,8 @@ dev
  * include secondary indexes in cleanup (CASSANDRA-1916)
  * CFS.scrubDataDirectories should also cleanup invalid secondary indexes
    (CASSANDRA-1904)
+ * ability to disable/enable gossip on nodes to force them down
+   (CASSANDRA-1108)
 
 
 0.7.0-rc3

Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageService.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageService.java?rev=1054808&r1=1054807&r2=1054808&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageService.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageService.java Mon Jan  3 22:22:13 2011
@@ -246,6 +246,28 @@ public class StorageService implements I
             throw new RuntimeException("Streaming service is unavailable.");
     }
 
+    // should only be called via JMX
+    public void stopGossiping()
+    {
+        if (initialized)
+        {
+            logger_.warn("Stopping gossip by operator request");
+            Gossiper.instance.stop();
+            initialized = false;
+        }
+    }
+
+    // should only be called via JMX
+    public void startGossiping()
+    {
+        if (!initialized)
+        {
+            logger_.warn("Starting gossip by operator request");
+            Gossiper.instance.start(FBUtilities.getLocalAddress(), (int)(System.currentTimeMillis() / 1000));
+            initialized = true;
+        }
+    }
+
     public void stopClient()
     {
         Gossiper.instance.unregister(migrationManager);

Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageServiceMBean.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageServiceMBean.java?rev=1054808&r1=1054807&r2=1054808&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageServiceMBean.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageServiceMBean.java Mon Jan  3 22:22:13 2011
@@ -270,4 +270,13 @@ public interface StorageServiceMBean
      * @throws ConfigurationException  classname not found on classpath
      */
     public void updateSnitch(String epSnitchClassName, Boolean dynamic, Integer dynamicUpdateInterval, Integer dynamicResetInterval, Double dynamicBadnessThreshold) throws ConfigurationException;
+
+    // allows a user to forcibly 'kill' a sick node
+    public void stopGossiping();
+
+    // allows a user to recover a forcibly 'killed' node
+    public void startGossiping();
+
+    // to determine if gossip is disabled
+    public boolean isInitialized();
 }

Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeCmd.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeCmd.java?rev=1054808&r1=1054807&r2=1054808&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeCmd.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeCmd.java Mon Jan  3 22:22:13 2011
@@ -74,7 +74,7 @@ public class NodeCmd {
         RING, INFO, CFSTATS, SNAPSHOT, CLEARSNAPSHOT, VERSION, TPSTATS, FLUSH, DRAIN,
         DECOMMISSION, MOVE, LOADBALANCE, REMOVETOKEN, REPAIR, CLEANUP, COMPACT,
         SETCACHECAPACITY, GETCOMPACTIONTHRESHOLD, SETCOMPACTIONTHRESHOLD, NETSTATS, CFHISTOGRAMS,
-        COMPACTIONSTATS
+        COMPACTIONSTATS, DISABLEGOSSIP, ENABLEGOSSIP
     }
 
     
@@ -96,6 +96,8 @@ public class NodeCmd {
                          + "decommission\n"
                          + "loadbalance\n"
                          + "compactionstats\n"
+                         + "disablegossip\n"
+                         + "enablegossip\n"
 
                          // One arg
                          + "snapshot [snapshotname]\n"
@@ -189,6 +191,7 @@ public class NodeCmd {
     public void printInfo(PrintStream outs)
     {
         outs.println(probe.getToken());
+        outs.printf("%-17s: %s%n", "Gossip active", probe.isInitialized());
         outs.printf("%-17s: %s%n", "Load", probe.getLoadString());
         outs.printf("%-17s: %s%n", "Generation No", probe.getCurrentGenerationNumber());
         
@@ -519,6 +522,8 @@ public class NodeCmd {
             case TPSTATS         : nodeCmd.printThreadPoolStats(System.out); break;
             case VERSION         : nodeCmd.printReleaseVersion(System.out); break;
             case COMPACTIONSTATS : nodeCmd.printCompactionStats(System.out); break;
+            case DISABLEGOSSIP   : probe.stopGossiping(); break;
+            case ENABLEGOSSIP    : probe.startGossiping(); break;
 
             case DRAIN :
                 try { probe.drain(); }

Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeProbe.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeProbe.java?rev=1054808&r1=1054807&r2=1054808&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeProbe.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/NodeProbe.java Mon Jan  3 22:22:13 2011
@@ -503,6 +503,21 @@ public class NodeProbe
     {
         return ssProxy.getKeyspaces();
     }
+
+    public void stopGossiping()
+    {
+        ssProxy.stopGossiping();
+    }
+
+    public void startGossiping()
+    {
+        ssProxy.startGossiping();
+    }
+
+    public boolean isInitialized()
+    {
+        return ssProxy.isInitialized();
+    }
 }
 
 class ColumnFamilyStoreMBeanIterator implements Iterator<Map.Entry<String, ColumnFamilyStoreMBean>>