You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by cu...@apache.org on 2006/06/13 23:56:37 UTC

svn commit: r413984 - in /lucene/hadoop/trunk: CHANGES.txt src/java/org/apache/hadoop/util/CopyFiles.java src/java/org/apache/hadoop/util/StringUtils.java

Author: cutting
Date: Tue Jun 13 14:56:36 2006
New Revision: 413984

URL: http://svn.apache.org/viewvc?rev=413984&view=rev
Log:
HADOOP-298.  Improved progress reports for CopyFiles, the distributed file copier.  Contributed by Owen.

Modified:
    lucene/hadoop/trunk/CHANGES.txt
    lucene/hadoop/trunk/src/java/org/apache/hadoop/util/CopyFiles.java
    lucene/hadoop/trunk/src/java/org/apache/hadoop/util/StringUtils.java

Modified: lucene/hadoop/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/CHANGES.txt?rev=413984&r1=413983&r2=413984&view=diff
==============================================================================
--- lucene/hadoop/trunk/CHANGES.txt (original)
+++ lucene/hadoop/trunk/CHANGES.txt Tue Jun 13 14:56:36 2006
@@ -7,6 +7,9 @@
     selector, and a thread per connection is no longer required.  This
     should permit larger clusters.  (Devaraj Das via cutting)
 
+ 2. HADOOP-298.  Improved progress reports for CopyFiles utility, the
+    distributed file copier.  (omalley via cutting)
+
 
 Release 0.3.2 - 2006-06-09
 

Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/util/CopyFiles.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/util/CopyFiles.java?rev=413984&r1=413983&r2=413984&view=diff
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/util/CopyFiles.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/util/CopyFiles.java Tue Jun 13 14:56:36 2006
@@ -19,9 +19,9 @@
 import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Date;
 import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.StringTokenizer;
@@ -75,11 +75,13 @@
     private static final long reportInterval = 1L << 25;
     private long bytesSinceLastReport = 0L;
     private long totalBytesCopied = 0L;
+    private static DecimalFormat percentFormat = new DecimalFormat("0.00");
     
     private void copy(String src, Reporter reporter) throws IOException {
       // open source file
       Path srcFile = new Path(srcPath, src);
       FSDataInputStream in = srcFileSys.open(srcFile);
+      long totalBytes = srcFileSys.getLength(srcFile);
       
       // create directories to hold destination file and create destFile
       Path destFile = new Path(destPath, src);
@@ -96,7 +98,12 @@
         if (bytesSinceLastReport > reportInterval) {
             totalBytesCopied += bytesSinceLastReport;
             bytesSinceLastReport = 0L;
-            reporter.setStatus("Total bytes copied: "+totalBytesCopied);
+            reporter.setStatus("Copy "+ src + ": " + 
+                               percentFormat.format(100.0 * totalBytesCopied / 
+                                                    totalBytes) +
+                               "% and " +
+                               StringUtils.humanReadableInt(totalBytesCopied) +
+                               " bytes");
         }
       }
       
@@ -105,7 +112,8 @@
       // report at least once for each file
       totalBytesCopied += bytesSinceLastReport;
       bytesSinceLastReport = 0L;
-      reporter.setStatus("Total bytes copied: "+totalBytesCopied);
+      reporter.setStatus("Finished. Bytes copied: " + 
+                         StringUtils.humanReadableInt(totalBytesCopied));
     }
     
     /** Mapper configuration.

Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/util/StringUtils.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/util/StringUtils.java?rev=413984&r1=413983&r2=413984&view=diff
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/util/StringUtils.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/util/StringUtils.java Tue Jun 13 14:56:36 2006
@@ -18,6 +18,7 @@
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
+import java.text.DecimalFormat;
 
 /**
  * General string utils
@@ -51,4 +52,31 @@
     return fullHostname;
   }
 
+  private static DecimalFormat numFormat = new DecimalFormat("0.0");
+  
+  /**
+   * Given an integer, return a string that is in an approximate, but human 
+   * readable format. 
+   * It uses the bases 'k', 'm', and 'g' for 1024, 1024**2, and 1024**3.
+   * @param number the number to format
+   * @return a human readable form of the integer
+   */
+  public static String humanReadableInt(long number) {
+    long absNumber = Math.abs(number);
+    double result = number;
+    String suffix = "";
+    if (absNumber < 1024) {
+      // nothing
+    } else if (absNumber < 1024 * 1024) {
+      result = number / 1024.0;
+      suffix = "k";
+    } else if (absNumber < 1024 * 1024 * 1024) {
+      result = number / (1024.0 * 1024);
+      suffix = "m";
+    } else {
+      result = number / (1024.0 * 1024 * 1024);
+      suffix = "g";
+    }
+    return numFormat.format(result) + suffix;
+  }
 }