Prechádzať zdrojové kódy

HDFS-546. DatanodeDescriptor iterator blocks as BlockInfo. Contributed by Konstantin Shvachko.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/hdfs/trunk@804754 13f79535-47bb-0310-9956-ffa450edef68
Konstantin Shvachko 16 rokov pred
rodič
commit
23710f085d

+ 2 - 0
CHANGES.txt

@@ -94,6 +94,8 @@ Trunk (unreleased changes)
 
     HDFS-409. Add more access token tests.  (Kan Zhang via szetszwo)
 
+    HDFS-546. DatanodeDescriptor iterator blocks as BlockInfo. (shv)
+
   BUG FIXES
 
     HDFS-76. Better error message to users when commands fail because of 

+ 3 - 2
src/java/org/apache/hadoop/hdfs/server/namenode/BlockManager.java

@@ -1230,8 +1230,9 @@ public class BlockManager {
    */
   boolean isReplicationInProgress(DatanodeDescriptor srcNode) {
     boolean status = false;
-    for(final Iterator<Block> i = srcNode.getBlockIterator(); i.hasNext(); ) {
-      final Block block = i.next();
+    final Iterator<? extends Block> it = srcNode.getBlockIterator();
+    while(it.hasNext()) {
+      final Block block = it.next();
       INode fileINode = blocksMap.getINode(block);
 
       if (fileINode != null) {

+ 3 - 3
src/java/org/apache/hadoop/hdfs/server/namenode/DatanodeDescriptor.java

@@ -229,7 +229,7 @@ public class DatanodeDescriptor extends DatanodeInfo {
   /**
    * Iterates over the list of blocks belonging to the datanode.
    */
-  static private class BlockIterator implements Iterator<Block> {
+  static private class BlockIterator implements Iterator<BlockInfo> {
     private BlockInfo current;
     private DatanodeDescriptor node;
       
@@ -253,7 +253,7 @@ public class DatanodeDescriptor extends DatanodeInfo {
     }
   }
 
-  Iterator<Block> getBlockIterator() {
+  Iterator<BlockInfo> getBlockIterator() {
     return new BlockIterator(this.blockList, this);
   }
   
@@ -402,7 +402,7 @@ public class DatanodeDescriptor extends DatanodeInfo {
     }
     // collect blocks that have not been reported
     // all of them are next to the delimiter
-    Iterator<Block> it = new BlockIterator(delimiter.getNext(0), this);
+    Iterator<? extends Block> it = new BlockIterator(delimiter.getNext(0),this);
     while(it.hasNext())
       toRemove.add(it.next());
     this.removeBlock(delimiter);

+ 4 - 3
src/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java

@@ -544,7 +544,7 @@ public class FSNamesystem implements FSConstants, FSNamesystemMBean {
     if(numBlocks == 0) {
       return new BlocksWithLocations(new BlockWithLocations[0]);
     }
-    Iterator<Block> iter = node.getBlockIterator();
+    Iterator<BlockInfo> iter = node.getBlockIterator();
     int startBlock = r.nextInt(numBlocks); // starting from a random block
     // skip blocks
     for(int i=0; i<startBlock; i++) {
@@ -2157,7 +2157,8 @@ public class FSNamesystem implements FSConstants, FSNamesystemMBean {
       }
     }
 
-    for (Iterator<Block> it = nodeInfo.getBlockIterator(); it.hasNext();) {
+    Iterator<? extends Block> it = nodeInfo.getBlockIterator();
+    while(it.hasNext()) {
       blockManager.removeStoredBlock(it.next(), nodeInfo);
     }
     unprotectedRemoveDatanode(nodeInfo);
@@ -2657,7 +2658,7 @@ public class FSNamesystem implements FSConstants, FSNamesystemMBean {
       //
       // all the blocks that reside on this node have to be 
       // replicated.
-      Iterator<Block> decommissionBlocks = node.getBlockIterator();
+      Iterator<? extends Block> decommissionBlocks = node.getBlockIterator();
       while(decommissionBlocks.hasNext()) {
         Block block = decommissionBlocks.next();
         blockManager.updateNeededReplications(block, -1, 0);