HDFS-7444. convertToBlockUnderConstruction should preserve BlockCollection. Contributed by Haohui Mai.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/f5b16311 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/f5b16311 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/f5b16311 Branch: refs/heads/HDFS-EC Commit: f5b163117986886eaba8a0cc255ec741dd14c4c6 Parents: 058af60 Author: Haohui Mai <whe...@apache.org> Authored: Wed Nov 26 10:37:01 2014 -0800 Committer: Haohui Mai <whe...@apache.org> Committed: Wed Nov 26 10:37:01 2014 -0800 ---------------------------------------------------------------------- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 +++ .../hadoop/hdfs/server/blockmanagement/BlockInfo.java | 5 ++++- .../org/apache/hadoop/hdfs/server/namenode/INodeFile.java | 1 - .../hdfs/server/blockmanagement/TestReplicationPolicy.java | 9 +++++++++ 4 files changed, 16 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/f5b16311/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 12219a0..936aa35 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -498,6 +498,9 @@ Release 2.7.0 - UNRELEASED HDFS-7097. Allow block reports to be processed during checkpointing on standby name node. (kihwal via wang) + HDFS-7444. convertToBlockUnderConstruction should preserve BlockCollection. + (wheat9) + Release 2.6.1 - UNRELEASED INCOMPATIBLE CHANGES http://git-wip-us.apache.org/repos/asf/hadoop/blob/f5b16311/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfo.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfo.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfo.java index f547b1a..5d0b473 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfo.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfo.java @@ -366,13 +366,16 @@ public class BlockInfo extends Block implements LightWeightGSet.LinkedElement { public BlockInfoUnderConstruction convertToBlockUnderConstruction( BlockUCState s, DatanodeStorageInfo[] targets) { if(isComplete()) { - return new BlockInfoUnderConstruction(this, + BlockInfoUnderConstruction ucBlock = new BlockInfoUnderConstruction(this, getBlockCollection().getBlockReplication(), s, targets); + ucBlock.setBlockCollection(getBlockCollection()); + return ucBlock; } // the block is already under construction BlockInfoUnderConstruction ucBlock = (BlockInfoUnderConstruction)this; ucBlock.setBlockUCState(s); ucBlock.setExpectedLocations(targets); + ucBlock.setBlockCollection(getBlockCollection()); return ucBlock; } http://git-wip-us.apache.org/repos/asf/hadoop/blob/f5b16311/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeFile.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeFile.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeFile.java index dde36c3..ccf3df1 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeFile.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeFile.java @@ -234,7 +234,6 @@ public class INodeFile extends INodeWithAdditionalFields BlockInfoUnderConstruction ucBlock = lastBlock.convertToBlockUnderConstruction( BlockUCState.UNDER_CONSTRUCTION, locations); - ucBlock.setBlockCollection(this); setBlock(numBlocks() - 1, ucBlock); return ucBlock; } http://git-wip-us.apache.org/repos/asf/hadoop/blob/f5b16311/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestReplicationPolicy.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestReplicationPolicy.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestReplicationPolicy.java index ce2328c..ddbf7fc 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestReplicationPolicy.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestReplicationPolicy.java @@ -1226,6 +1226,15 @@ public class TestReplicationPolicy { final BlockInfoUnderConstruction ucBlock = info.convertToBlockUnderConstruction(BlockUCState.UNDER_CONSTRUCTION, storageAry); + DatanodeStorageInfo storage = mock(DatanodeStorageInfo.class); + DatanodeDescriptor dn = mock(DatanodeDescriptor.class); + when(dn.isDecommissioned()).thenReturn(true); + when(storage.getState()).thenReturn(DatanodeStorage.State.NORMAL); + when(storage.getDatanodeDescriptor()).thenReturn(dn); + when(storage.removeBlock(any(BlockInfo.class))).thenReturn(true); + when(storage.addBlock(any(BlockInfo.class))).thenReturn(true); + ucBlock.addStorage(storage); + when(mbc.setLastBlock((BlockInfo) any(), (DatanodeStorageInfo[]) any())) .thenReturn(ucBlock);