Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -550,14 +550,20 @@ public void verifyToken(DelegationTokenIdentifier tokenId, byte[] password)
*
* @return Updater of the status for the local Namenode.
*/
protected NamenodeHeartbeatService createLocalNamenodeHeartbeatService() {
@VisibleForTesting
public NamenodeHeartbeatService createLocalNamenodeHeartbeatService() {
// Detect NN running in this machine
String nsId = DFSUtil.getNamenodeNameServiceId(conf);
if (nsId == null) {
LOG.error("Cannot find local nameservice id");
return null;
}
String nnId = null;
if (HAUtil.isHAEnabled(conf, nsId)) {
nnId = HAUtil.getNameNodeId(conf, nsId);
if (nnId == null) {
LOG.error("Cannot find namenode id for local {}", nsId);
return null;
}
}

Expand Down Expand Up @@ -787,4 +793,13 @@ public RouterAdminServer getAdminServer() {
return adminServer;
}

/**
* Set router configuration.
* @param conf
*/
@VisibleForTesting
public void setConf(Configuration conf) {
this.conf = conf;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,21 @@
*/
package org.apache.hadoop.hdfs.server.federation.router;

import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_HA_NAMENODES_KEY_PREFIX;
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMESERVICES;
import static org.apache.hadoop.hdfs.client.HdfsClientConfigKeys.DFS_NAMENODE_RPC_ADDRESS_KEY;
import static org.apache.hadoop.hdfs.server.federation.FederationTestUtils.NAMENODES;
import static org.apache.hadoop.hdfs.server.federation.FederationTestUtils.NAMESERVICES;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hdfs.DFSUtil;
import org.apache.hadoop.hdfs.server.federation.MockResolver;
import org.apache.hadoop.hdfs.server.federation.MiniRouterDFSCluster;
import org.apache.hadoop.hdfs.server.federation.MiniRouterDFSCluster.NamenodeContext;
Expand Down Expand Up @@ -105,6 +111,38 @@ public void testNamenodeHeartbeatService() throws IOException {
server.close();
}

@Test
public void testLocalNamenodeHeartbeatService() throws IOException {
Router router = new Router();
Configuration conf = new Configuration();
assertEquals(null, DFSUtil.getNamenodeNameServiceId(conf));

// case 1: no local nn is configured
router.setConf(conf);
assertNull(router.createLocalNamenodeHeartbeatService());

// case 2: local nn is configured
conf.set(DFS_NAMESERVICES, "ns1");
assertEquals("ns1", DFSUtil.getNamenodeNameServiceId(conf));
conf.set(DFSUtil.addKeySuffixes(DFS_HA_NAMENODES_KEY_PREFIX, "ns1"),
"nn1,nn2");
conf.set(DFSUtil.addKeySuffixes(
DFS_NAMENODE_RPC_ADDRESS_KEY, "ns1", "nn1"),
"localhost:8020");
conf.set(DFSUtil.addKeySuffixes(
DFS_NAMENODE_RPC_ADDRESS_KEY, "ns1", "nn2"),
"ns1-nn2.example.com:8020");
router.setConf(conf);
NamenodeHeartbeatService heartbeatService =
router.createLocalNamenodeHeartbeatService();
assertNotNull(heartbeatService);
// we have to start the service to get the serviceAddress assigned
heartbeatService.init(conf);
assertEquals("ns1-nn1:localhost:8020",
heartbeatService.getNamenodeDesc());
heartbeatService.stop();
}

@Test
public void testHearbeat() throws InterruptedException, IOException {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ public static void globalSetUp() throws Exception {
.admin()
.build();
cluster.addRouterOverrides(conf);
cluster.setIndependentDNs();
cluster.startCluster();
cluster.startRouters();
cluster.waitClusterUp();
Expand Down