You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2009/10/07 18:23:25 UTC
svn commit: r822791 - in
/incubator/cassandra/trunk/src/java/org/apache/cassandra:
service/StorageLoadBalancer.java service/StorageService.java
service/StorageServiceMBean.java tools/NodeProbe.java
Author: jbellis
Date: Wed Oct 7 16:23:24 2009
New Revision: 822791
URL: http://svn.apache.org/viewvc?rev=822791&view=rev
Log:
add getLoadMap jmx method; add load info to nodeprobe ring
patch by jbellis; reviewed by Eric Evans for CASSANDRA-385
Modified:
incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageLoadBalancer.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageLoadBalancer.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageLoadBalancer.java?rev=822791&r1=822790&r2=822791&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageLoadBalancer.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageLoadBalancer.java Wed Oct 7 16:23:24 2009
@@ -338,6 +338,11 @@
}
return null;
}
+
+ public Map<EndPoint, Double> getLoadInfo()
+ {
+ return loadInfo_;
+ }
}
class MoveMessage implements Serializable
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java?rev=822791&r1=822790&r2=822791&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java Wed Oct 7 16:23:24 2009
@@ -379,16 +379,13 @@
*/
public Map<Range, List<EndPoint>> constructRangeToEndPointMap(Range[] ranges)
{
- if (logger_.isDebugEnabled())
- logger_.debug("Constructing range to endpoint map ...");
Map<Range, List<EndPoint>> rangeToEndPointMap = new HashMap<Range, List<EndPoint>>();
- for ( Range range : ranges )
+ for (Range range : ranges)
{
EndPoint[] endpoints = nodePicker_.getReadStorageEndPoints(range.right());
- rangeToEndPointMap.put(range, new ArrayList<EndPoint>( Arrays.asList(endpoints) ) );
+ // create a new ArrayList since a bunch of methods like to mutate the endpointmap List
+ rangeToEndPointMap.put(range, new ArrayList<EndPoint>(Arrays.asList(endpoints)));
}
- if (logger_.isDebugEnabled())
- logger_.debug("Done constructing range to endpoint map ...");
return rangeToEndPointMap;
}
@@ -514,6 +511,22 @@
return FileUtils.stringifyFileSize(FileUtils.getUsedDiskSpace());
}
+ public Map<String, String> getLoadMap()
+ {
+ Map<String, String> map = new HashMap<String, String>();
+ for (Map.Entry<EndPoint,Double> entry : storageLoadBalancer_.getLoadInfo().entrySet())
+ {
+ map.put(entry.getKey().getHost(), FileUtils.stringifyFileSize(entry.getValue()));
+ }
+ // gossiper doesn't bother sending to itself, so if there are no other nodes around
+ // we need to cheat to get load information for the local node
+ if (!map.containsKey(getLocalControlEndPoint().getHost()))
+ {
+ map.put(getLocalControlEndPoint().getHost(), getLoadString());
+ }
+ return map;
+ }
+
/*
* This method updates the token on disk and modifies the cached
* StorageMetadata instance. This is only for the local endpoint.
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java?rev=822791&r1=822790&r2=822791&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java Wed Oct 7 16:23:24 2009
@@ -64,6 +64,9 @@
/** Human-readable load value */
public String getLoadString();
+ /** Human-readable load value. Keys are IP addresses. */
+ public Map<String, String> getLoadMap();
+
/**
* Return the generation value for this node.
*
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java?rev=822791&r1=822790&r2=822791&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java Wed Oct 7 16:23:24 2009
@@ -205,17 +205,19 @@
Collections.sort(ranges);
Set<String> liveNodes = ssProxy.getLiveNodes();
Set<String> deadNodes = ssProxy.getUnreachableNodes();
+ Map<String, String> loadMap = ssProxy.getLoadMap();
// Print range-to-endpoint mapping
int counter = 0;
outs.print(String.format("%-14s", "Address"));
outs.print(String.format("%-11s", "Status"));
+ outs.print(String.format("%-14s", "Load"));
outs.print(String.format("%-43s", "Range"));
outs.println("Ring");
// emphasize that we're showing the right part of each range
if (ranges.size() > 1)
{
- outs.println(String.format("%-14s%-11s%-43s", "", "", ranges.get(0).left()));
+ outs.println(String.format("%-14s%-11s%-14s%-43s", "", "", "", ranges.get(0).left()));
}
// normal range & node info
for (Range range : ranges) {
@@ -223,12 +225,17 @@
String primaryEndpoint = endpoints.get(0);
outs.print(String.format("%-14s", primaryEndpoint));
+
String status = liveNodes.contains(primaryEndpoint)
- ? "Up"
- : deadNodes.contains(primaryEndpoint)
- ? "Down"
- : "?";
+ ? "Up"
+ : deadNodes.contains(primaryEndpoint)
+ ? "Down"
+ : "?";
outs.print(String.format("%-11s", status));
+
+ String load = loadMap.containsKey(primaryEndpoint) ? loadMap.get(primaryEndpoint) : "?";
+ outs.print(String.format("%-14s", load));
+
outs.print(String.format("%-43s", range.right()));
String asciiRingArt;