This is an automated email from the ASF dual-hosted git repository.
hapylestat pushed a commit to branch branch-2.7
in repository https://gitbox.apache.org/repos/asf/ambari.git
The following commit(s) were added to refs/heads/branch-2.7 by this push:
new 5ea6ec2 AMBARI-25353 Seeing an error stack when running an API call
against Ambari server (santal via dgrinenko) (#3208)
5ea6ec2 is described below
commit 5ea6ec295d040a4b7db19e3f889b073329dcb3fa
Author: Szilárd Antal <[email protected]>
AuthorDate: Mon Aug 10 05:25:54 2020 +0200
AMBARI-25353 Seeing an error stack when running an API call against Ambari
server (santal via dgrinenko) (#3208)
---
.../ambari/server/configuration/Configuration.java | 16 +++++++++++++
.../server/controller/AmbariHandlerList.java | 8 +++++++
.../server/configuration/ConfigurationTest.java | 27 ++++++++++++++++++++++
.../server/controller/AmbariHandlerListTest.java | 19 ++++++++++++---
4 files changed, 67 insertions(+), 3 deletions(-)
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
index 7c76180..1949dc3 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
@@ -2644,6 +2644,13 @@ public class Configuration {
public static final ConfigurationProperty<Integer>
KERBEROS_SERVER_ACTION_THREADPOOL_SIZE = new ConfigurationProperty<>(
"server.kerberos.action.threadpool.size", 1);
+ /**
+ * A flag to determine whether error stacks appear on the error page
+ */
+ @Markdown(description = "Show or hide the error stacks on the error page")
+ public static final ConfigurationProperty<String> SERVER_SHOW_ERROR_STACKS =
new ConfigurationProperty<>(
+ "server.show.error.stacks", "false");
+
private static final Logger LOG = LoggerFactory.getLogger(
Configuration.class);
@@ -6152,4 +6159,13 @@ public class Configuration {
public int getAlertServiceCorePoolSize() {
return Integer.parseInt(getProperty(SERVER_SIDE_ALERTS_CORE_POOL_SIZE));
}
+
+ /**
+ * Determines whether error stacks appear on the error page
+ *
+ * @return true if error stacks appear on the error page (defaults to {@code
false})
+ */
+ public boolean isServerShowErrorStacks() {
+ return Boolean.parseBoolean(getProperty(SERVER_SHOW_ERROR_STACKS));
+ }
}
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariHandlerList.java
b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariHandlerList.java
index e3ebc77..663592e 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariHandlerList.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariHandlerList.java
@@ -33,6 +33,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.ambari.server.api.AmbariPersistFilter;
+import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.orm.entities.ViewEntity;
import org.apache.ambari.server.orm.entities.ViewInstanceEntity;
import org.apache.ambari.server.security.AmbariViewsSecurityHeaderFilter;
@@ -104,6 +105,9 @@ public class AmbariHandlerList extends HandlerCollection
implements ViewInstance
@Inject
SessionHandlerConfigurer sessionHandlerConfigurer;
+ @Inject
+ Configuration configuration;
+
/**
* Mapping of view instance entities to handlers.
*/
@@ -251,6 +255,10 @@ public class AmbariHandlerList extends HandlerCollection
implements ViewInstance
webAppContext.addFilter(new FilterHolder(springSecurityFilter), "/*",
AmbariServer.DISPATCHER_TYPES);
webAppContext.setAllowNullPathInfo(true);
+ if (webAppContext.getErrorHandler() != null) {
+
webAppContext.getErrorHandler().setShowStacks(configuration.isServerShowErrorStacks());
+ }
+
return webAppContext;
}
diff --git
a/ambari-server/src/test/java/org/apache/ambari/server/configuration/ConfigurationTest.java
b/ambari-server/src/test/java/org/apache/ambari/server/configuration/ConfigurationTest.java
index 315a02b..123e441 100644
---
a/ambari-server/src/test/java/org/apache/ambari/server/configuration/ConfigurationTest.java
+++
b/ambari-server/src/test/java/org/apache/ambari/server/configuration/ConfigurationTest.java
@@ -967,4 +967,31 @@ public class ConfigurationTest {
// This is expected
}
}
+
+ @Test
+ public void testServerShowErrorStacksEnabled() throws Exception {
+ // given
+ final Properties ambariProperties = new Properties();
+
ambariProperties.setProperty(Configuration.SERVER_SHOW_ERROR_STACKS.getKey(),
"true");
+ final Configuration configuration = new Configuration(ambariProperties);
+
+ // when
+ boolean result = configuration.isServerShowErrorStacks();
+
+ // then
+ Assert.assertTrue(result);
+ }
+
+ @Test
+ public void testServerShowErrorStacksDefault() throws Exception {
+ // given
+ final Properties ambariProperties = new Properties();
+ final Configuration configuration = new Configuration(ambariProperties);
+
+ // when
+ boolean result = configuration.isServerShowErrorStacks();
+
+ // then
+ Assert.assertEquals(result,
Boolean.parseBoolean(Configuration.SERVER_SHOW_ERROR_STACKS.getDefaultValue()));
+ }
}
diff --git
a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariHandlerListTest.java
b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariHandlerListTest.java
index effdf9d..37e7bb4 100644
---
a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariHandlerListTest.java
+++
b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariHandlerListTest.java
@@ -33,6 +33,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.ambari.server.api.AmbariPersistFilter;
+import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.orm.entities.ViewEntity;
import org.apache.ambari.server.orm.entities.ViewInstanceEntity;
import org.apache.ambari.server.orm.entities.ViewInstanceEntityTest;
@@ -44,6 +45,7 @@ import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.SessionIdManager;
+import org.eclipse.jetty.server.handler.ErrorHandler;
import org.eclipse.jetty.server.session.SessionCache;
import org.eclipse.jetty.server.session.SessionHandler;
import org.eclipse.jetty.servlet.FilterHolder;
@@ -64,7 +66,7 @@ public class AmbariHandlerListTest {
private final SessionIdManager sessionIdManager =
createNiceMock(SessionIdManager.class);
private final SessionHandlerConfigurer sessionHandlerConfigurer =
createNiceMock(SessionHandlerConfigurer.class);
private final SessionCache sessionCache = createNiceMock(SessionCache.class);
-
+ private final Configuration configuration =
createNiceMock(Configuration.class);
@Test
public void testAddViewInstance() throws Exception {
@@ -90,7 +92,16 @@ public class AmbariHandlerListTest {
handler.addFilter(capture(securityFilterCapture), eq("/*"),
eq(AmbariServer.DISPATCHER_TYPES));
handler.setAllowNullPathInfo(true);
- replay(handler, server, sessionHandler);
+ final boolean showErrorStacks = true;
+ expect(configuration.isServerShowErrorStacks()).andReturn(showErrorStacks);
+
+ ErrorHandler errorHandler = createNiceMock(ErrorHandler.class);
+ Capture<Boolean> showStackCapture = EasyMock.newCapture();
+ errorHandler.setShowStacks(EasyMock.captureBoolean(showStackCapture));
+
+ expect(handler.getErrorHandler()).andReturn(errorHandler).times(2);
+
+ replay(handler, server, sessionHandler, configuration, errorHandler);
AmbariHandlerList handlerList = getAmbariHandlerList(handler);
@@ -103,8 +114,9 @@ public class AmbariHandlerListTest {
Assert.assertEquals(ambariViewsSecurityHeaderFilter,
securityHeaderFilterCapture.getValue().getFilter());
Assert.assertEquals(persistFilter,
persistFilterCapture.getValue().getFilter());
Assert.assertEquals(springSecurityFilter,
securityFilterCapture.getValue().getFilter());
+ Assert.assertEquals(showErrorStacks, showStackCapture.getValue());
- verify(handler, server, sessionHandler);
+ verify(handler, server, sessionHandler, configuration, errorHandler);
}
@Test
@@ -185,6 +197,7 @@ public class AmbariHandlerListTest {
handlerList.springSecurityFilter = springSecurityFilter;
handlerList.sessionHandler = sessionHandler;
handlerList.sessionHandlerConfigurer = sessionHandlerConfigurer;
+ handlerList.configuration = configuration;
return handlerList;
}