This is an automated email from the ASF dual-hosted git repository.
ayushtkn pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/trunk by this push:
new a0f8f7e6dc3 HDFS-17934. RBF: Add router web address to router web UI
(#8540). Contributed by Felix N
a0f8f7e6dc3 is described below
commit a0f8f7e6dc34c8fb6eb70723a36cf7c5721b782d
Author: Felix Nguyen <[email protected]>
AuthorDate: Wed Jul 1 02:43:31 2026 +0000
HDFS-17934. RBF: Add router web address to router web UI (#8540).
Contributed by Felix N
---
.../hdfs/server/federation/metrics/RBFMetrics.java | 37 ++++++++++++++++++++++
.../src/main/webapps/router/federationhealth.html | 8 ++++-
2 files changed, 44 insertions(+), 1 deletion(-)
diff --git
a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/metrics/RBFMetrics.java
b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/metrics/RBFMetrics.java
index 3e111b9d6f2..0b5c05b4f1e 100644
---
a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/metrics/RBFMetrics.java
+++
b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/metrics/RBFMetrics.java
@@ -19,6 +19,7 @@
import static
org.apache.hadoop.hdfs.server.federation.router.async.utils.AsyncUtil.syncReturn;
import static org.apache.hadoop.metrics2.impl.MsInfo.ProcessName;
+import static
org.apache.hadoop.thirdparty.com.google.common.base.Strings.isNullOrEmpty;
import static org.apache.hadoop.util.Time.now;
import java.io.IOException;
@@ -26,6 +27,7 @@
import java.math.BigInteger;
import java.net.InetAddress;
import java.net.InetSocketAddress;
+import java.net.URI;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@@ -53,6 +55,7 @@
import org.apache.commons.math3.stat.descriptive.moment.StandardDeviation;
import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hdfs.DFSUtil;
import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
import org.apache.hadoop.hdfs.protocol.HdfsConstants.DatanodeReportType;
import
org.apache.hadoop.hdfs.server.federation.resolver.ActiveNamenodeResolver;
@@ -90,6 +93,7 @@
import org.apache.hadoop.metrics2.lib.MetricsRegistry;
import org.apache.hadoop.metrics2.util.MBeans;
import org.apache.hadoop.metrics2.util.Metrics2Util;
+import org.apache.hadoop.net.NetUtils;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.util.StringUtils;
import org.apache.hadoop.util.VersionInfo;
@@ -343,6 +347,7 @@ public String getRouters() {
if (routerStore == null) {
return "{}";
}
+ Configuration conf = router.getConfig();
try {
// Get all the routers in order
GetRouterRegistrationsRequest request =
@@ -361,6 +366,7 @@ public String getRouters() {
long dateModified = record.getDateModified();
long lastHeartbeat = getSecondsSince(dateModified);
innerInfo.put("lastHeartbeat", lastHeartbeat);
+ innerInfo.put("routerWebAddress", getRouterWebAddress(conf,
record.getAdminAddress()));
StateStoreVersion stateStoreVersion = record.getStateStoreVersion();
if (stateStoreVersion == null) {
@@ -379,6 +385,37 @@ public String getRouters() {
return JSON.toString(info);
}
+ private static String getRouterWebAddress(Configuration conf, String
adminAddress) {
+ try {
+ if (isNullOrEmpty(adminAddress)) {
+ return "";
+ }
+ String scheme = DFSUtil.getHttpClientScheme(conf);
+ int webPort = getRouterWebAddressPort(conf, scheme);
+ InetSocketAddress adminSocketAddress =
NetUtils.createSocketAddr(adminAddress.trim());
+ return new URI(scheme, null, adminSocketAddress.getHostString(),
webPort, null, null,
+ null).toString();
+ } catch (Exception e) {
+ LOG.error("Cannot get router web address", e);
+ return "";
+ }
+ }
+
+ private static int getRouterWebAddressPort(Configuration conf, String
scheme) {
+ if ("http".equals(scheme)) {
+ return conf.getSocketAddr(
+ RBFConfigKeys.DFS_ROUTER_HTTP_BIND_HOST_KEY,
+ RBFConfigKeys.DFS_ROUTER_HTTP_ADDRESS_KEY,
+ RBFConfigKeys.DFS_ROUTER_HTTP_ADDRESS_DEFAULT,
+ RBFConfigKeys.DFS_ROUTER_HTTP_PORT_DEFAULT).getPort();
+ }
+ return conf.getSocketAddr(
+ RBFConfigKeys.DFS_ROUTER_HTTPS_BIND_HOST_KEY,
+ RBFConfigKeys.DFS_ROUTER_HTTPS_ADDRESS_KEY,
+ RBFConfigKeys.DFS_ROUTER_HTTPS_ADDRESS_DEFAULT,
+ RBFConfigKeys.DFS_ROUTER_HTTPS_PORT_DEFAULT).getPort();
+ }
+
/**
* Populate the map with the State Store versions.
*
diff --git
a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/webapps/router/federationhealth.html
b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/webapps/router/federationhealth.html
index 9367b2e99c1..acdead32ef9 100644
---
a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/webapps/router/federationhealth.html
+++
b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/webapps/router/federationhealth.html
@@ -303,7 +303,13 @@
{#Routers}
<tr>
<td class="federationhealth-router-icon
federationhealth-router-{iconState}" title="{title}"></td>
- <td>{address}</td>
+ <td>
+ {?routerWebAddress}
+ <a href='{routerWebAddress}'>{address}</a>
+ {:else}
+ {address}
+ {/routerWebAddress}
+ </td>
<td>{status}</td>
<td>{lastHeartbeat} sec ago</td>
<td>{lastMembershipUpdate}</td>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]