You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ay...@apache.org on 2020/05/12 16:26:17 UTC
[hadoop] branch trunk updated: HDFS-15300. RBF:
updateActiveNamenode() is invalid when RPC address is IP. Contributed by
xuzq.
This is an automated email from the ASF dual-hosted git repository.
ayushsaxena 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 936bf09 HDFS-15300. RBF: updateActiveNamenode() is invalid when RPC address is IP. Contributed by xuzq.
936bf09 is described below
commit 936bf09c3745cfec26fa9cfa0562f88b1f8be133
Author: Ayush Saxena <ay...@apache.org>
AuthorDate: Tue May 12 21:48:44 2020 +0530
HDFS-15300. RBF: updateActiveNamenode() is invalid when RPC address is IP. Contributed by xuzq.
---
.../src/main/java/org/apache/hadoop/net/NetUtils.java | 16 ++++++++++++++++
.../federation/resolver/MembershipNamenodeResolver.java | 4 +++-
.../hdfs/server/federation/FederationTestUtils.java | 11 +++++++++--
.../federation/resolver/TestNamenodeResolver.java | 17 +++++++++++++++++
4 files changed, 45 insertions(+), 3 deletions(-)
diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetUtils.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetUtils.java
index d98254c..478bd41 100644
--- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetUtils.java
+++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetUtils.java
@@ -639,6 +639,22 @@ public class NetUtils {
}
/**
+ * Attempt to normalize the given string to "host:port"
+ * if it like "ip:port".
+ *
+ * @param ipPort maybe lik ip:port or host:port.
+ * @return host:port
+ */
+ public static String normalizeIP2HostName(String ipPort) {
+ if (null == ipPort || !ipPortPattern.matcher(ipPort).matches()) {
+ return ipPort;
+ }
+
+ InetSocketAddress address = createSocketAddr(ipPort);
+ return getHostPortString(address);
+ }
+
+ /**
* Return hostname without throwing exception.
* The returned hostname String format is "hostname".
* @return hostname
diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/resolver/MembershipNamenodeResolver.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/resolver/MembershipNamenodeResolver.java
index ff58666..13593e6 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/resolver/MembershipNamenodeResolver.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/resolver/MembershipNamenodeResolver.java
@@ -47,6 +47,7 @@ import org.apache.hadoop.hdfs.server.federation.store.protocol.NamenodeHeartbeat
import org.apache.hadoop.hdfs.server.federation.store.protocol.UpdateNamenodeRegistrationRequest;
import org.apache.hadoop.hdfs.server.federation.store.records.MembershipState;
import org.apache.hadoop.hdfs.server.federation.store.records.MembershipStats;
+import org.apache.hadoop.net.NetUtils;
import org.apache.hadoop.util.Time;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -263,7 +264,8 @@ public class MembershipNamenodeResolver
MembershipState record = MembershipState.newInstance(
routerId, report.getNameserviceId(), report.getNamenodeId(),
- report.getClusterId(), report.getBlockPoolId(), report.getRpcAddress(),
+ report.getClusterId(), report.getBlockPoolId(),
+ NetUtils.normalizeIP2HostName(report.getRpcAddress()),
report.getServiceAddress(), report.getLifelineAddress(),
report.getWebScheme(), report.getWebAddress(), report.getState(),
report.getSafemode());
diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/FederationTestUtils.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/FederationTestUtils.java
index 5bd5178..49b592b 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/FederationTestUtils.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/FederationTestUtils.java
@@ -138,8 +138,15 @@ public final class FederationTestUtils {
public static NamenodeStatusReport createNamenodeReport(String ns, String nn,
HAServiceState state) {
Random rand = new Random();
- NamenodeStatusReport report = new NamenodeStatusReport(ns, nn,
- "localhost:" + rand.nextInt(10000), "localhost:" + rand.nextInt(10000),
+ return createNamenodeReport(ns, nn, "localhost:"
+ + rand.nextInt(10000), state);
+ }
+
+ public static NamenodeStatusReport createNamenodeReport(String ns, String nn,
+ String rpcAddress, HAServiceState state) {
+ Random rand = new Random();
+ NamenodeStatusReport report = new NamenodeStatusReport(ns, nn, rpcAddress,
+ "localhost:" + rand.nextInt(10000),
"localhost:" + rand.nextInt(10000), "http",
"testwebaddress-" + ns + nn);
if (state == null) {
diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/resolver/TestNamenodeResolver.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/resolver/TestNamenodeResolver.java
index 932c861..df80037 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/resolver/TestNamenodeResolver.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/resolver/TestNamenodeResolver.java
@@ -307,6 +307,23 @@ public class TestNamenodeResolver {
FederationNamenodeServiceState.ACTIVE, namenode1.getState());
}
+ @Test
+ public void testCacheUpdateOnNamenodeStateUpdateWithIp()
+ throws IOException {
+ final String rpcAddress = "127.0.0.1:10000";
+ assertTrue(namenodeResolver.registerNamenode(
+ createNamenodeReport(NAMESERVICES[0], NAMENODES[0], rpcAddress,
+ HAServiceState.STANDBY)));
+ stateStore.refreshCaches(true);
+
+ InetSocketAddress inetAddr = getInetSocketAddress(rpcAddress);
+ namenodeResolver.updateActiveNamenode(NAMESERVICES[0], inetAddr);
+ FederationNamenodeContext namenode =
+ namenodeResolver.getNamenodesForNameserviceId(NAMESERVICES[0]).get(0);
+ assertEquals("The namenode state should be ACTIVE post update.",
+ FederationNamenodeServiceState.ACTIVE, namenode.getState());
+ }
+
/**
* Creates InetSocketAddress from the given RPC address.
* @param rpcAddr RPC address (host:port).
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org