Author: pmouawad Date: Sun Sep 2 13:24:52 2018 New Revision: 1839882 URL: http://svn.apache.org/viewvc?rev=1839882&view=rev Log: Bug 62321 - Computing of response size is incorrect in nightly build Bugzilla Id: 62321
Modified: jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java Modified: jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java?rev=1839882&r1=1839881&r2=1839882&view=diff ============================================================================== --- jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java (original) +++ jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java Sun Sep 2 13:24:52 2018 @@ -182,10 +182,8 @@ public class HTTPHC4Impl extends HTTPHCA private static final String CONTEXT_ATTRIBUTE_CLIENT_KEY = "__jmeter.C_K__"; private static final String CONTEXT_ATTRIBUTE_SENT_BYTES = "__jmeter.S_B__"; - - private static final String CONTEXT_ATTRIBUTE_RECEIVED_BYTES = "__jmeter.R_B__"; - - private static final int MAX_BODY_RETAIN_SIZE = JMeterUtils.getPropDefault("httpclient4.max_body_retain_size", 32 * 1024); + + private static final String CONTEXT_ATTRIBUTE_METRICS = "__jmeter.M__"; private static final boolean DEFLATE_RELAX_MODE = JMeterUtils.getPropDefault("httpclient4.deflate_relax_mode", false); @@ -378,6 +376,7 @@ public class HTTPHC4Impl extends HTTPHCA private static final HttpRequestInterceptor PREEMPTIVE_AUTH_INTERCEPTOR = new PreemptiveAuthRequestInterceptor(); + // see https://stackoverflow.com/questions/26166469/measure-bandwidth-usage-with-apache-httpcomponents-httpclient private static final HttpRequestExecutor REQUEST_EXECUTOR = new HttpRequestExecutor() { @@ -389,26 +388,13 @@ public class HTTPHC4Impl extends HTTPHCA HttpResponse response = super.doSendRequest(request, conn, context); HttpConnectionMetrics metrics = conn.getMetrics(); long sentBytesCount = metrics.getSentBytesCount(); + // We save to store sent bytes as we need to reset metrics for received bytes context.setAttribute(CONTEXT_ATTRIBUTE_SENT_BYTES, metrics.getSentBytesCount()); + context.setAttribute(CONTEXT_ATTRIBUTE_METRICS, metrics); log.debug("Sent {} bytes", sentBytesCount); metrics.reset(); return response; } - - @Override - protected HttpResponse doReceiveResponse( - final HttpRequest request, - final HttpClientConnection conn, - final HttpContext context) throws HttpException, IOException { - HttpResponse response = super.doReceiveResponse(request, conn, context); - HttpConnectionMetrics metrics = conn.getMetrics(); - long receivedBytesCount = metrics.getReceivedBytesCount(); - context.setAttribute(CONTEXT_ATTRIBUTE_RECEIVED_BYTES, - metrics.getReceivedBytesCount()); - log.debug("Received {} bytes", receivedBytesCount); - metrics.reset(); - return response; - } }; /** @@ -628,7 +614,8 @@ public class HTTPHC4Impl extends HTTPHCA + (long) httpResponse.getAllHeaders().length // Add \r for each header + 1L // Add \r for initial header + 2L; // final \r\n before data - long totalBytes = (Long) localContext.getAttribute(CONTEXT_ATTRIBUTE_RECEIVED_BYTES); + HttpConnectionMetrics metrics = (HttpConnectionMetrics) localContext.getAttribute(CONTEXT_ATTRIBUTE_METRICS); + long totalBytes = metrics.getReceivedBytesCount(); res.setHeadersSize((int)headerBytes); res.setBodySize(totalBytes - headerBytes); res.setSentBytes((Long) localContext.getAttribute(CONTEXT_ATTRIBUTE_SENT_BYTES));