Browse Source

HADOOP-756. Add new dfsadmin option to wait for filesystem to be operational. Contributed by Dhruba.

git-svn-id: https://svn.apache.org/repos/asf/lucene/hadoop/trunk@483654 13f79535-47bb-0310-9956-ffa450edef68
Doug Cutting 18 years ago
parent
commit
26ce4c9fc3
2 changed files with 27 additions and 4 deletions
  1. 3 0
      CHANGES.txt
  2. 24 4
      src/java/org/apache/hadoop/dfs/DFSAdmin.java

+ 3 - 0
CHANGES.txt

@@ -33,6 +33,9 @@ Trunk (unreleased changes)
  9. HADOOP-639. Restructure InterTrackerProtocol to make task
     accounting more reliable.  (Arun C Murthy via cutting)
 
+10. HADOOP-756. Add new dfsadmin option to wait for filesystem to be
+    operational.  (Dhruba Borthakur via cutting)
+
 
 Release 0.9.1 - 2006-12-06
 

+ 24 - 4
src/java/org/apache/hadoop/dfs/DFSAdmin.java

@@ -96,6 +96,7 @@ public class DFSAdmin extends DFSShell {
         return;
       }
       FSConstants.SafeModeAction action;
+      Boolean waitExitSafe = false;
 
       if ("leave".equalsIgnoreCase(argv[idx])) {
         action = FSConstants.SafeModeAction.SAFEMODE_LEAVE;
@@ -103,13 +104,32 @@ public class DFSAdmin extends DFSShell {
         action = FSConstants.SafeModeAction.SAFEMODE_ENTER;
       } else if ("get".equalsIgnoreCase(argv[idx])) {
         action = FSConstants.SafeModeAction.SAFEMODE_GET;
+      } else if ("wait".equalsIgnoreCase(argv[idx])) {
+        action = FSConstants.SafeModeAction.SAFEMODE_GET;
+        waitExitSafe = true;
       } else {
         printUsage("-safemode");
         return;
       }
       DistributedFileSystem dfs = (DistributedFileSystem) fs;
-      boolean mode = dfs.setSafeMode(action);
-      System.out.println("Safe mode is " + (mode ? "ON" : "OFF"));
+      boolean inSafeMode = dfs.setSafeMode(action);
+
+      //
+      // If we are waiting for safemode to exit, then poll and
+      // sleep till we are out of safemode.
+      //
+      if (waitExitSafe) {
+        while (inSafeMode) {
+          try {
+            Thread.sleep(5000);
+          } catch (java.lang.InterruptedException e) {
+            throw new IOException("Wait Interrupted");
+          }
+          inSafeMode = dfs.setSafeMode(action);
+        }
+      }
+
+      System.out.println("Safe mode is " + (inSafeMode ? "ON" : "OFF"));
     }
 
     /**
@@ -122,11 +142,11 @@ public class DFSAdmin extends DFSShell {
                 + " [report]");
           } else if ("-safemode".equals(cmd)) {
             System.err.println("Usage: java DFSAdmin"
-                + " [-safemode enter | leave | get]");
+                + " [-safemode enter | leave | get | wait]");
           } else {
             System.err.println("Usage: java DFSAdmin");
             System.err.println("           [-report]");
-            System.err.println("           [-safemode enter | leave | get]");
+            System.err.println("           [-safemode enter | leave | get | wait]");
           }
     }