HDFS-15613. RBF: Router FSCK fails after HDFS-14442. (#2360)

* Support getHAServiceState in DFSRouter
This commit is contained in:
Akira Ajisaka 2020-10-07 13:37:45 +09:00 committed by GitHub
parent 921ca1f554
commit 074f0d46af
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 6 deletions

View File

@ -1799,10 +1799,11 @@ public void satisfyStoragePolicy(String path) throws IOException {
} }
@Override @Override
public HAServiceProtocol.HAServiceState getHAServiceState() public HAServiceProtocol.HAServiceState getHAServiceState() {
throws IOException { if (rpcServer.isSafeMode()) {
rpcServer.checkOperation(NameNode.OperationCategory.READ, false); return HAServiceProtocol.HAServiceState.STANDBY;
return null; }
return HAServiceProtocol.HAServiceState.ACTIVE;
} }
/** /**

View File

@ -562,8 +562,7 @@ void checkOperation(OperationCategory op)
* client requests. * client requests.
*/ */
private void checkSafeMode() throws StandbyException { private void checkSafeMode() throws StandbyException {
RouterSafemodeService safemodeService = router.getSafemodeService(); if (isSafeMode()) {
if (safemodeService != null && safemodeService.isInSafeMode()) {
// Throw standby exception, router is not available // Throw standby exception, router is not available
if (rpcMonitor != null) { if (rpcMonitor != null) {
rpcMonitor.routerFailureSafemode(); rpcMonitor.routerFailureSafemode();
@ -574,6 +573,16 @@ private void checkSafeMode() throws StandbyException {
} }
} }
/**
* Return true if the Router is in safe mode.
*
* @return true if the Router is in safe mode.
*/
boolean isSafeMode() {
RouterSafemodeService safemodeService = router.getSafemodeService();
return (safemodeService != null && safemodeService.isInSafeMode());
}
/** /**
* Get the name of the method that is calling this function. * Get the name of the method that is calling this function.
* *

View File

@ -1113,6 +1113,10 @@ public void testSafeModeStatus() throws Exception {
// ensure the Router become RUNNING state // ensure the Router become RUNNING state
waitState(RouterServiceState.RUNNING); waitState(RouterServiceState.RUNNING);
assertFalse(routerContext.getRouter().getSafemodeService().isInSafeMode()); assertFalse(routerContext.getRouter().getSafemodeService().isInSafeMode());
final RouterClientProtocol clientProtocol =
routerContext.getRouter().getRpcServer().getClientProtocolModule();
assertEquals(HAServiceState.ACTIVE, clientProtocol.getHAServiceState());
assertEquals(0, assertEquals(0,
ToolRunner.run(admin, new String[] {"-safemode", "enter" })); ToolRunner.run(admin, new String[] {"-safemode", "enter" }));
@ -1125,6 +1129,7 @@ public void testSafeModeStatus() throws Exception {
// verify state using RBFMetrics // verify state using RBFMetrics
assertEquals(RouterServiceState.SAFEMODE.toString(), jsonString); assertEquals(RouterServiceState.SAFEMODE.toString(), jsonString);
assertTrue(routerContext.getRouter().getSafemodeService().isInSafeMode()); assertTrue(routerContext.getRouter().getSafemodeService().isInSafeMode());
assertEquals(HAServiceState.STANDBY, clientProtocol.getHAServiceState());
System.setOut(new PrintStream(out)); System.setOut(new PrintStream(out));
assertEquals(0, assertEquals(0,
@ -1136,6 +1141,7 @@ public void testSafeModeStatus() throws Exception {
// verify state // verify state
assertEquals(RouterServiceState.RUNNING.toString(), jsonString); assertEquals(RouterServiceState.RUNNING.toString(), jsonString);
assertFalse(routerContext.getRouter().getSafemodeService().isInSafeMode()); assertFalse(routerContext.getRouter().getSafemodeService().isInSafeMode());
assertEquals(HAServiceState.ACTIVE, clientProtocol.getHAServiceState());
out.reset(); out.reset();
assertEquals(0, ToolRunner.run(admin, new String[] {"-safemode", "get" })); assertEquals(0, ToolRunner.run(admin, new String[] {"-safemode", "get" }));