xkrogen commented on code in PR #4201:
URL: https://github.com/apache/hadoop/pull/4201#discussion_r923907353


##########
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/DFSHAAdmin.java:
##########
@@ -262,8 +262,13 @@ private int transitionToObserver(final CommandLine cmd)
     if (!checkManualStateManagementOK(target)) {
       return -1;
     }
-    HAServiceProtocol proto = target.getProxy(getConf(), 0);
-    HAServiceProtocolHelper.transitionToObserver(proto, createReqInfo());
+    try {
+      HAServiceProtocol proto = target.getProxy(getConf(), 0);
+      HAServiceProtocolHelper.transitionToObserver(proto, createReqInfo());
+    } catch (IOException e) {
+      errOut.println("TransitionToObserver failed! " + e.getMessage());

Review Comment:
   minor nit: `TransitionToObserver` -> `transitionToObserver` for consistency 
with other prints e.g. L254
   
   Also `getMessage()` -> `getLocalizedMessage()`



##########
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/tools/TestDFSHAAdminMiniCluster.java:
##########
@@ -161,7 +164,28 @@ public void testObserverIllegalTransition() throws 
Exception {
     assertEquals(-1, runTool("-transitionToActive", "nn1"));
     assertFalse(nnode1.isActiveState());
   }
-  
+
+  /**
+   * Tests that a Namenode in safe mode should not be transfer to observer.
+   */
+  @Test
+  public void testObserverTransitionInSafeMode() throws Exception {
+    NameNodeAdapter.enterSafeMode(cluster.getNameNode(0), false);
+    DFSHAAdmin tool = new DFSHAAdmin();
+    tool.setConf(conf);
+    System.setIn(new ByteArrayInputStream("yes\n".getBytes()));
+    int result = tool.run(
+            new String[]{"-transitionToObserver", "-forcemanual", "nn1"});

Review Comment:
   minor nit: indentation should be 4 spaces



##########
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/ha/TestHASafeMode.java:
##########
@@ -977,4 +977,31 @@ public void testTransitionToActiveWhenSafeMode() throws 
Exception {
           () -> miniCluster.transitionToActive(0));
     }
   }
+
+  /**
+   * Test transition to observer when namenode in safemode.
+   *
+   * @throws IOException

Review Comment:
   this is inaccurate, it throws `Exception`
   but this annotation isn't really necessary IMO? it's just a test



##########
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/ha/TestHASafeMode.java:
##########
@@ -977,4 +977,31 @@ public void testTransitionToActiveWhenSafeMode() throws 
Exception {
           () -> miniCluster.transitionToActive(0));
     }
   }
+
+  /**
+   * Test transition to observer when namenode in safemode.
+   *
+   * @throws IOException
+   */
+  @Test
+  public void testTransitionToObserverWhenSafeMode() throws Exception {
+    Configuration config = new Configuration();
+    config.setBoolean(DFS_HA_NN_NOT_BECOME_ACTIVE_IN_SAFEMODE, true);
+    try (MiniDFSCluster miniCluster = new MiniDFSCluster.Builder(config,
+            new File(GenericTestUtils.getRandomizedTempPath()))
+            .nnTopology(MiniDFSNNTopology.simpleHATopology())
+            .numDataNodes(1)
+            .build()) {
+      miniCluster.waitActive();
+      miniCluster.transitionToStandby(0);
+      miniCluster.transitionToStandby(1);
+      NameNode namenode0 = miniCluster.getNameNode(0);
+      NameNode namenode1 = miniCluster.getNameNode(1);
+      NameNodeAdapter.enterSafeMode(namenode0, false);
+      NameNodeAdapter.enterSafeMode(namenode1, false);
+      LambdaTestUtils.intercept(ServiceFailedException.class,
+              "NameNode still not leave safemode",
+              () -> miniCluster.transitionToObserver(0));

Review Comment:
   minor nit: indentation should be 4 spaces



##########
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/tools/TestDFSHAAdminMiniCluster.java:
##########
@@ -161,7 +164,28 @@ public void testObserverIllegalTransition() throws 
Exception {
     assertEquals(-1, runTool("-transitionToActive", "nn1"));
     assertFalse(nnode1.isActiveState());
   }
-  
+
+  /**
+   * Tests that a Namenode in safe mode should not be transfer to observer.
+   */
+  @Test
+  public void testObserverTransitionInSafeMode() throws Exception {
+    NameNodeAdapter.enterSafeMode(cluster.getNameNode(0), false);
+    DFSHAAdmin tool = new DFSHAAdmin();
+    tool.setConf(conf);
+    System.setIn(new ByteArrayInputStream("yes\n".getBytes()));
+    int result = tool.run(
+            new String[]{"-transitionToObserver", "-forcemanual", "nn1"});
+    assertEquals("State transition returned: " + result, -1, result);
+
+    NameNodeAdapter.leaveSafeMode(cluster.getNameNode(0));
+    System.setIn(new ByteArrayInputStream("yes\n".getBytes()));
+    int result1 = tool.run(
+            new String[]{"-transitionToObserver", "-forcemanual", "nn1"});

Review Comment:
   minor nit: indentation should be 4 spaces



##########
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/DFSHAAdmin.java:
##########
@@ -262,8 +262,13 @@ private int transitionToObserver(final CommandLine cmd)
     if (!checkManualStateManagementOK(target)) {
       return -1;
     }
-    HAServiceProtocol proto = target.getProxy(getConf(), 0);
-    HAServiceProtocolHelper.transitionToObserver(proto, createReqInfo());
+    try {
+      HAServiceProtocol proto = target.getProxy(getConf(), 0);
+      HAServiceProtocolHelper.transitionToObserver(proto, createReqInfo());
+    } catch (IOException e) {

Review Comment:
   Maybe only catch `ServiceFailedException` here since we only print the 
message. If an arbitrary `IOException` occurs, we probably want the additional 
context provided by the full stack trace.



##########
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/ha/TestHASafeMode.java:
##########
@@ -977,4 +977,31 @@ public void testTransitionToActiveWhenSafeMode() throws 
Exception {
           () -> miniCluster.transitionToActive(0));
     }
   }
+
+  /**
+   * Test transition to observer when namenode in safemode.
+   *
+   * @throws IOException
+   */
+  @Test
+  public void testTransitionToObserverWhenSafeMode() throws Exception {
+    Configuration config = new Configuration();
+    config.setBoolean(DFS_HA_NN_NOT_BECOME_ACTIVE_IN_SAFEMODE, true);
+    try (MiniDFSCluster miniCluster = new MiniDFSCluster.Builder(config,
+            new File(GenericTestUtils.getRandomizedTempPath()))
+            .nnTopology(MiniDFSNNTopology.simpleHATopology())
+            .numDataNodes(1)
+            .build()) {

Review Comment:
   minor nit: indentation should be 4 spaces



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to