This is an automated email from the ASF dual-hosted git repository. rickyma pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-uniffle.git
The following commit(s) were added to refs/heads/master by this push: new b23718c89 [MINOR] fix(dashboard): Fix NPE when targetAddress is null for /api/server/nodes (#1852) b23718c89 is described below commit b23718c89331a44da781ad7c97573903635bd60c Author: maobaolong <307499...@qq.com> AuthorDate: Wed Jul 10 17:05:06 2024 +0800 [MINOR] fix(dashboard): Fix NPE when targetAddress is null for /api/server/nodes (#1852) ### What changes were proposed in this pull request? I use rest api without given `targetAddress`, the NPE encountered. ```Console ➜ ~ curl 'http://localhost:19988/api/server/nodes?status=active' <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/> <title>Error 500 </title> </head> <body> <h2>HTTP ERROR: 500</h2> <p>Problem accessing /api/server/nodes. Reason: <pre> java.lang.NullPointerException</pre></p> <hr /><a href="http://eclipse.org/jetty">Powered by Jetty:// 9.3.24.v20180605</a><hr/> </body> </html> ``` ### Why are the changes needed? Fix the NPE. ### Does this PR introduce _any_ user-facing change? No. ### How was this patch tested? ```Console curl 'http://localhost:19988/api/server/nodes?status=active' ``` --- .../java/org/apache/uniffle/dashboard/web/JettyServerFront.java | 2 ++ .../org/apache/uniffle/dashboard/web/proxy/WebProxyServlet.java | 7 +++++++ .../org/apache/uniffle/dashboard/web/utils/DashboardUtils.java | 2 ++ 3 files changed, 11 insertions(+) diff --git a/dashboard/src/main/java/org/apache/uniffle/dashboard/web/JettyServerFront.java b/dashboard/src/main/java/org/apache/uniffle/dashboard/web/JettyServerFront.java index bef348cce..b7d169afe 100644 --- a/dashboard/src/main/java/org/apache/uniffle/dashboard/web/JettyServerFront.java +++ b/dashboard/src/main/java/org/apache/uniffle/dashboard/web/JettyServerFront.java @@ -23,6 +23,7 @@ import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import com.google.common.base.Preconditions; import org.apache.hbase.thirdparty.org.glassfish.jersey.server.ServerProperties; import org.apache.hbase.thirdparty.org.glassfish.jersey.servlet.ServletContainer; import org.eclipse.jetty.server.Handler; @@ -92,6 +93,7 @@ public class JettyServerFront { HandlerList handlers = new HandlerList(); ResourceHandler resourceHandler = addResourceHandler(); String coordinatorWebAddress = conf.getString(DashboardConf.COORDINATOR_WEB_ADDRESS); + Preconditions.checkNotNull(coordinatorWebAddress, "Coordinator web address is null"); Map<String, String> stringStringMap = DashboardUtils.convertAddressesStrToMap(coordinatorWebAddress); diff --git a/dashboard/src/main/java/org/apache/uniffle/dashboard/web/proxy/WebProxyServlet.java b/dashboard/src/main/java/org/apache/uniffle/dashboard/web/proxy/WebProxyServlet.java index 0bb980c91..fe3f8109f 100644 --- a/dashboard/src/main/java/org/apache/uniffle/dashboard/web/proxy/WebProxyServlet.java +++ b/dashboard/src/main/java/org/apache/uniffle/dashboard/web/proxy/WebProxyServlet.java @@ -21,6 +21,7 @@ import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import com.google.common.base.Preconditions; import org.eclipse.jetty.client.api.Request; import org.eclipse.jetty.client.api.Response; import org.eclipse.jetty.proxy.ProxyServlet; @@ -34,6 +35,8 @@ public class WebProxyServlet extends ProxyServlet { private Map<String, String> coordinatorServerAddressesMap; public WebProxyServlet(Map<String, String> coordinatorServerAddressesMap) { + Preconditions.checkArgument( + coordinatorServerAddressesMap.isEmpty(), "No coordinator server address found."); this.coordinatorServerAddressesMap = coordinatorServerAddressesMap; } @@ -44,6 +47,10 @@ public class WebProxyServlet extends ProxyServlet { } String targetAddress = coordinatorServerAddressesMap.get(clientRequest.getHeader("targetAddress")); + if (targetAddress == null) { + // Get random one from coordinatorServerAddressesMap + targetAddress = coordinatorServerAddressesMap.values().iterator().next(); + } StringBuilder target = new StringBuilder(); if (targetAddress.endsWith("/")) { targetAddress = targetAddress.substring(0, targetAddress.length() - 1); diff --git a/dashboard/src/main/java/org/apache/uniffle/dashboard/web/utils/DashboardUtils.java b/dashboard/src/main/java/org/apache/uniffle/dashboard/web/utils/DashboardUtils.java index 69ddc88da..1b60a6b27 100644 --- a/dashboard/src/main/java/org/apache/uniffle/dashboard/web/utils/DashboardUtils.java +++ b/dashboard/src/main/java/org/apache/uniffle/dashboard/web/utils/DashboardUtils.java @@ -22,6 +22,7 @@ import java.net.URL; import java.util.HashMap; import java.util.Map; +import com.google.common.base.Preconditions; import com.google.common.collect.Maps; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,6 +31,7 @@ public class DashboardUtils { private static final Logger LOG = LoggerFactory.getLogger(DashboardUtils.class); public static Map<String, String> convertAddressesStrToMap(String coordinatorAddressesStr) { + Preconditions.checkNotNull(coordinatorAddressesStr, "Coordinator web address is null"); HashMap<String, String> coordinatorAddressMap = Maps.newHashMap(); String[] coordinators = coordinatorAddressesStr.split(","); for (String coordinator : coordinators) {