HDFS-14191. RBF: Remove hard coded router status from FederationMetrics. Contributed by Ranith Sardar.
This commit is contained in:
parent
4244653e43
commit
b8bcbd0ed2
|
@ -582,7 +582,7 @@ public class FederationMetrics implements FederationMBean {
|
|||
|
||||
@Override
|
||||
public String getRouterStatus() {
|
||||
return "RUNNING";
|
||||
return this.router.getRouterState().toString();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -45,6 +45,7 @@ import org.apache.hadoop.hdfs.server.federation.resolver.FederationNamespaceInfo
|
|||
import org.apache.hadoop.hdfs.server.federation.router.RBFConfigKeys;
|
||||
import org.apache.hadoop.hdfs.server.federation.router.Router;
|
||||
import org.apache.hadoop.hdfs.server.federation.router.RouterRpcServer;
|
||||
import org.apache.hadoop.hdfs.server.federation.router.RouterServiceState;
|
||||
import org.apache.hadoop.hdfs.server.federation.router.SubClusterTimeoutException;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.MembershipStore;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.StateStoreService;
|
||||
|
@ -232,7 +233,29 @@ public class NamenodeBeanMetrics
|
|||
|
||||
@Override
|
||||
public String getSafemode() {
|
||||
// We assume that the global federated view is never in safe mode
|
||||
try {
|
||||
if (!getRouter().isRouterState(RouterServiceState.SAFEMODE)) {
|
||||
return "Safe mode is ON. " + this.getSafeModeTip();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
return "Failed to get safemode status. Please check router"
|
||||
+ "log for more detail.";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
private String getSafeModeTip() throws IOException {
|
||||
Router rt = getRouter();
|
||||
String cmd = "Use \"hdfs dfsrouteradmin -safemode leave\" "
|
||||
+ "to turn safe mode off.";
|
||||
if (rt.isRouterState(RouterServiceState.INITIALIZING)
|
||||
|| rt.isRouterState(RouterServiceState.UNINITIALIZED)) {
|
||||
return "Router is in" + rt.getRouterState()
|
||||
+ "mode, the router will immediately return to "
|
||||
+ "normal mode after some time. " + cmd;
|
||||
} else if (rt.isRouterState(RouterServiceState.SAFEMODE)) {
|
||||
return "It was turned on manually. " + cmd;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
|
|
|
@ -585,6 +585,13 @@ public class Router extends CompositeService {
|
|||
return this.state;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compare router state.
|
||||
*/
|
||||
public boolean isRouterState(RouterServiceState routerState) {
|
||||
return routerState.equals(this.state);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
// Submodule getters
|
||||
/////////////////////////////////////////////////////////
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
var BEANS = [
|
||||
{"name": "federation", "url": "/jmx?qry=Hadoop:service=Router,name=FederationState"},
|
||||
{"name": "routerstat", "url": "/jmx?qry=Hadoop:service=NameNode,name=NameNodeStatus"},
|
||||
{"name": "router", "url": "/jmx?qrt=Hadoop:service=NameNode,name=NameNodeInfo"},
|
||||
{"name": "router", "url": "/jmx?qry=Hadoop:service=NameNode,name=NameNodeInfo"},
|
||||
{"name": "mem", "url": "/jmx?qry=java.lang:type=Memory"}
|
||||
];
|
||||
|
||||
|
|
|
@ -33,6 +33,7 @@ import org.apache.hadoop.hdfs.protocol.HdfsConstants;
|
|||
import org.apache.hadoop.hdfs.server.federation.MiniRouterDFSCluster.RouterContext;
|
||||
import org.apache.hadoop.hdfs.server.federation.RouterConfigBuilder;
|
||||
import org.apache.hadoop.hdfs.server.federation.StateStoreDFSCluster;
|
||||
import org.apache.hadoop.hdfs.server.federation.metrics.FederationMetrics;
|
||||
import org.apache.hadoop.hdfs.server.federation.resolver.ActiveNamenodeResolver;
|
||||
import org.apache.hadoop.hdfs.server.federation.resolver.MountTableManager;
|
||||
import org.apache.hadoop.hdfs.server.federation.resolver.RemoteLocation;
|
||||
|
@ -66,6 +67,7 @@ public class TestRouterAdminCLI {
|
|||
|
||||
private static RouterAdmin admin;
|
||||
private static RouterClient client;
|
||||
private static Router router;
|
||||
|
||||
private static final String TEST_USER = "test-user";
|
||||
|
||||
|
@ -80,6 +82,7 @@ public class TestRouterAdminCLI {
|
|||
// Build and start a router with State Store + admin + RPC
|
||||
Configuration conf = new RouterConfigBuilder()
|
||||
.stateStore()
|
||||
.metrics()
|
||||
.admin()
|
||||
.rpc()
|
||||
.safemode()
|
||||
|
@ -90,7 +93,7 @@ public class TestRouterAdminCLI {
|
|||
cluster.startRouters();
|
||||
|
||||
routerContext = cluster.getRandomRouter();
|
||||
Router router = routerContext.getRouter();
|
||||
router = routerContext.getRouter();
|
||||
stateStore = router.getStateStore();
|
||||
|
||||
Configuration routerConf = new Configuration();
|
||||
|
@ -720,6 +723,34 @@ public class TestRouterAdminCLI {
|
|||
err.reset();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSafeModeStatus() throws Exception {
|
||||
// ensure the Router become RUNNING state
|
||||
waitState(RouterServiceState.RUNNING);
|
||||
assertFalse(routerContext.getRouter().getSafemodeService().isInSafeMode());
|
||||
assertEquals(0,
|
||||
ToolRunner.run(admin, new String[] {"-safemode", "enter" }));
|
||||
|
||||
FederationMetrics metrics = router.getMetrics();
|
||||
String jsonString = metrics.getRouterStatus();
|
||||
|
||||
// verify state using FederationMetrics
|
||||
assertEquals(RouterServiceState.SAFEMODE.toString(), jsonString);
|
||||
assertTrue(routerContext.getRouter().getSafemodeService().isInSafeMode());
|
||||
|
||||
System.setOut(new PrintStream(out));
|
||||
assertEquals(0,
|
||||
ToolRunner.run(admin, new String[] {"-safemode", "leave" }));
|
||||
jsonString = metrics.getRouterStatus();
|
||||
// verify state
|
||||
assertEquals(RouterServiceState.RUNNING.toString(), jsonString);
|
||||
assertFalse(routerContext.getRouter().getSafemodeService().isInSafeMode());
|
||||
|
||||
out.reset();
|
||||
assertEquals(0, ToolRunner.run(admin, new String[] {"-safemode", "get" }));
|
||||
assertTrue(out.toString().contains("false"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateInvalidEntry() throws Exception {
|
||||
String[] argv = new String[] {
|
||||
|
|
Loading…
Reference in New Issue