From 4449677049b7aec0b1869d486cb57550ce3b2f66 Mon Sep 17 00:00:00 2001 From: Vinayakumar B Date: Thu, 21 Jan 2016 19:17:05 +0530 Subject: [PATCH] HDFS-9625. set replication for empty file failed when set storage policy (Contributed by DENG FEI) (cherry picked from commit b7372b7166a13111b98794602ca4c166dfd78d29) (cherry picked from commit 845acfd96c8461ebb412cd1daec51e89ce9f1c18) --- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 +++ .../hdfs/server/namenode/FSDirectory.java | 4 ++++ .../hadoop/hdfs/TestSetrepIncreasing.java | 19 +++++++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 248783d5f1e..39dff2142ef 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -1718,6 +1718,9 @@ Release 2.7.3 - UNRELEASED HDFS-9661. Deadlock in DN.FsDatasetImpl between moveBlockAcrossStorage and createRbw (ade via vinayakumarb) + HDFS-9625. set replication for empty file failed when set storage policy + (DENG FEI via vinayakumarb) + Release 2.7.2 - UNRELEASED INCOMPATIBLE CHANGES diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java index d885e2e9f2d..3e57a6f5abf 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java @@ -811,6 +811,10 @@ public class FSDirectory implements Closeable { long dsDelta, short oldRep, short newRep) { EnumCounters typeSpaceDeltas = new EnumCounters(StorageType.class); + // empty file + if(dsDelta == 0){ + return typeSpaceDeltas; + } // Storage type and its quota are only available when storage policy is set if (storagePolicyID != HdfsConstants.BLOCK_STORAGE_POLICY_ID_UNSPECIFIED) { BlockStoragePolicy storagePolicy = getBlockManager().getStoragePolicy(storagePolicyID); diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestSetrepIncreasing.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestSetrepIncreasing.java index 0af1988a599..a055adca359 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestSetrepIncreasing.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestSetrepIncreasing.java @@ -83,4 +83,23 @@ public class TestSetrepIncreasing { public void testSetrepIncreasingSimulatedStorage() throws IOException { setrep(3, 7, true); } + + @Test + public void testSetRepWithStoragePolicyOnEmptyFile() throws Exception { + Configuration conf = new HdfsConfiguration(); + MiniDFSCluster cluster = + new MiniDFSCluster.Builder(conf).numDataNodes(1).build(); + DistributedFileSystem dfs = cluster.getFileSystem(); + try { + Path d = new Path("/tmp"); + dfs.mkdirs(d); + dfs.setStoragePolicy(d, "HOT"); + Path f = new Path(d, "foo"); + dfs.createNewFile(f); + dfs.setReplication(f, (short) 4); + } finally { + dfs.close(); + cluster.shutdown(); + } + } }