diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestSafeMode.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestSafeMode.java index d040b7aac1a4f..1498eb6a57575 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestSafeMode.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestSafeMode.java @@ -35,10 +35,10 @@ public class TestSafeMode { /** Federated HDFS cluster. */ - private MiniRouterDFSCluster cluster; + protected MiniRouterDFSCluster cluster; @Before - public void setup() throws Exception { + public void setup() throws Exception { cluster = new MiniRouterDFSCluster(true, 2); // Start NNs and DNs and wait until ready diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/async/TestSafeModeWithRouterAsync.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/async/TestSafeModeWithRouterAsync.java new file mode 100644 index 0000000000000..51d5504d4eb4f --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/async/TestSafeModeWithRouterAsync.java @@ -0,0 +1,86 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.server.federation.router.async; + +import static org.apache.hadoop.hdfs.server.federation.FederationTestUtils.NAMENODES; + +import java.io.IOException; + +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.hdfs.protocol.ClientProtocol; +import org.apache.hadoop.hdfs.protocol.HdfsConstants.SafeModeAction; +import org.apache.hadoop.hdfs.server.federation.MiniRouterDFSCluster; +import org.apache.hadoop.hdfs.server.federation.MiniRouterDFSCluster.RouterContext; +import org.apache.hadoop.hdfs.server.federation.RouterConfigBuilder; +import org.apache.hadoop.hdfs.server.federation.router.RBFConfigKeys; +import org.apache.hadoop.hdfs.server.federation.router.TestSafeMode; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/** + * Test the SafeMode using async router rpc. + */ +public class TestSafeModeWithRouterAsync extends TestSafeMode { + + @Before + public void setup() throws Exception { + cluster = new MiniRouterDFSCluster(true, 2); + Configuration routerConf = new RouterConfigBuilder().rpc().build(); + routerConf.setBoolean(RBFConfigKeys.DFS_ROUTER_ASYNC_RPC_ENABLE_KEY, true); + cluster.addRouterOverrides(routerConf); + + // Start NNs and DNs and wait until ready. + cluster.startCluster(); + + // Start routers with only an RPC service. + cluster.startRouters(); + + // Register and verify all NNs with all routers. + cluster.registerNamenodes(); + cluster.waitNamenodeRegistration(); + + // Setup the mount table. + cluster.installMockLocations(); + + // Making one Namenodes active per nameservice. + if (cluster.isHighAvailability()) { + for (String ns : cluster.getNameservices()) { + cluster.switchToActive(ns, NAMENODES[0]); + cluster.switchToStandby(ns, NAMENODES[1]); + } + } + cluster.waitActiveNamespaces(); + } + + @After + public void teardown() throws IOException { + if (cluster != null) { + cluster.shutdown(); + cluster = null; + } + } + + @Test + public void testProxySetSafemode() throws Exception { + RouterContext routerContext = cluster.getRandomRouter(); + ClientProtocol routerProtocol = routerContext.getClient().getNamenode(); + routerProtocol.setSafeMode(SafeModeAction.SAFEMODE_GET, true); + routerProtocol.setSafeMode(SafeModeAction.SAFEMODE_GET, false); + } +}