hadoop-common-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From d...@apache.org
Subject svn commit: r772876 - in /hadoop/core/trunk: CHANGES.txt src/core/org/apache/hadoop/fs/LocalDirAllocator.java
Date Fri, 08 May 2009 08:00:52 GMT
Author: ddas
Date: Fri May  8 08:00:52 2009
New Revision: 772876

URL: http://svn.apache.org/viewvc?rev=772876&view=rev
Log:
HADOOP-5349. Fixes a problem in LocalDirAllocator to check for the return path value that
is returned for the case where the file we want to write is of an unknown size. Contributed
by Vinod Kumar Vavilapalli.

Modified:
    hadoop/core/trunk/CHANGES.txt
    hadoop/core/trunk/src/core/org/apache/hadoop/fs/LocalDirAllocator.java

Modified: hadoop/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/CHANGES.txt?rev=772876&r1=772875&r2=772876&view=diff
==============================================================================
--- hadoop/core/trunk/CHANGES.txt (original)
+++ hadoop/core/trunk/CHANGES.txt Fri May  8 08:00:52 2009
@@ -580,7 +580,11 @@
     kills itself if it ever discovers that the port to which jetty is actually
     bound is invalid (-1). (ddas)
 
-Release 0.20.0 - Unreleased
+    HADOOP-5349. Fixes a problem in LocalDirAllocator to check for the return
+    path value that is returned for the case where the file we want to write
+    is of an unknown size. (Vinod Kumar Vavilapalli via ddas)
+
+Release 0.20.0 - 2009-04-15
 
   INCOMPATIBLE CHANGES
 

Modified: hadoop/core/trunk/src/core/org/apache/hadoop/fs/LocalDirAllocator.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/core/org/apache/hadoop/fs/LocalDirAllocator.java?rev=772876&r1=772875&r2=772876&view=diff
==============================================================================
--- hadoop/core/trunk/src/core/org/apache/hadoop/fs/LocalDirAllocator.java (original)
+++ hadoop/core/trunk/src/core/org/apache/hadoop/fs/LocalDirAllocator.java Fri May  8 08:00:52
2009
@@ -306,16 +306,24 @@
           availableOnDisk[i] = dirDF[i].getAvailable();
           totalAvailable += availableOnDisk[i];
         }
-            // "roll the ball" -- pick a directory
+
+        // Keep rolling the wheel till we get a valid path
         Random r = new java.util.Random();
-        long randomPosition = Math.abs(r.nextLong()) % totalAvailable;
-        int dir=0;
-        while(randomPosition > availableOnDisk[dir]) {
-          randomPosition -= availableOnDisk[dir];
-          dir++;
+        while (numDirsSearched < numDirs && returnPath == null) {
+          long randomPosition = Math.abs(r.nextLong()) % totalAvailable;
+          int dir = 0;
+          while (randomPosition > availableOnDisk[dir]) {
+            randomPosition -= availableOnDisk[dir];
+            dir++;
+          }
+          dirNumLastAccessed = dir;
+          returnPath = createPath(pathStr);
+          if (returnPath == null) {
+            totalAvailable -= availableOnDisk[dir];
+            availableOnDisk[dir] = 0; // skip this disk
+            numDirsSearched++;
+          }
         }
-        dirNumLastAccessed = dir;
-        returnPath = createPath(pathStr);
       } else {
         while (numDirsSearched < numDirs && returnPath == null) {
           long capacity = dirDF[dirNumLastAccessed].getAvailable();



Mime
View raw message