On 11 May 2016 at 22:09,  <[email protected]> wrote:
> Author: pmouawad
> Date: Wed May 11 21:09:00 2016
> New Revision: 1743429
>
> URL: http://svn.apache.org/viewvc?rev=1743429&view=rev
> Log:
> Bug 59489 - Regression in JMeter 3.0 : Compressed responses break keepalive 
> management
> Bugzilla Id: 59489
>
> 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=1743429&r1=1743428&r2=1743429&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
>  Wed May 11 21:09:00 2016
> @@ -186,10 +186,6 @@ public class HTTPHC4Impl extends HTTPHCA
>          }
>      };
>
> -    /**
> -     * Attribute name used to store headers in {@link BasicHttpContext}
> -     */
> -    private static final String JMETER_RESPONSE_BACKUP_HEADERS = 
> "__jmeter.RESPONSE_BACKUP_HEADERS";
>
>      /**
>       * Headers to save
> @@ -209,8 +205,8 @@ public class HTTPHC4Impl extends HTTPHCA
>          @Override
>          public void process(HttpResponse response, HttpContext context)
>                  throws HttpException, IOException {
> +            ArrayList<Header[]> headersToSave = new ArrayList<>(3);
>
> -            context.removeAttribute(JMETER_RESPONSE_BACKUP_HEADERS);
>              final HttpEntity entity = response.getEntity();
>              final HttpClientContext clientContext = 
> HttpClientContext.adapt(context);
>              final RequestConfig requestConfig = 
> clientContext.getRequestConfig();
> @@ -218,17 +214,21 @@ public class HTTPHC4Impl extends HTTPHCA
>              if (requestConfig.isContentCompressionEnabled() && entity != 
> null && entity.getContentLength() != 0) {
>                  final Header ceheader = entity.getContentEncoding();
>                  if (ceheader != null) {
> -                    ArrayList<Header[]> headersToSave = new ArrayList<>(3);
>                      for(String name : HEADERS_TO_SAVE) {
>                          Header[] hdr = response.getHeaders(name); // empty 
> if none
>                          headersToSave.add(hdr);
>                      }
> -                   context.setAttribute(JMETER_RESPONSE_BACKUP_HEADERS, 
> headersToSave);
>                  }
>              }
>
>              // Now invoke original parent code
>              super.process(response, clientContext);
> +            // Should this be in a finally ?
> +            for (Header[] headers : headersToSave) {
> +                for (Header headerToRestore : headers) {
> +                    response.addHeader(headerToRestore);

That can result in header duplication. See below.

> +                }
> +            }
>          }
>      };
>
> @@ -953,18 +953,6 @@ public class HTTPHC4Impl extends HTTPHCA
>          for (Header responseHeader : rh) {
>              writeResponseHeader(headerBuf, responseHeader);
>          }
> -        List<Header[]> backupHeaders = (List<Header[]>) 
> localContext.getAttribute(JMETER_RESPONSE_BACKUP_HEADERS);
> -        if(backupHeaders != null) {
> -            for (Header[] headers : backupHeaders) {
> -                for (Header responseHeader: headers) {
> -                    if (response.containsHeader(responseHeader.getName())) {
> -                        break; // it was not deleted, so don't store it again

Note that the original fix checks whether or not to restore the header.

> -                    }
> -                    writeResponseHeader(headerBuf, responseHeader);
> -                }
> -            }
> -        }
> -
>          return headerBuf.toString();
>      }
>
>
>

Reply via email to