Repository: hadoop
Updated Branches:
refs/heads/branch-2.8 54c974326 -> b76f6e5de
HDFS-10342. BlockManager#createLocatedBlocks should not check corrupt replicas
if none are corrupt. Contributed by Kuhu Shukla.
(cherry picked from commit b10c936020e2616609dcb3b2126e8c34328c10ca)
Conflicts:
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java
(cherry picked from commit 65a41696b2a22834f4592bcb49e40fffd2dbb96e)
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/b76f6e5d
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/b76f6e5d
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/b76f6e5d
Branch: refs/heads/branch-2.8
Commit: b76f6e5de3c400fec20c42b311c4d10f2a3656d2
Parents: 54c9743
Author: Kihwal Lee <[email protected]>
Authored: Tue Aug 16 09:39:33 2016 -0500
Committer: Kihwal Lee <[email protected]>
Committed: Tue Aug 16 09:39:33 2016 -0500
----------------------------------------------------------------------
.../server/blockmanagement/BlockManager.java | 20 +++++++++++++++-----
.../blockmanagement/TestBlockManager.java | 19 +++++++++++++++++++
2 files changed, 34 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/b76f6e5d/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java
----------------------------------------------------------------------
diff --git
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java
index e2389b1..893945f 100644
---
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java
+++
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java
@@ -959,12 +959,18 @@ public class BlockManager implements BlockStatsMXBean {
DatanodeStorageInfo[] machines = new DatanodeStorageInfo[numMachines];
int j = 0;
if (numMachines > 0) {
+ final boolean noCorrupt = (numCorruptReplicas == 0);
for(DatanodeStorageInfo storage : blocksMap.getStorages(blk)) {
- final DatanodeDescriptor d = storage.getDatanodeDescriptor();
- final boolean replicaCorrupt = corruptReplicas.isReplicaCorrupt(blk,
d);
- if ((isCorrupt || (!replicaCorrupt)) &&
- storage.getState() != State.FAILED) {
- machines[j++] = storage;
+ if (storage.getState() != State.FAILED) {
+ if (noCorrupt) {
+ machines[j++] = storage;
+ } else {
+ final DatanodeDescriptor d = storage.getDatanodeDescriptor();
+ final boolean replicaCorrupt = isReplicaCorrupt(blk, d);
+ if (isCorrupt || !replicaCorrupt) {
+ machines[j++] = storage;
+ }
+ }
}
}
}
@@ -4042,4 +4048,8 @@ public class BlockManager implements BlockStatsMXBean {
}
}
}
+
+ boolean isReplicaCorrupt(BlockInfo blk, DatanodeDescriptor d) {
+ return corruptReplicas.isReplicaCorrupt(blk, d);
+ }
}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/b76f6e5d/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockManager.java
----------------------------------------------------------------------
diff --git
a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockManager.java
b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockManager.java
index e9d4018..5c6496c 100644
---
a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockManager.java
+++
b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockManager.java
@@ -1201,4 +1201,23 @@ public class TestBlockManager {
file.delete();
}
}
+
+ @Test
+ public void testIsReplicaCorruptCall() throws Exception {
+ BlockManager spyBM = spy(bm);
+ List<DatanodeStorageInfo> origStorages = getStorages(0, 1, 3);
+ List<DatanodeDescriptor> origNodes = getNodes(origStorages);
+ BlockInfo blockInfo = addBlockOnNodes(0, origNodes);
+ spyBM.createLocatedBlocks(new BlockInfo[]{blockInfo}, 3L, false, 0L, 3L,
+ false, false, null);
+ verify(spyBM, Mockito.atLeast(0)).
+ isReplicaCorrupt(Mockito.any(BlockInfo.class),
+ Mockito.any(DatanodeDescriptor.class));
+ addCorruptBlockOnNodes(0, origNodes);
+ spyBM.createLocatedBlocks(new BlockInfo[]{blockInfo}, 3L, false, 0L, 3L,
+ false, false, null);
+ verify(spyBM, Mockito.atLeast(1)).
+ isReplicaCorrupt(Mockito.any(BlockInfo.class),
+ Mockito.any(DatanodeDescriptor.class));
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]