Author: jbellis Date: Fri Jun 24 12:09:28 2011 New Revision: 1139264 URL: http://svn.apache.org/viewvc?rev=1139264&view=rev Log: add "nodetool endpoints" patch by Patricio Echague; reviewed by jbellis for CASSANDRA-2776
Modified: cassandra/branches/cassandra-0.8/CHANGES.txt cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/service/StorageService.java cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/service/StorageServiceMBean.java cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/tools/NodeCmd.java cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/tools/NodeProbe.java Modified: cassandra/branches/cassandra-0.8/CHANGES.txt URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/CHANGES.txt?rev=1139264&r1=1139263&r2=1139264&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8/CHANGES.txt (original) +++ cassandra/branches/cassandra-0.8/CHANGES.txt Fri Jun 24 12:09:28 2011 @@ -78,6 +78,7 @@ * Fix wrong purge of deleted cf during compaction (CASSANDRA-2786) * Expose number of threads blocked on submitting memtable to flush (CASSANDRA-2817) + * add ability to return "endpoints" to nodetool (CASSANDRA-2776) 0.8.0-final Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/service/StorageService.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/service/StorageService.java?rev=1139264&r1=1139263&r2=1139264&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/service/StorageService.java (original) +++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/service/StorageService.java Fri Jun 24 12:09:28 2011 @@ -1599,12 +1599,15 @@ public class StorageService implements I * This method returns the N endpoints that are responsible for storing the * specified key i.e for replication. * + * @param table keyspace name also known as table + * @param cf Column family name * @param key - key for which we need to find the endpoint return value - * the endpoint responsible for this key */ - public List<InetAddress> getNaturalEndpoints(String table, byte[] key) + public List<InetAddress> getNaturalEndpoints(String table, String cf, String key) { - return getNaturalEndpoints(table, partitioner.getToken(ByteBuffer.wrap(key))); + CFMetaData cfMetaData = DatabaseDescriptor.getTableDefinition(table).cfMetaData().get(cf); + return getNaturalEndpoints(table, partitioner.getToken(cfMetaData.getKeyValidator().fromString(key))); } public List<InetAddress> getNaturalEndpoints(String table, ByteBuffer key) Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/service/StorageServiceMBean.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/service/StorageServiceMBean.java?rev=1139264&r1=1139263&r2=1139264&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/service/StorageServiceMBean.java (original) +++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/service/StorageServiceMBean.java Fri Jun 24 12:09:28 2011 @@ -130,10 +130,12 @@ public interface StorageServiceMBean * This method returns the N endpoints that are responsible for storing the * specified key i.e for replication. * + * @param table keyspace name also known as table + * @param cf Column family name * @param key - key for which we need to find the endpoint return value - * the endpoint responsible for this key */ - public List<InetAddress> getNaturalEndpoints(String table, byte[] key); + public List<InetAddress> getNaturalEndpoints(String table, String cf, String key); public List<InetAddress> getNaturalEndpoints(String table, ByteBuffer key); /** Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/tools/NodeCmd.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/tools/NodeCmd.java?rev=1139264&r1=1139263&r2=1139264&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/tools/NodeCmd.java (original) +++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/tools/NodeCmd.java Fri Jun 24 12:09:28 2011 @@ -80,7 +80,7 @@ public class NodeCmd DECOMMISSION, MOVE, REMOVETOKEN, REPAIR, CLEANUP, COMPACT, SCRUB, SETCACHECAPACITY, GETCOMPACTIONTHRESHOLD, SETCOMPACTIONTHRESHOLD, NETSTATS, CFHISTOGRAMS, COMPACTIONSTATS, DISABLEGOSSIP, ENABLEGOSSIP, INVALIDATEKEYCACHE, INVALIDATEROWCACHE, - DISABLETHRIFT, ENABLETHRIFT, STATUSTHRIFT, JOIN, SETCOMPACTIONTHROUGHPUT + DISABLETHRIFT, ENABLETHRIFT, STATUSTHRIFT, JOIN, SETCOMPACTIONTHROUGHPUT, GETENDPOINTS } @@ -127,6 +127,9 @@ public class NodeCmd addCmdHelp(header, "getcompactionthreshold <keyspace> <cfname>", "Print min and max compaction thresholds for a given column family"); addCmdHelp(header, "cfhistograms <keyspace> <cfname>", "Print statistic histograms for a given column family"); + // Three args + addCmdHelp(header, "getendpoints <keyspace> <cf> <key>", "Print the end points that owns the key"); + // Four args addCmdHelp(header, "setcachecapacity <keyspace> <cfname> <keycachecapacity> <rowcachecapacity>", "Set the key and row cache capacities of a given column family"); addCmdHelp(header, "setcompactionthreshold <keyspace> <cfname> <minthreshold> <maxthreshold>", "Set the min and max compaction thresholds for a given column family"); @@ -520,6 +523,16 @@ public class NodeCmd } } + private void printEndPoints(String keySpace, String cf, String key, PrintStream output) + { + List<InetAddress> endpoints = this.probe.getEndpoints(keySpace, cf, key); + + for (InetAddress anEndpoint : endpoints) + { + output.println(anEndpoint.getHostAddress()); + } + } + private void printIsThriftServerRunning(PrintStream outs) { outs.println(probe.isThriftServerRunning() ? "running" : "not running"); @@ -678,6 +691,11 @@ public class NodeCmd probe.setCompactionThreshold(arguments[0], arguments[1], minthreshold, maxthreshold); break; + case GETENDPOINTS : + if (arguments.length != 3) { badUse("getendpoints requires ks, cf and key args"); } + nodeCmd.printEndPoints(arguments[0], arguments[1], arguments[2], System.out); + break; + default : throw new RuntimeException("Unreachable code."); Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/tools/NodeProbe.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/tools/NodeProbe.java?rev=1139264&r1=1139263&r2=1139264&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/tools/NodeProbe.java (original) +++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/tools/NodeProbe.java Fri Jun 24 12:09:28 2011 @@ -43,7 +43,10 @@ import com.google.common.collect.Iterabl import org.apache.cassandra.cache.InstrumentingCacheMBean; import org.apache.cassandra.concurrent.JMXEnabledThreadPoolExecutorMBean; +import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.config.ConfigurationException; +import org.apache.cassandra.config.DatabaseDescriptor; +import org.apache.cassandra.config.KSMetaData; import org.apache.cassandra.db.ColumnFamilyStoreMBean; import org.apache.cassandra.db.compaction.CompactionManager; import org.apache.cassandra.db.compaction.CompactionManagerMBean; @@ -437,10 +440,9 @@ public class NodeProbe } } - public List<InetAddress> getEndpoints(String keyspace, String key) + public List<InetAddress> getEndpoints(String keyspace, String cf, String key) { - // FIXME: string key - return ssProxy.getNaturalEndpoints(keyspace, key.getBytes(UTF_8)); + return ssProxy.getNaturalEndpoints(keyspace, cf, key); } public Set<InetAddress> getStreamDestinations()