1- From 69c540f561f740596340b73ed1a77d5b115e1bee Mon Sep 17 00:00:00 2001
1+ From 6f9e3cae1bd74e7feeca428d34f078c5542dfc2c Mon Sep 17 00:00:00 2001
22From: Andrew Kenworthy <
[email protected] >
33Date: Wed, 16 Apr 2025 16:43:33 +0200
44Subject: extend servername with external host and port
@@ -14,11 +14,11 @@ Subject: extend servername with external host and port
1414 .../apache/hadoop/hbase/master/HMaster.java | 7 ++++
1515 .../hadoop/hbase/master/ServerManager.java | 4 ++-
1616 .../hbase/regionserver/HRegionServer.java | 16 ++++++++-
17- .../resources/hbase-webapps/master/hbck.jsp | 2 + -
18- .../hbase-webapps/master/rsgroup.jsp | 10 +++---
19- .../resources/hbase-webapps/master/table.jsp | 22 ++++++------
17+ .../resources/hbase-webapps/master/hbck.jsp | 4 +- -
18+ .../hbase-webapps/master/rsgroup.jsp | 15 +++-- ---
19+ .../resources/hbase-webapps/master/table.jsp | 30 ++++++++-- ------
2020 .../hbase/zookeeper/MasterAddressTracker.java | 3 ++
21- 14 files changed, 102 insertions(+), 23 deletions(-)
21+ 14 files changed, 107 insertions(+), 33 deletions(-)
2222
2323diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java
2424index 0fe181b503..be121ea641 100644
@@ -279,41 +279,53 @@ index 27bcef2f06..8438378059 100644
279279 } catch (ServiceException se) {
280280 IOException ioe = ProtobufUtil.getRemoteException(se);
281281diff --git a/hbase-server/src/main/resources/hbase-webapps/master/hbck.jsp b/hbase-server/src/main/resources/hbase-webapps/master/hbck.jsp
282- index 38e16ca8e2..3bd14bf524 100644
282+ index 38e16ca8e2..c30fd7753e 100644
283283--- a/hbase-server/src/main/resources/hbase-webapps/master/hbck.jsp
284284+++ b/hbase-server/src/main/resources/hbase-webapps/master/hbck.jsp
285- @@ -366,7 +366,7 @@ private static String formatServerName(HMaster master,
285+ @@ -364,9 +364,9 @@ private static String formatServerName(HMaster master,
286+ }
287+ String sn = serverName.toString();
286288 if (serverManager.isServerOnline(serverName)) {
287- int infoPort = master.getRegionServerInfoPort(serverName);
289+ - int infoPort = master.getRegionServerInfoPort(serverName);
290+ + int infoPort = serverName.getExternalPort();
288291 if (infoPort > 0) {
289292- return "<a href=" + "//" + serverName.getHostname() + ":" +
290293+ return "<a href=" + "//" + serverName.getExternalHostname() + ":" +
291294 infoPort + "/rs-status>" + sn + "</a>";
292295 } else {
293296 return "<b>" + sn + "</b>";
294297diff --git a/hbase-server/src/main/resources/hbase-webapps/master/rsgroup.jsp b/hbase-server/src/main/resources/hbase-webapps/master/rsgroup.jsp
295- index 6ba6f78a27..5dad8e07a2 100644
298+ index 6ba6f78a27..f3275b9165 100644
296299--- a/hbase-server/src/main/resources/hbase-webapps/master/rsgroup.jsp
297300+++ b/hbase-server/src/main/resources/hbase-webapps/master/rsgroup.jsp
298- @@ -171,7 +171,7 @@
301+ @@ -170,8 +170,7 @@
302+ lastContact = (System.currentTimeMillis() - sl.getReportTimestamp())/1000;
299303 }
300304 long startcode = serverName.getStartcode();
301- int infoPort = master.getRegionServerInfoPort(serverName);
305+ - int infoPort = master.getRegionServerInfoPort(serverName);
302306- String url = "//" + serverName.getHostname() + ":" + infoPort + "/rs-status";%>
303307+ String url = "//" + serverName.getExternalHostname() + ":" + serverName.getExternalPort() + "/rs-status";%>
304308 <tr>
305309 <td><a href="<%= url %>"><%= serverName.getServerName() %></a></td>
306310 <td><%= new Date(startcode) %></td>
307- @@ -226,7 +226,7 @@
311+ @@ -225,8 +224,7 @@
312+ double memStoreSizeMB = sl.getRegionMetrics().values()
308313 .stream().mapToDouble(rm -> rm.getMemStoreSize().get(Size.Unit.MEGABYTE))
309314 .sum();
310- int infoPort = master.getRegionServerInfoPort(serverName);
315+ - int infoPort = master.getRegionServerInfoPort(serverName);
311316- String url = "//" + serverName.getHostname() + ":" + infoPort + "/rs-status";
312317+ String url = "//" + serverName.getExternalHostname() + ":" + serverName.getExternalPort() + "/rs-status";
313318
314319 if (memStoreSizeMB > 0) {
315320 memStoreSizeMBStr = TraditionalBinaryPrefix.long2String(
316- @@ -277,7 +277,7 @@
321+ @@ -270,14 +268,13 @@
322+ ServerName serverName = serverMaping.get(server);
323+ ServerMetrics sl = onlineServers.get(server);
324+ if (sl != null && serverName != null) {
325+ - int infoPort = master.getRegionServerInfoPort(serverName);
326+ long readRequestCount = 0;
327+ long writeRequestCount = 0;
328+ for (RegionMetrics rm : sl.getRegionMetrics().values()) {
317329 readRequestCount += rm.getReadRequestCount();
318330 writeRequestCount += rm.getWriteRequestCount();
319331 }
@@ -322,28 +334,41 @@ index 6ba6f78a27..5dad8e07a2 100644
322334 %>
323335 <tr>
324336 <td><a href="<%= url %>"><%= serverName.getServerName() %></a></td>
325- @@ -331,7 +331,7 @@
337+ @@ -330,8 +327,7 @@
338+ totalStaticIndexSizeKB += rm.getStoreFileUncompressedDataIndexSize().get(Size.Unit.KILOBYTE);
326339 totalStaticBloomSizeKB += rm.getBloomFilterSize().get(Size.Unit.KILOBYTE);
327340 }
328- int infoPort = master.getRegionServerInfoPort(serverName);
341+ - int infoPort = master.getRegionServerInfoPort(serverName);
329342- String url = "//" + serverName.getHostname() + ":" + infoPort + "/rs-status";
330343+ String url = "//" + serverName.getExternalHostname() + ":" + serverName.getExternalPort() + "/rs-status";
331344 if (storeUncompressedSizeMB > 0) {
332345 storeUncompressedSizeMBStr = TraditionalBinaryPrefix.long2String(
333346 (long) storeUncompressedSizeMB * TraditionalBinaryPrefix.MEGA.value, "B", 1);
334- @@ -397,7 +397,7 @@
347+ @@ -396,8 +392,7 @@
348+ percentDone = String.format("%.2f", 100 *
335349 ((float) currentCompactedCells / totalCompactingCells)) + "%";
336350 }
337- int infoPort = master.getRegionServerInfoPort(serverName);
351+ - int infoPort = master.getRegionServerInfoPort(serverName);
338352- String url = "//" + serverName.getHostname() + ":" + infoPort + "/rs-status";
339353+ String url = "//" + serverName.getExternalHostname() + ":" + serverName.getExternalPort() + "/rs-status";
340354 %>
341355 <tr>
342356 <td><a href="<%= url %>"><%= serverName.getServerName() %></a></td>
343357diff --git a/hbase-server/src/main/resources/hbase-webapps/master/table.jsp b/hbase-server/src/main/resources/hbase-webapps/master/table.jsp
344- index 56a0c8096d..2da74e9709 100644
358+ index 56a0c8096d..49c8a69c60 100644
345359--- a/hbase-server/src/main/resources/hbase-webapps/master/table.jsp
346360+++ b/hbase-server/src/main/resources/hbase-webapps/master/table.jsp
361+ @@ -93,8 +93,8 @@
362+ * its region server.
363+ * @return an anchor tag if one can be built, {@code null} otherwise.
364+ */
365+ - private static String buildRegionServerLink(final ServerName serverName, final int rsInfoPort,
366+ - final RegionInfo regionInfo, final RegionState.State regionState) {
367+ + private static String buildRegionServerLink(final ServerName serverName,
368+ + final RegionInfo regionInfo, final RegionState.State regionState) {
369+ if (serverName == null || regionInfo == null) { return null; }
370+
371+ if (regionState != RegionState.State.OPEN) {
347372@@ -102,7 +102,7 @@
348373 return serverName.getServerName();
349374 }
@@ -358,7 +383,7 @@ index 56a0c8096d..2da74e9709 100644
358383 ServerMetrics sl = master.getServerManager().getLoad(metaLocation);
359384 // The host name portion should be safe, but I don't know how we handle IDNs so err on the side of failing safely.
360385- hostAndPort = URLEncoder.encode(metaLocation.getHostname()) + ":" + master.getRegionServerInfoPort(metaLocation);
361- + hostAndPort = URLEncoder.encode(metaLocation.getExternalHostname()) + ":" + master.getRegionServerInfoPort(metaLocation );
386+ + hostAndPort = URLEncoder.encode(metaLocation.getExternalHostname()) + ":" + metaLocation.getExternalPort().toString( );
362387 if (sl != null) {
363388 Map<byte[], RegionMetrics> map = sl.getRegionMetrics();
364389 if (map.containsKey(meta.getRegionName())) {
@@ -367,7 +392,7 @@ index 56a0c8096d..2da74e9709 100644
367392 if (metaLocation != null) {
368393 ServerMetrics sl = master.getServerManager().getLoad(metaLocation);
369394- hostAndPort = URLEncoder.encode(metaLocation.getHostname()) + ":" + master.getRegionServerInfoPort(metaLocation);
370- + hostAndPort = URLEncoder.encode(metaLocation.getExternalHostname()) + ":" + master.getRegionServerInfoPort(metaLocation );
395+ + hostAndPort = URLEncoder.encode(metaLocation.getExternalHostname()) + ":" + metaLocation.getExternalPort().toString( );
371396 if (sl != null) {
372397 Map<byte[], RegionMetrics> map = sl.getRegionMetrics();
373398 if (map.containsKey(meta.getRegionName())) {
@@ -376,16 +401,25 @@ index 56a0c8096d..2da74e9709 100644
376401 if (metaLocation != null) {
377402 ServerMetrics sl = master.getServerManager().getLoad(metaLocation);
378403- hostAndPort = URLEncoder.encode(metaLocation.getHostname()) + ":" + master.getRegionServerInfoPort(metaLocation);
379- + hostAndPort = URLEncoder.encode(metaLocation.getExternalHostname()) + ":" + master.getRegionServerInfoPort(metaLocation );
404+ + hostAndPort = URLEncoder.encode(metaLocation.getExternalHostname()) + ":" + metaLocation.getExternalPort().toString( );
380405 if (sl != null) {
381406 Map<byte[], RegionMetrics> map = sl.getRegionMetrics();
382407 if (map.containsKey(meta.getRegionName())) {
408+ @@ -548,7 +548,7 @@
409+ <td title="endKey"><%= endKeyDisplay %></td>
410+ <td title="replicaId"><%= replicaIdDisplay %></td>
411+ <td title="regionState"><%= regionStateDisplay %></td>
412+ - <td title="<%= serverColumnName + "," + startCodeColumnName %>"><%= serverName != null ? buildRegionServerLink(serverName, master.getRegionServerInfoPort(serverName), regionInfo, regionState) : "" %></td>
413+ + <td title="<%= serverColumnName + "," + startCodeColumnName %>"><%= serverName != null ? buildRegionServerLink(serverName, regionInfo, regionState) : "" %></td>
414+ <td title="<%= seqNumColumnName %>"><%= seqNum %></td>
415+ <td title="<%= serverNameColumnName %>"><%= targetServerName %></td>
416+ <td><%= mergeRegionNames %></td>
383417@@ -951,7 +951,7 @@
384418 ServerMetrics sl = master.getServerManager().getLoad(addr);
385419 // This port might be wrong if RS actually ended up using something else.
386420 urlRegionServer =
387421- "//" + URLEncoder.encode(addr.getHostname()) + ":" + master.getRegionServerInfoPort(addr) + "/rs-status";
388- + "//" + URLEncoder.encode(addr.getExternalHostname()) + ":" + master.getRegionServerInfoPort(addr ) + "/rs-status";
422+ + "//" + URLEncoder.encode(addr.getExternalHostname()) + ":" + addr.getExternalPort().toString( ) + "/rs-status";
389423 if(sl != null) {
390424 Integer i = regDistribution.get(addr);
391425 if (null == i) i = Integer.valueOf(0);
@@ -394,7 +428,7 @@ index 56a0c8096d..2da74e9709 100644
394428 %>
395429 <td>
396430- <a href="<%= urlRegionServer %>"><%= addr == null? "-": StringEscapeUtils.escapeHtml4(addr.getHostname().toString()) + ":" + master.getRegionServerInfoPort(addr) %></a>
397- + <a href="<%= urlRegionServer %>"><%= addr == null? "-": StringEscapeUtils.escapeHtml4(addr.getExternalHostname().toString()) + ":" + master.getRegionServerInfoPort(addr ) %></a>
431+ + <a href="<%= urlRegionServer %>"><%= addr == null? "-": StringEscapeUtils.escapeHtml4(addr.getExternalHostname().toString()) + ":" + addr.getExternalPort().toString( ) %></a>
398432 </td>
399433 <%
400434 } else {
@@ -403,16 +437,25 @@ index 56a0c8096d..2da74e9709 100644
403437 // This port might be wrong if RS actually ended up using something else.
404438 urlRegionServer =
405439- "//" + URLEncoder.encode(addr.getHostname()) + ":" + master.getRegionServerInfoPort(addr) + "/rs-status";
406- + "//" + URLEncoder.encode(addr.getExternalHostname()) + ":" + master.getRegionServerInfoPort(addr ) + "/rs-status";
440+ + "//" + URLEncoder.encode(addr.getExternalHostname()) + ":" + addr.getExternalPort().toString( ) + "/rs-status";
407441 }
408442 if (numRegionsRendered < numRegionsToRender) {
409443 numRegionsRendered++;
444+ @@ -1048,7 +1048,7 @@
445+ if (urlRegionServer != null) {
446+ %>
447+ <td>
448+ - <a href="<%= urlRegionServer %>"><%= addr == null? "-": StringEscapeUtils.escapeHtml4(addr.getHostname().toString()) + ":" + master.getRegionServerInfoPort(addr) %></a>
449+ + <a href="<%= urlRegionServer %>"><%= addr == null? "-": StringEscapeUtils.escapeHtml4(addr.getExternalHostname().toString()) + ":" + addr.getExternalPort().toString() %></a>
450+ </td>
451+ <%
452+ } else {
410453@@ -1098,7 +1098,7 @@
411454 if (addr != null) {
412455 // This port might be wrong if RS actually ended up using something else.
413456 urlRegionServer =
414457- "//" + URLEncoder.encode(addr.getHostname()) + ":" + master.getRegionServerInfoPort(addr) + "/rs-status";
415- + "//" + URLEncoder.encode(addr.getExternalHostname()) + ":" + master.getRegionServerInfoPort(addr ) + "/rs-status";
458+ + "//" + URLEncoder.encode(addr.getExternalHostname()) + ":" + addr.getExternalPort().toString( ) + "/rs-status";
416459 }
417460 if (numRegionsRendered < numRegionsToRender) {
418461 numRegionsRendered++;
@@ -421,7 +464,7 @@ index 56a0c8096d..2da74e9709 100644
421464 %>
422465 <td>
423466- <a href="<%= urlRegionServer %>"><%= addr == null? "-": StringEscapeUtils.escapeHtml4(addr.getHostname().toString()) + ":" + master.getRegionServerInfoPort(addr) %></a>
424- + <a href="<%= urlRegionServer %>"><%= addr == null? "-": StringEscapeUtils.escapeHtml4(addr.getExternalHostname().toString()) + ":" + master.getRegionServerInfoPort(addr ) %></a>
467+ + <a href="<%= urlRegionServer %>"><%= addr == null? "-": StringEscapeUtils.escapeHtml4(addr.getExternalHostname().toString()) + ":" + addr.getExternalPort().toString( ) %></a>
425468 </td>
426469 <%
427470 } else {
@@ -430,11 +473,11 @@ index 56a0c8096d..2da74e9709 100644
430473 for (Map.Entry<ServerName, Integer> rdEntry : regDistribution.entrySet()) {
431474 ServerName addr = rdEntry.getKey();
432475- String url = "//" + URLEncoder.encode(addr.getHostname()) + ":" + master.getRegionServerInfoPort(addr) + "/rs-status";
433- + String url = "//" + URLEncoder.encode(addr.getExternalHostname()) + ":" + master.getRegionServerInfoPort(addr ) + "/rs-status";
476+ + String url = "//" + URLEncoder.encode(addr.getExternalHostname()) + ":" + addr.getExternalPort().toString( ) + "/rs-status";
434477 %>
435478 <tr>
436479- <td><a href="<%= url %>"><%= StringEscapeUtils.escapeHtml4(addr.getHostname().toString()) + ":" + master.getRegionServerInfoPort(addr) %></a></td>
437- + <td><a href="<%= url %>"><%= StringEscapeUtils.escapeHtml4(addr.getExternalHostname().toString()) + ":" + master.getRegionServerInfoPort(addr ) %></a></td>
480+ + <td><a href="<%= url %>"><%= StringEscapeUtils.escapeHtml4(addr.getExternalHostname().toString()) + ":" + addr.getExternalPort().toString( ) %></a></td>
438481 <td><%= rdEntry.getValue()%></td>
439482 <%
440483 if (withReplica) {
0 commit comments