ninja fix cassandra-stress pre-2.1.1 compatibility

This commit is contained in:
Benedict Elliott Smith 2014-09-16 06:28:01 +01:00
parent 1ba959391c
commit 4efb6dc8c1
4 changed files with 41 additions and 8 deletions

View File

@ -32,6 +32,7 @@ import java.util.concurrent.TimeUnit;
import org.apache.commons.lang3.time.DurationFormatUtils; import org.apache.commons.lang3.time.DurationFormatUtils;
import org.apache.cassandra.concurrent.NamedThreadFactory; import org.apache.cassandra.concurrent.NamedThreadFactory;
import org.apache.cassandra.stress.settings.SettingsLog;
import org.apache.cassandra.stress.settings.StressSettings; import org.apache.cassandra.stress.settings.StressSettings;
import org.apache.cassandra.stress.util.JmxCollector; import org.apache.cassandra.stress.util.JmxCollector;
import org.apache.cassandra.stress.util.Timing; import org.apache.cassandra.stress.util.Timing;
@ -60,11 +61,15 @@ public class StressMetrics
totalGcStats = new JmxCollector.GcStats(0); totalGcStats = new JmxCollector.GcStats(0);
try try
{ {
gcStatsCollector = new JmxCollector(settings.node.nodes, settings.port.jmxPort); gcStatsCollector = new JmxCollector(settings.node.resolveAllPermitted(settings), settings.port.jmxPort);
} }
catch (Throwable t) catch (Throwable t)
{ {
t.printStackTrace(); switch (settings.log.level)
{
case VERBOSE:
t.printStackTrace();
}
System.err.println("Failed to connect over JMX; not collecting these stats"); System.err.println("Failed to connect over JMX; not collecting these stats");
gcStatsCollector = new Callable<JmxCollector.GcStats>() gcStatsCollector = new Callable<JmxCollector.GcStats>()
{ {

View File

@ -32,6 +32,8 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import com.datastax.driver.core.Host;
public class SettingsNode implements Serializable public class SettingsNode implements Serializable
{ {
public final List<String> nodes; public final List<String> nodes;
@ -71,7 +73,28 @@ public class SettingsNode implements Serializable
isWhiteList = options.whitelist.setByUser(); isWhiteList = options.whitelist.setByUser();
} }
public Set<InetAddress> resolveAll() public Set<String> resolveAllPermitted(StressSettings settings)
{
Set<String> r = new HashSet<>();
switch (settings.mode.api)
{
case THRIFT_SMART:
case JAVA_DRIVER_NATIVE:
if (!isWhiteList)
{
for (Host host : settings.getJavaDriverClient().getCluster().getMetadata().getAllHosts())
r.add(host.getAddress().getHostName());
break;
}
case THRIFT:
case SIMPLE_NATIVE:
for (InetAddress address : resolveAllSpecified())
r.add(address.getHostName());
}
return r;
}
public Set<InetAddress> resolveAllSpecified()
{ {
Set<InetAddress> r = new HashSet<>(); Set<InetAddress> r = new HashSet<>();
for (String node : nodes) for (String node : nodes)

View File

@ -20,6 +20,7 @@ package org.apache.cassandra.stress.util;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
@ -75,11 +76,16 @@ public class JmxCollector implements Callable<JmxCollector.GcStats>
final NodeProbe[] probes; final NodeProbe[] probes;
// TODO: should expand to whole cluster // TODO: should expand to whole cluster
public JmxCollector(List<String> hosts, int port) public JmxCollector(Collection<String> hosts, int port)
{ {
probes = new NodeProbe[hosts.size()]; probes = new NodeProbe[hosts.size()];
for (int i = 0 ; i < hosts.size() ; i++) int i = 0;
probes[i] = connect(hosts.get(i), port); for (String host : hosts)
{
probes[i] = connect(host, port);
probes[i].getAndResetGCStats();
i++;
}
} }
private static NodeProbe connect(String host, int port) private static NodeProbe connect(String host, int port)

View File

@ -22,7 +22,6 @@ package org.apache.cassandra.stress.util;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@ -64,7 +63,7 @@ public class SmartThriftClient implements ThriftClient
} }
else else
{ {
whiteset = settings.node.resolveAll(); whiteset = settings.node.resolveAllSpecified();
whitelist = Arrays.asList(whiteset.toArray(new InetAddress[0])); whitelist = Arrays.asList(whiteset.toArray(new InetAddress[0]));
} }
} }