Skip to content

Commit e94407a

Browse files
author
孙辉10329192
committed
HDFS-17834. Fix invalid HTTP links for DataNodes in IPv6 environment
1 parent 5a9404e commit e94407a

File tree

2 files changed

+42
-4
lines changed

2 files changed

+42
-4
lines changed

hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/webapps/router/federationhealth.js

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,9 +278,28 @@
278278
for (var i = 0, e = nodes.length; i < e; ++i) {
279279
var n = nodes[i];
280280
n.usedPercentage = Math.round((n.used + n.nonDfsUsedSpace) * 1.0 / n.capacity * 100);
281-
var port = n.infoAddr.split(":")[1];
282-
var securePort = n.infoSecureAddr.split(":")[1];
281+
// 处理IPv6地址的infoAddr
282+
var infoAddrParts = n.infoAddr.split("]:");
283+
var port = "50075";
283284
var dnHost = n.name.split(":")[0];
285+
if (infoAddrParts.length > 1) {
286+
// IPv6地址格式 [xxxx:xxxx:...]:port
287+
port = infoAddrParts[1];
288+
} else {
289+
// IPv4地址格式 host:port
290+
var parts = n.infoAddr.split(":");
291+
port = parts[1];
292+
}
293+
// 同样方式处理安全端口
294+
var securePort = "0";
295+
if (n.infoSecureAddr) {
296+
var secureAddrParts = n.infoSecureAddr.split("]:");
297+
if (secureAddrParts.length > 1) {
298+
securePort = secureAddrParts[1];
299+
} else {
300+
securePort = n.infoSecureAddr.split(":")[1];
301+
}
302+
}
284303
n.dnWebAddress = "http://" + dnHost + ":" + port;
285304
if (securePort != 0) {
286305
n.dnWebAddress = "https://" + dnHost + ":" + securePort;

hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/dfshealth.js

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,9 +227,28 @@
227227
var n = nodes[i];
228228
n.usedPercentage = Math.round((n.used + n.nonDfsUsedSpace) * 1.0 / n.capacity * 100);
229229

230-
var port = n.infoAddr.split(":")[1];
231-
var securePort = n.infoSecureAddr.split(":")[1];
230+
// 处理IPv6地址的infoAddr
231+
var infoAddrParts = n.infoAddr.split("]:");
232+
var port = "50075";
232233
var dnHost = n.name.split(":")[0];
234+
if (infoAddrParts.length > 1) {
235+
// IPv6地址格式 [xxxx:xxxx:...]:port
236+
port = infoAddrParts[1];
237+
} else {
238+
// IPv4地址格式 host:port
239+
var parts = n.infoAddr.split(":");
240+
port = parts[1];
241+
}
242+
// 同样方式处理安全端口
243+
var securePort = "0";
244+
if (n.infoSecureAddr) {
245+
var secureAddrParts = n.infoSecureAddr.split("]:");
246+
if (secureAddrParts.length > 1) {
247+
securePort = secureAddrParts[1];
248+
} else {
249+
securePort = n.infoSecureAddr.split(":")[1];
250+
}
251+
}
233252
n.dnWebAddress = "http://" + dnHost + ":" + port;
234253
if (securePort != 0) {
235254
n.dnWebAddress = "https://" + dnHost + ":" + securePort;

0 commit comments

Comments
 (0)