HDFS-14067. [SBN read] Allow manual failover between standby and observer. Contributed by Chao Sun.
This commit is contained in:
parent
96cdd13de5
commit
6916ee71fd
|
@ -476,6 +476,7 @@ public abstract class HAAdmin extends Configured implements Tool {
|
|||
// Mutative commands take FORCEMANUAL option
|
||||
if ("-transitionToActive".equals(cmd) ||
|
||||
"-transitionToStandby".equals(cmd) ||
|
||||
"-transitionToObserver".equals(cmd) ||
|
||||
"-failover".equals(cmd)) {
|
||||
opts.addOption(FORCEMANUAL, false,
|
||||
"force manual control even if auto-failover is enabled");
|
||||
|
|
|
@ -215,11 +215,16 @@ public class TestDFSHAAdmin {
|
|||
assertTrue(errOutput.contains("Refusing to manually manage"));
|
||||
assertEquals(-1, runTool("-transitionToStandby", "nn1"));
|
||||
assertTrue(errOutput.contains("Refusing to manually manage"));
|
||||
assertEquals(-1, runTool("-transitionToObserver", "nn1"));
|
||||
assertTrue(errOutput.contains("Refusing to manually manage"));
|
||||
|
||||
Mockito.verify(mockProtocol, Mockito.never())
|
||||
.transitionToActive(anyReqInfo());
|
||||
Mockito.verify(mockProtocol, Mockito.never())
|
||||
.transitionToStandby(anyReqInfo());
|
||||
.transitionToStandby(anyReqInfo());
|
||||
Mockito.verify(mockProtocol, Mockito.never())
|
||||
.transitionToObserver(anyReqInfo());
|
||||
|
||||
|
||||
// Force flag should bypass the check and change the request source
|
||||
// for the RPC
|
||||
|
@ -227,12 +232,16 @@ public class TestDFSHAAdmin {
|
|||
assertEquals(0, runTool("-transitionToActive", "-forcemanual", "nn1"));
|
||||
setupConfirmationOnSystemIn();
|
||||
assertEquals(0, runTool("-transitionToStandby", "-forcemanual", "nn1"));
|
||||
setupConfirmationOnSystemIn();
|
||||
assertEquals(0, runTool("-transitionToObserver", "-forcemanual", "nn1"));
|
||||
|
||||
Mockito.verify(mockProtocol, Mockito.times(1)).transitionToActive(
|
||||
reqInfoCaptor.capture());
|
||||
Mockito.verify(mockProtocol, Mockito.times(1)).transitionToStandby(
|
||||
reqInfoCaptor.capture());
|
||||
|
||||
Mockito.verify(mockProtocol, Mockito.times(1)).transitionToObserver(
|
||||
reqInfoCaptor.capture());
|
||||
|
||||
// All of the RPCs should have had the "force" source
|
||||
for (StateChangeRequestInfo ri : reqInfoCaptor.getAllValues()) {
|
||||
assertEquals(RequestSource.REQUEST_BY_USER_FORCED, ri.getSource());
|
||||
|
|
Loading…
Reference in New Issue