[ 
https://issues.apache.org/jira/browse/HDFS-16547?focusedWorklogId=792380&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-792380
 ]

ASF GitHub Bot logged work on HDFS-16547:
-----------------------------------------

                Author: ASF GitHub Bot
            Created on: 18/Jul/22 22:45
            Start Date: 18/Jul/22 22:45
    Worklog Time Spent: 10m 
      Work Description: 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





Issue Time Tracking
-------------------

    Worklog Id:     (was: 792380)
    Time Spent: 1h 40m  (was: 1.5h)

> [SBN read] Namenode in safe mode should not be transfered to observer state
> ---------------------------------------------------------------------------
>
>                 Key: HDFS-16547
>                 URL: https://issues.apache.org/jira/browse/HDFS-16547
>             Project: Hadoop HDFS
>          Issue Type: Improvement
>            Reporter: Tao Li
>            Assignee: Tao Li
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 1h 40m
>  Remaining Estimate: 0h
>
> Currently, when a Namenode is in safemode(under starting or enter safemode 
> manually), we can transfer this Namenode to Observer by command. This 
> Observer node may receive many requests and then throw a SafemodeException, 
> this causes unnecessary failover on the client.
> So Namenode in safe mode should not be transfer to observer state.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: hdfs-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: hdfs-issues-h...@hadoop.apache.org

Reply via email to