浏览代码

HADOOP-990. Improve HDFS support for full datanode volumes. Contributed by Raghu.

git-svn-id: https://svn.apache.org/repos/asf/lucene/hadoop/trunk@510261 13f79535-47bb-0310-9956-ffa450edef68
Doug Cutting 18 年之前
父节点
当前提交
bda904a425
共有 3 个文件被更改,包括 12 次插入4 次删除
  1. 4 0
      CHANGES.txt
  2. 4 1
      src/java/org/apache/hadoop/dfs/DFSClient.java
  3. 4 3
      src/java/org/apache/hadoop/dfs/FSDataset.java

+ 4 - 0
CHANGES.txt

@@ -99,6 +99,10 @@ Trunk (unreleased changes)
     transfers. This includes a generic retry mechanism for use
     elsewhere in Hadoop. (tomwhite)
 
+30. HADOOP-990.  Improve HDFS support for full datanode volumes.
+    (Raghu Angadi via cutting)
+
+
 Release 0.11.2 - 2007-02-16
 
  1. HADOOP-1009.  Fix an infinite loop in the HDFS namenode.

+ 4 - 1
src/java/org/apache/hadoop/dfs/DFSClient.java

@@ -1032,6 +1032,9 @@ class DFSClient implements FSConstants {
                 }
 
                 block = lb.getBlock();
+                if ( block.getNumBytes() < bytesWrittenToBlock ) {
+                  block.setNumBytes( bytesWrittenToBlock );
+                }
                 DatanodeInfo nodes[] = lb.getLocations();
 
                 //
@@ -1074,7 +1077,6 @@ class DFSClient implements FSConstants {
                     nodes[i].write(out);
                 }
                 out.write(CHUNKED_ENCODING);
-                bytesWrittenToBlock = 0;
                 blockStream = out;
                 blockReplyStream = new DataInputStream(new BufferedInputStream(s.getInputStream()));
             } while (retry);
@@ -1274,6 +1276,7 @@ class DFSClient implements FSConstants {
                 }
             }
 
+            bytesWrittenToBlock = 0;
             //
             // Delete local backup, start new one
             //

+ 4 - 3
src/java/org/apache/hadoop/dfs/FSDataset.java

@@ -221,8 +221,10 @@ class FSDataset implements FSConstants {
       }
       
       long getAvailable() throws IOException {
-        return ((long) Math.round(usableDiskPct *
-                usage.getAvailable()) - reserved);
+        long freespace = (long)
+            Math.round( ( ( usableDiskPct * usage.getCapacity() )
+                          - usage.getUsed() - reserved ));
+        return ( freespace > 0 ) ? freespace : 0;
       }
       
       String getMount() throws IOException {
@@ -246,7 +248,6 @@ class FSDataset implements FSConstants {
           System.out.println("Exception!  " + ie);
           throw ie;
         }
-        reserved -= b.getNumBytes();
         return f;
       }