You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by pm...@apache.org on 2017/01/25 22:20:51 UTC
svn commit: r1780278 - in /jmeter/trunk:
src/components/org/apache/jmeter/visualizers/backend/graphite/PickleGraphiteMetricsSender.java
src/components/org/apache/jmeter/visualizers/backend/graphite/TextGraphiteMetricsSender.java
xdocs/changes.xml
Author: pmouawad
Date: Wed Jan 25 22:20:51 2017
New Revision: 1780278
URL: http://svn.apache.org/viewvc?rev=1780278&view=rev
Log:
Bug 60648 GraphiteBackendListener can lose some metrics at end of test if test is very short
Bugzilla Id: 60648
Modified:
jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/graphite/PickleGraphiteMetricsSender.java
jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/graphite/TextGraphiteMetricsSender.java
jmeter/trunk/xdocs/changes.xml
Modified: jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/graphite/PickleGraphiteMetricsSender.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/graphite/PickleGraphiteMetricsSender.java?rev=1780278&r1=1780277&r2=1780278&view=diff
==============================================================================
--- jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/graphite/PickleGraphiteMetricsSender.java (original)
+++ jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/graphite/PickleGraphiteMetricsSender.java Wed Jan 25 22:20:51 2017
@@ -52,6 +52,8 @@ class PickleGraphiteMetricsSender extend
private String prefix;
+ private final Object lock = new Object();
+
// graphite expects a python-pickled list of nested tuples.
private List<MetricTuple> metrics = new LinkedList<>();
@@ -91,18 +93,29 @@ class PickleGraphiteMetricsSender extend
.append(contextName)
.append(".")
.append(metricName);
- metrics.add(new MetricTuple(sb.toString(), timestamp, metricValue));
+ synchronized (lock) {
+ metrics.add(new MetricTuple(sb.toString(), timestamp, metricValue));
+ }
}
/* (non-Javadoc)
* @see org.apache.jmeter.visualizers.backend.graphite.GraphiteMetricsSender#writeAndSendMetrics()
*/
@Override
- public void writeAndSendMetrics() {
- if (metrics.size()>0) {
+ public void writeAndSendMetrics() {
+ List<MetricTuple> tempMetrics = null;
+ synchronized (lock) {
+ if(metrics.isEmpty()) {
+ return;
+ }
+ tempMetrics = metrics;
+ metrics = new LinkedList<>();
+ }
+ final List<MetricTuple> copyMetrics = tempMetrics;
+ if (!copyMetrics.isEmpty()) {
SocketOutputStream out = null;
try {
- String payload = convertMetricsToPickleFormat(metrics);
+ String payload = convertMetricsToPickleFormat(copyMetrics);
int length = payload.length();
byte[] header = ByteBuffer.allocate(4).putInt(length).array();
@@ -128,9 +141,9 @@ class PickleGraphiteMetricsSender extend
// if there was an error, we might miss some data. for now, drop those on the floor and
// try to keep going.
if(LOG.isDebugEnabled()) {
- LOG.debug("Wrote "+ metrics.size() +" metrics");
+ LOG.debug("Wrote "+ copyMetrics.size() +" metrics");
}
- metrics.clear();
+ copyMetrics.clear();
}
}
Modified: jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/graphite/TextGraphiteMetricsSender.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/graphite/TextGraphiteMetricsSender.java?rev=1780278&r1=1780277&r2=1780278&view=diff
==============================================================================
--- jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/graphite/TextGraphiteMetricsSender.java (original)
+++ jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/graphite/TextGraphiteMetricsSender.java Wed Jan 25 22:20:51 2017
@@ -36,6 +36,8 @@ class TextGraphiteMetricsSender extends
private String prefix;
+ private final Object lock = new Object();
+
private List<MetricTuple> metrics = new ArrayList<>();
private GenericKeyedObjectPool<SocketConnectionInfos, SocketOutputStream> socketOutputStreamPool;
@@ -74,28 +76,39 @@ class TextGraphiteMetricsSender extends
.append(contextName)
.append(".")
.append(metricName);
- metrics.add(new MetricTuple(sb.toString(), timestamp, metricValue));
+ synchronized (lock) {
+ metrics.add(new MetricTuple(sb.toString(), timestamp, metricValue));
+ }
}
/* (non-Javadoc)
* @see org.apache.jmeter.visualizers.backend.graphite.GraphiteMetricsSender#writeAndSendMetrics()
*/
@Override
- public void writeAndSendMetrics() {
- if (metrics.size()>0) {
+ public void writeAndSendMetrics() {
+ List<MetricTuple> tempMetrics = null;
+ synchronized (lock) {
+ if(metrics.isEmpty()) {
+ return;
+ }
+ tempMetrics = metrics;
+ metrics = new ArrayList<>(tempMetrics.size());
+ }
+ final List<MetricTuple> copyMetrics = tempMetrics;
+ if (!copyMetrics.isEmpty()) {
SocketOutputStream out = null;
try {
out = socketOutputStreamPool.borrowObject(socketConnectionInfos);
// pw is not closed as it would close the underlying pooled out
PrintWriter pw = new PrintWriter(new OutputStreamWriter(out, CHARSET_NAME), false);
- for (MetricTuple metric: metrics) {
+ for (MetricTuple metric: copyMetrics) {
pw.printf("%s %s %d%n", metric.name, metric.value, Long.valueOf(metric.timestamp));
}
pw.flush();
// if there was an error, we might miss some data. for now, drop those on the floor and
// try to keep going.
if(LOG.isDebugEnabled()) {
- LOG.debug("Wrote "+ metrics.size() +" metrics");
+ LOG.debug("Wrote "+ copyMetrics.size() +" metrics");
}
socketOutputStreamPool.returnObject(socketConnectionInfos, out);
} catch (Exception e) {
@@ -110,7 +123,7 @@ class TextGraphiteMetricsSender extends
LOG.error("Error writing to Graphite:"+e.getMessage());
}
// We drop metrics in all cases
- metrics.clear();
+ copyMetrics.clear();
}
}
Modified: jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1780278&r1=1780277&r2=1780278&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml [utf-8] (original)
+++ jmeter/trunk/xdocs/changes.xml [utf-8] Wed Jan 25 22:20:51 2017
@@ -128,6 +128,7 @@ JMeter now requires Java 8. Ensure you u
<li><bug>52962</bug>Allow sorting by columns for View Results in Table, Summary Report, Aggregate Report and Aggregate Graph. Based on a <pr>245</pr> by Logan Mauzaize (logan.mauzaize at gmail.com) and Maxime Chassagneux (maxime.chassagneux at gmail.com).</li>
<li><bug>60590</bug>BackendListener : Add Influxdb BackendListenerClient implementation to JMeter. Partly based on <pr>246</pr> by Logan Mauzaize (logan.mauzaize at gmail.com) and Maxime Chassagneux (maxime.chassagneux at gmail.com).</li>
<li><bug>60591</bug>BackendListener : Add a time boxed sampling. Based on a <pr>237</pr> by Logan Mauzaize (logan.mauzaize at gmail.com) and Maxime Chassagneux (maxime.chassagneux at gmail.com).</li>
+ <li><bug>60648</bug>GraphiteBackendListener can lose some metrics at end of test if test is very short</li>
</ul>
<h3>Timers, Assertions, Config, Pre- & Post-Processors</h3>