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 class RouterClientProtocol implements ClientProtocol {
}
@Override
public HAServiceProtocol.HAServiceState getHAServiceState()
throws IOException {
rpcServer.checkOperation(NameNode.OperationCategory.READ, false);
return null;
public HAServiceProtocol.HAServiceState getHAServiceState() {
if (rpcServer.isSafeMode()) {
return HAServiceProtocol.HAServiceState.STANDBY;
}
return HAServiceProtocol.HAServiceState.ACTIVE;
}
/**

View File

@ -562,8 +562,7 @@ public class RouterRpcServer extends AbstractService implements ClientProtocol,
* client requests.
*/
private void checkSafeMode() throws StandbyException {
RouterSafemodeService safemodeService = router.getSafemodeService();
if (safemodeService != null && safemodeService.isInSafeMode()) {
if (isSafeMode()) {
// Throw standby exception, router is not available
if (rpcMonitor != null) {
rpcMonitor.routerFailureSafemode();
@ -574,6 +573,16 @@ public class RouterRpcServer extends AbstractService implements ClientProtocol,
}
}
/**
* 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.
*

View File

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