This is an automated email from the ASF dual-hosted git repository.

yong pushed a commit to branch branch-2.7
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/branch-2.7 by this push:
     new c7be703  Don't add broker-address header if response has already been 
committed (#9744)
c7be703 is described below

commit c7be703121c485fb033dcc5778dab8c72529d24f
Author: Lari Hotari <[email protected]>
AuthorDate: Mon Mar 1 14:20:56 2021 +0200

    Don't add broker-address header if response has already been committed 
(#9744)
    
    ### Motivation
    
    - adding headers will fail if the response has been committed
    - this causes flakiness since the response won't be committed in many cases 
when the response size is less than the response buffer size
    
    ### Modifications
    
    - add the header before executing the filter chain
    - check if the response has been committed before attempting to add the 
header
    
    (cherry picked from commit 2ee487bc43d9413d7cc27528adb9f0d5e31a320d)
---
 .../java/org/apache/pulsar/broker/web/ResponseHandlerFilter.java  | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/ResponseHandlerFilter.java
 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/ResponseHandlerFilter.java
index 9091d05..329c140 100644
--- 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/ResponseHandlerFilter.java
+++ 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/ResponseHandlerFilter.java
@@ -41,6 +41,7 @@ import org.slf4j.LoggerFactory;
  */
 public class ResponseHandlerFilter implements Filter {
     private static final Logger LOG = 
LoggerFactory.getLogger(ResponseHandlerFilter.class);
+    private static final String BROKER_ADDRESS_HEADER_NAME = "broker-address";
 
     private final String brokerAddress;
     private final BrokerInterceptor interceptor;
@@ -56,8 +57,13 @@ public class ResponseHandlerFilter implements Filter {
     public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain)
             throws IOException, ServletException {
 
+        if (!response.isCommitted()) {
+            ((HttpServletResponse) 
response).addHeader(BROKER_ADDRESS_HEADER_NAME, brokerAddress);
+        } else {
+            LOG.warn("Cannot add header {} to request {} since it's already 
committed.", BROKER_ADDRESS_HEADER_NAME,
+                    request);
+        }
         chain.doFilter(request, response);
-        ((HttpServletResponse) response).addHeader("broker-address", 
brokerAddress);
         if (((HttpServletResponse) response).getStatus() == 
Status.INTERNAL_SERVER_ERROR.getStatusCode()) {
             // invalidate current session from servlet-container if it 
received internal-server-error
             try {

Reply via email to