diff --git a/CHANGES.txt b/CHANGES.txt index 7b00c4af18..5c7da2adc8 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 4.0-beta5 + * Fix cassandra-stress JMX connection (CASSANDRA-16473) * Avoid processing redundant application states on endpoint changes (CASSANDRA-16381) * Prevent parent repair sessions leak (CASSANDRA-16446) * Fix timestamp issue in SinglePartitionSliceCommandTest testPartitionD…eletionRowDeletionTie (CASSANDRA-16443) diff --git a/build.xml b/build.xml index 5c93897916..fee69a03cf 100644 --- a/build.xml +++ b/build.xml @@ -1089,6 +1089,14 @@ + + + + + + + diff --git a/tools/stress/src/org/apache/cassandra/stress/report/StressMetrics.java b/tools/stress/src/org/apache/cassandra/stress/report/StressMetrics.java index a4058f22ee..b2afd1bf9e 100644 --- a/tools/stress/src/org/apache/cassandra/stress/report/StressMetrics.java +++ b/tools/stress/src/org/apache/cassandra/stress/report/StressMetrics.java @@ -21,8 +21,6 @@ package org.apache.cassandra.stress.report; */ -import static java.util.concurrent.TimeUnit.NANOSECONDS; - import java.io.FileNotFoundException; import java.util.ArrayDeque; import java.util.ArrayList; @@ -31,11 +29,17 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Queue; +import java.util.Set; import java.util.TreeMap; import java.util.concurrent.Callable; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.LockSupport; +import java.util.stream.Collectors; + +import com.google.common.annotations.VisibleForTesting; + +import org.apache.commons.lang3.time.DurationFormatUtils; import org.HdrHistogram.Histogram; import org.HdrHistogram.HistogramLogWriter; @@ -45,11 +49,12 @@ import org.apache.cassandra.stress.StressAction.OpMeasurement; import org.apache.cassandra.stress.settings.SettingsLog.Level; import org.apache.cassandra.stress.settings.StressSettings; import org.apache.cassandra.stress.util.JmxCollector; -import org.apache.cassandra.stress.util.ResultLogger; import org.apache.cassandra.stress.util.JmxCollector.GcStats; +import org.apache.cassandra.stress.util.ResultLogger; import org.apache.cassandra.stress.util.Uncertainty; import org.apache.cassandra.utils.FBUtilities; -import org.apache.commons.lang3.time.DurationFormatUtils; + +import static java.util.concurrent.TimeUnit.NANOSECONDS; public class StressMetrics implements MeasurementSink { @@ -105,7 +110,8 @@ public class StressMetrics implements MeasurementSink totalGcStats = new JmxCollector.GcStats(0); try { - gcStatsCollector = new JmxCollector(settings.node.resolveAllPermitted(settings), settings.port.jmxPort); + gcStatsCollector = new JmxCollector(toJmxNodes(settings.node.resolveAllPermitted(settings)), + settings.port.jmxPort); } catch (Throwable t) { @@ -150,7 +156,6 @@ public class StressMetrics implements MeasurementSink stopped.await(); } - private void reportingLoop(final long logIntervalMillis) { // align report timing to the nearest second @@ -345,6 +350,12 @@ public class StressMetrics implements MeasurementSink public static final String[] HEADMETRICS = new String[]{"type", "total ops","op/s","pk/s","row/s","mean","med",".95",".99",".999","max","time","stderr", "errors", "gc: #", "max ms", "sum ms", "sdv ms", "mb"}; public static final String HEAD = String.format(HEADFORMAT, (Object[]) HEADMETRICS); + @VisibleForTesting + public static Set toJmxNodes(Set nodes) + { + return nodes.stream().map(n -> n.split(":")[0]).collect(Collectors.toSet()); + } + private static void printHeader(String prefix, ResultLogger output) { output.println(prefix + HEAD); diff --git a/tools/stress/test/unit/org/apache/cassandra/stress/settings/StressSettingsTest.java b/tools/stress/test/unit/org/apache/cassandra/stress/settings/StressSettingsTest.java index c664aeed16..98578ef792 100644 --- a/tools/stress/test/unit/org/apache/cassandra/stress/settings/StressSettingsTest.java +++ b/tools/stress/test/unit/org/apache/cassandra/stress/settings/StressSettingsTest.java @@ -20,11 +20,18 @@ package org.apache.cassandra.stress.settings; import java.io.ByteArrayOutputStream; import java.io.ObjectOutputStream; +import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import org.junit.Test; +import org.apache.cassandra.stress.report.StressMetrics; + +import static org.junit.Assert.assertEquals; + public class StressSettingsTest { @Test @@ -36,4 +43,11 @@ public class StressSettingsTest // Will throw if not all settings are Serializable new ObjectOutputStream(new ByteArrayOutputStream()).writeObject(settings); } + + @Test + public void test16473() + { + Set jmxNodes = StressMetrics.toJmxNodes(new HashSet(Arrays.asList("127.0.0.1:9042", "127.0.0.1"))); + assertEquals(0, jmxNodes.stream().filter(n -> n.contains(":")).count()); + } }