]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-11020 Log to debug when a request failed because the client reset the connectio...
authorBenoit <43733395+benoit-sns@users.noreply.github.com>
Mon, 15 Oct 2018 13:55:25 +0000 (13:55 +0000)
committerSonarTech <sonartech@sonarsource.com>
Mon, 15 Oct 2018 18:20:56 +0000 (20:20 +0200)
server/sonar-server/src/main/java/org/sonar/server/platform/web/RootFilter.java
server/sonar-server/src/test/java/org/sonar/server/platform/web/RootFilterTest.java

index 0e913f5c9b6fa18f9e0a5843ea6852e2f75e0051..b15e3c19491d5c314f2387f206c50150d071882c 100644 (file)
@@ -46,7 +46,7 @@ import static java.lang.String.format;
  */
 public class RootFilter implements Filter {
 
-  public static final org.sonar.api.utils.log.Logger Logger = Loggers.get("http");
+  private static final org.sonar.api.utils.log.Logger LOGGER = Loggers.get(RootFilter.class);
 
   @Override
   public void init(FilterConfig filterConfig) {
@@ -61,10 +61,13 @@ public class RootFilter implements Filter {
       try {
         chain.doFilter(new ServletRequestWrapper(httpRequest), httpResponse);
       } catch (Throwable e) {
-        Loggers.get(RootFilter.class).error(format("Processing of request %s failed", toUrl(httpRequest)), e);
-        if (!response.isCommitted()) {
-          httpResponse.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+        if (httpResponse.isCommitted()) {
+          // Request has been aborted by the client, nothing can been done as Tomcat has committed the response
+          LOGGER.debug(format("Processing of request %s failed", toUrl(httpRequest)), e);
+          return;
         }
+        LOGGER.error(format("Processing of request %s failed", toUrl(httpRequest)), e);
+        httpResponse.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
       }
     } else {
       // Not an HTTP request, not profiled
index 79d49843a4aefe5d59392ea593378f9420229c98..093f0d21d425eed54895274f238b31105528ad3a 100644 (file)
@@ -19,6 +19,7 @@
  */
 package org.sonar.server.platform.web;
 
+import java.util.List;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
 import javax.servlet.ServletContext;
@@ -31,6 +32,8 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.mockito.ArgumentCaptor;
+import org.sonar.api.utils.log.LogTester;
+import org.sonar.api.utils.log.LoggerLevel;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
@@ -44,6 +47,8 @@ public class RootFilterTest {
 
   @Rule
   public ExpectedException expectedException = ExpectedException.none();
+  @Rule
+  public LogTester logTester = new LogTester();
 
   private FilterChain chain = mock(FilterChain.class);
   private RootFilter underTest;
@@ -76,6 +81,18 @@ public class RootFilterTest {
     verify(response, never()).sendError(500);
   }
 
+  @Test
+  public void throwable_in_doFilter_is_logged_in_debug_if_response_is_already_committed() throws Exception {
+    doThrow(new RuntimeException()).when(chain).doFilter(any(ServletRequest.class), any(ServletResponse.class));
+    HttpServletResponse response = mockHttpResponse(true);
+    underTest.doFilter(request("POST", "/context/service/call", "param=value"), response, chain);
+
+    List<String> debugLogs = logTester.logs(LoggerLevel.DEBUG);
+    assertThat(debugLogs.size()).isEqualTo(1);
+    assertThat(debugLogs.get(0)).contains("Processing of request", "failed");
+  }
+
+
   @Test
   public void request_used_in_chain_do_filter_is_a_servlet_wrapper_when_static_resource() throws Exception {
     underTest.doFilter(request("GET", "/context/static/image.png", null), mock(HttpServletResponse.class), chain);