@@ -89,13 +89,13 @@ public class SearchAction implements MetricsWsAction { | |||
try (DbSession dbSession = dbClient.openSession(false)) { | |||
List<MetricDto> metrics = dbClient.metricDao().selectEnabled(dbSession, isCustom, searchOptions.getOffset(), searchOptions.getLimit()); | |||
int nbMetrics = dbClient.metricDao().countEnabled(dbSession, isCustom); | |||
JsonWriter json = response.newJsonWriter(); | |||
json.beginObject(); | |||
Set<String> desiredFields = desiredFields(request.paramAsStrings(Param.FIELDS)); | |||
writeMetrics(json, metrics, desiredFields); | |||
searchOptions.writeJson(json, nbMetrics); | |||
json.endObject(); | |||
json.close(); | |||
try (JsonWriter json = response.newJsonWriter()) { | |||
json.beginObject(); | |||
Set<String> desiredFields = desiredFields(request.paramAsStrings(Param.FIELDS)); | |||
writeMetrics(json, metrics, desiredFields); | |||
searchOptions.writeJson(json, nbMetrics); | |||
json.endObject(); | |||
} | |||
} | |||
} | |||
@@ -25,6 +25,8 @@ import com.google.common.collect.Lists; | |||
import java.io.IOException; | |||
import java.util.Iterator; | |||
import java.util.List; | |||
import javax.annotation.CheckForNull; | |||
import javax.annotation.Nullable; | |||
import javax.servlet.Filter; | |||
import javax.servlet.FilterChain; | |||
import javax.servlet.FilterConfig; | |||
@@ -41,7 +43,7 @@ import org.sonar.server.platform.PlatformImpl; | |||
*/ | |||
public class MasterServletFilter implements Filter { | |||
public static volatile MasterServletFilter INSTANCE; | |||
private static volatile MasterServletFilter INSTANCE; | |||
private ServletFilter[] filters; | |||
private FilterConfig config; | |||
@@ -59,6 +61,16 @@ public class MasterServletFilter implements Filter { | |||
init(config, PlatformImpl.getInstance().getContainer().getComponentsByType(ServletFilter.class)); | |||
} | |||
@CheckForNull | |||
public static MasterServletFilter getInstance() { | |||
return INSTANCE; | |||
} | |||
@VisibleForTesting | |||
static void setInstance(@Nullable MasterServletFilter instance) { | |||
INSTANCE = instance; | |||
} | |||
void init(FilterConfig config, List<ServletFilter> filters) { | |||
this.config = config; | |||
initFilters(filters); |
@@ -39,11 +39,12 @@ public class RegisterServletFilters implements Startable { | |||
@Override | |||
public void start() { | |||
if (MasterServletFilter.INSTANCE != null) { | |||
MasterServletFilter masterServletFilter = MasterServletFilter.getInstance(); | |||
if (masterServletFilter != null) { | |||
// Probably a database upgrade. MasterSlaveFilter was instantiated by the servlet container | |||
// while picocontainer was not completely up. | |||
// See https://jira.sonarsource.com/browse/SONAR-3612 | |||
MasterServletFilter.INSTANCE.initFilters(Arrays.asList(filters)); | |||
masterServletFilter.initFilters(Arrays.asList(filters)); | |||
} | |||
} | |||
@@ -56,7 +56,7 @@ public class MasterServletFilterTest { | |||
@Before | |||
public void resetSingleton() { | |||
MasterServletFilter.INSTANCE = null; | |||
MasterServletFilter.setInstance(null); | |||
} | |||
@Test |
@@ -19,7 +19,6 @@ | |||
*/ | |||
package org.sonar.server.platform.web; | |||
import javax.servlet.ServletException; | |||
import org.junit.Test; | |||
import org.sonar.api.web.ServletFilter; | |||
@@ -29,24 +28,24 @@ import static org.mockito.Mockito.verify; | |||
public class RegisterServletFiltersTest { | |||
@Test | |||
public void should_not_fail_if_master_filter_is_not_up() throws ServletException { | |||
MasterServletFilter.INSTANCE = null; | |||
public void should_not_fail_if_master_filter_is_not_up() { | |||
MasterServletFilter.setInstance(null); | |||
new RegisterServletFilters(new ServletFilter[2]).start(); | |||
} | |||
@Test | |||
public void should_register_filters_if_master_filter_is_up() throws ServletException { | |||
MasterServletFilter.INSTANCE = mock(MasterServletFilter.class); | |||
public void should_register_filters_if_master_filter_is_up() { | |||
MasterServletFilter.setInstance(mock(MasterServletFilter.class)); | |||
new RegisterServletFilters(new ServletFilter[2]).start(); | |||
verify(MasterServletFilter.INSTANCE).initFilters(anyList()); | |||
verify(MasterServletFilter.getInstance()).initFilters(anyList()); | |||
} | |||
@Test | |||
public void filters_should_be_optional() throws ServletException { | |||
MasterServletFilter.INSTANCE = mock(MasterServletFilter.class); | |||
public void filters_should_be_optional() { | |||
MasterServletFilter.setInstance(mock(MasterServletFilter.class)); | |||
new RegisterServletFilters().start(); | |||
// do not fail | |||
verify(MasterServletFilter.INSTANCE).initFilters(anyList()); | |||
verify(MasterServletFilter.getInstance()).initFilters(anyList()); | |||
} | |||
} |