Repository: hadoop
Updated Branches:
  refs/heads/HDFS-6581 3f9255f21 -> feda4733a (forced update)


HDFS-7143. Fix findbugs warnings in HDFS-6581 branch. (Contributed by Tsz Wo 
Nicholas Sze)


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/feda4733
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/feda4733
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/feda4733

Branch: refs/heads/HDFS-6581
Commit: feda4733a8279485fc0ff1271f9c22bc44f333f6
Parents: b1000fb
Author: arp <a...@apache.org>
Authored: Wed Sep 24 20:13:30 2014 -0700
Committer: arp <a...@apache.org>
Committed: Wed Sep 24 21:06:56 2014 -0700

----------------------------------------------------------------------
 .../hadoop-hdfs/CHANGES-HDFS-6581.txt           |  2 +
 .../datanode/fsdataset/impl/BlockPoolSlice.java | 50 +++++++++++++++-----
 2 files changed, 40 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/feda4733/hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-6581.txt
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-6581.txt 
b/hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-6581.txt
index e046421..6eb8cec 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-6581.txt
+++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-6581.txt
@@ -71,4 +71,6 @@
     HDFS-6990. Add unit test for evict/delete RAM_DISK block with open
     handle. (Xiaoyu Yao via Arpit Agarwal)
 
+    HDFS-7143. Fix findbugs warnings in HDFS-6581 branch. (szetszwo via
+    Arpit Agarwal)
 

http://git-wip-us.apache.org/repos/asf/hadoop/blob/feda4733/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/BlockPoolSlice.java
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/BlockPoolSlice.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/BlockPoolSlice.java
index 2ee16f6..3eeb3ef 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/BlockPoolSlice.java
+++ 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/BlockPoolSlice.java
@@ -29,6 +29,8 @@ import java.io.RandomAccessFile;
 import java.util.Scanner;
 
 import org.apache.commons.io.FileUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.DU;
 import org.apache.hadoop.fs.FileUtil;
@@ -43,6 +45,7 @@ import org.apache.hadoop.hdfs.server.datanode.ReplicaInfo;
 import org.apache.hadoop.hdfs.server.datanode.ReplicaBeingWritten;
 import org.apache.hadoop.hdfs.server.datanode.ReplicaWaitingToBeRecovered;
 import org.apache.hadoop.io.IOUtils;
+import org.apache.hadoop.io.nativeio.NativeIO;
 import org.apache.hadoop.util.DataChecksum;
 import org.apache.hadoop.util.DiskChecker;
 import org.apache.hadoop.util.DiskChecker.DiskErrorException;
@@ -57,6 +60,8 @@ import org.apache.hadoop.util.Time;
  * This class is synchronized by {@link FsVolumeImpl}.
  */
 class BlockPoolSlice {
+  static final Log LOG = LogFactory.getLog(BlockPoolSlice.class);
+
   private final String bpid;
   private final FsVolumeImpl volume; // volume to which this BlockPool belongs 
to
   private final File currentDir; // StorageDirectory/current/bpid/current
@@ -369,22 +374,36 @@ class BlockPoolSlice {
         File targetDir = DatanodeUtil.idToBlockDir(finalizedDir, blockId);
 
         if (blockFile.exists()) {
-          File targetBlockFile = new File(targetDir, blockFile.getName());
-          File targetMetaFile = new File(targetDir, metaFile.getName());
 
           if (!targetDir.exists() && !targetDir.mkdirs()) {
-            FsDatasetImpl.LOG.warn("Failed to move " + blockFile + " to " + 
targetDir);
+            LOG.warn("Failed to mkdirs " + targetDir);
+            continue;
+          }
+
+          final File targetMetaFile = new File(targetDir, metaFile.getName());
+          try {
+            NativeIO.renameTo(metaFile, targetMetaFile);
+          } catch (IOException e) {
+            LOG.warn("Failed to move meta file from "
+                + metaFile + " to " + targetMetaFile, e);
             continue;
+
           }
 
-          metaFile.renameTo(targetMetaFile);
-          blockFile.renameTo(targetBlockFile);
+          final File targetBlockFile = new File(targetDir, 
blockFile.getName());
+          try {
+            NativeIO.renameTo(blockFile, targetBlockFile);
+          } catch (IOException e) {
+            LOG.warn("Failed to move block file from "
+                + blockFile + " to " + targetBlockFile, e);
+            continue;
+          }
 
           if (targetBlockFile.exists() && targetMetaFile.exists()) {
             ++numRecovered;
           } else {
             // Failure should be rare.
-            FsDatasetImpl.LOG.warn("Failed to move " + blockFile + " to " + 
targetDir);
+            LOG.warn("Failed to move " + blockFile + " to " + targetDir);
           }
         }
       }
@@ -538,16 +557,23 @@ class BlockPoolSlice {
 
     replicaToDelete = (replicaToKeep == replica1) ? replica2 : replica1;
 
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("resolveDuplicateReplicas decide to keep " + replicaToKeep
+          + ".  Will try to delete " + replicaToDelete);
+    }
+
     // Update volumeMap.
     volumeMap.add(bpid, replicaToKeep);
 
     // Delete the files on disk. Failure here is okay.
-    replicaToDelete.getBlockFile().delete();
-    replicaToDelete.getMetaFile().delete();
-
-    FsDatasetImpl.LOG.info(
-        "resolveDuplicateReplicas keeping " + replicaToKeep.getBlockFile() +
-        ", deleting " + replicaToDelete.getBlockFile());
+    final File blockFile = replicaToDelete.getBlockFile();
+    if (!blockFile.delete()) {
+      LOG.warn("Failed to delete block file " + blockFile);
+    }
+    final File metaFile = replicaToDelete.getMetaFile();
+    if (!metaFile.delete()) {
+      LOG.warn("Failed to delete meta file " + metaFile);
+    }
 
     return replicaToKeep;
   }

Reply via email to