HDFS-9625. set replication for empty file failed when set storage policy (Contributed by DENG FEI)

This commit is contained in:
Vinayakumar B 2016-01-21 19:17:05 +05:30
parent 9eec6cbedc
commit b7372b7166
3 changed files with 26 additions and 0 deletions

View File

@ -2655,6 +2655,9 @@ Release 2.7.3 - UNRELEASED
HDFS-9661. Deadlock in DN.FsDatasetImpl between moveBlockAcrossStorage and HDFS-9661. Deadlock in DN.FsDatasetImpl between moveBlockAcrossStorage and
createRbw (ade via vinayakumarb) 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 Release 2.7.2 - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -811,6 +811,10 @@ public EnumCounters<StorageType> getStorageTypeDeltas(byte storagePolicyID,
long dsDelta, short oldRep, short newRep) { long dsDelta, short oldRep, short newRep) {
EnumCounters<StorageType> typeSpaceDeltas = EnumCounters<StorageType> typeSpaceDeltas =
new EnumCounters<StorageType>(StorageType.class); new EnumCounters<StorageType>(StorageType.class);
// empty file
if(dsDelta == 0){
return typeSpaceDeltas;
}
// Storage type and its quota are only available when storage policy is set // Storage type and its quota are only available when storage policy is set
if (storagePolicyID != HdfsConstants.BLOCK_STORAGE_POLICY_ID_UNSPECIFIED) { if (storagePolicyID != HdfsConstants.BLOCK_STORAGE_POLICY_ID_UNSPECIFIED) {
BlockStoragePolicy storagePolicy = getBlockManager().getStoragePolicy(storagePolicyID); BlockStoragePolicy storagePolicy = getBlockManager().getStoragePolicy(storagePolicyID);

View File

@ -83,4 +83,23 @@ public void testSetrepIncreasing() throws IOException {
public void testSetrepIncreasingSimulatedStorage() throws IOException { public void testSetrepIncreasingSimulatedStorage() throws IOException {
setrep(3, 7, true); 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();
}
}
} }