Skip to content

Commit 60433bf

Browse files
author
Kevin Wikant
committed
HDFS-16664. Use correct GenerationStamp when invalidating corrupt block replicas rev4
1 parent 637b3b2 commit 60433bf

File tree

3 files changed

+21
-12
lines changed

3 files changed

+21
-12
lines changed

hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/CorruptReplicasMap.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,21 @@ public enum Reason {
5555
}
5656

5757
private static class CorruptBlockReplica {
58-
public final Reason reason;
59-
public final long generationStamp;
58+
private final Reason reason;
59+
private final long generationStamp;
6060

6161
CorruptBlockReplica(Reason reason, long generationStamp) {
6262
this.reason = reason;
6363
this.generationStamp = generationStamp;
6464
}
65+
66+
public Reason getReason() {
67+
return reason;
68+
}
69+
70+
public long getGenerationStamp() {
71+
return generationStamp;
72+
}
6573
}
6674

6775
private final Map<Block, Map<DatanodeDescriptor, CorruptBlockReplica>> corruptReplicasMap =
@@ -144,7 +152,7 @@ boolean removeFromCorruptReplicasMap(
144152
// if reasons can be compared but don't match, return false.
145153
CorruptBlockReplica corruptReplica = datanodes.get(datanode);
146154
if (reason != Reason.ANY && corruptReplica != null &&
147-
reason != corruptReplica.reason) {
155+
reason != corruptReplica.getReason()) {
148156
return false;
149157
}
150158

@@ -268,7 +276,7 @@ Long getCorruptReplicaGenerationStamp(Block block, DatanodeDescriptor node) {
268276
Long generationStamp = null;
269277
if(corruptReplicasMap.containsKey(block)) {
270278
if (corruptReplicasMap.get(block).containsKey(node)) {
271-
generationStamp = corruptReplicasMap.get(block).get(node).generationStamp;
279+
generationStamp = corruptReplicasMap.get(block).get(node).getGenerationStamp();
272280
}
273281
}
274282
return generationStamp;
@@ -285,7 +293,7 @@ String getCorruptReason(Block block, DatanodeDescriptor node) {
285293
Reason reason = null;
286294
if(corruptReplicasMap.containsKey(block)) {
287295
if (corruptReplicasMap.get(block).containsKey(node)) {
288-
reason = corruptReplicasMap.get(block).get(node).reason;
296+
reason = corruptReplicasMap.get(block).get(node).getReason();
289297
}
290298
}
291299
if (reason != null) {

hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDecommission.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1915,19 +1915,20 @@ private void createClusterWithDeadNodesDecommissionInProgress(final int numLiveN
19151915
public void testDeleteCorruptReplicaForUnderReplicatedBlock() throws Exception {
19161916
testDeleteCorruptReplicaForUnderReplicatedBlockInternal();
19171917
}
1918-
1918+
19191919
/*
19201920
Same test as testDeleteCorruptReplicaForUnderReplicatedBlock except
19211921
"dfs.namenode.corrupt.block.delete.immediately.enabled = false" such that the block invalidation
19221922
gets postponed.
19231923
*/
19241924
@Test(timeout = 60000)
1925-
public void testDeleteCorruptReplicaForUnderReplicatedBlockWithInvalidationPostponed() throws Exception {
1925+
public void testDeleteCorruptReplicaForUnderReplicatedBlockWithInvalidationPostponed()
1926+
throws Exception {
19261927
getConf().setBoolean(DFSConfigKeys.DFS_NAMENODE_CORRUPT_BLOCK_DELETE_IMMEDIATELY_ENABLED,
19271928
false);
19281929
testDeleteCorruptReplicaForUnderReplicatedBlockInternal();
19291930
}
1930-
1931+
19311932
public void testDeleteCorruptReplicaForUnderReplicatedBlockInternal() throws Exception {
19321933
// Constants
19331934
final Path file = new Path("/test-file");

hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestCorruptReplicaInfo.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -185,15 +185,15 @@ public void testCorruptReplicaInfo()
185185
crm.getCorruptBlockIdsForTesting(bim, BlockType.STRIPED,
186186
10, getStripedBlock(7).getBlockId())));
187187
}
188-
188+
189189
@Test
190190
public void testGetCorruptReplicaGenerationStamp() {
191191
final CorruptReplicasMap crm = new CorruptReplicasMap();
192192
final DatanodeDescriptor dn1 = DFSTestUtil.getLocalDatanodeDescriptor();
193193
final DatanodeDescriptor dn2 = DFSTestUtil.getLocalDatanodeDescriptor();
194194
final long len = 1000L;
195195
short replFactor = 2;
196-
196+
197197
// Create block replicas with different GenStamps
198198
final Block blk1v1 = new Block(1L, len, 1L);
199199
final Block blk1v2 = new Block(1L, len, 2L);
@@ -208,12 +208,12 @@ public void testGetCorruptReplicaGenerationStamp() {
208208
assertEquals(Long.valueOf(2L), crm.getCorruptReplicaGenerationStamp(blk1v1, dn2));
209209
assertEquals(Long.valueOf(1L), crm.getCorruptReplicaGenerationStamp(blk1v2, dn1));
210210
assertEquals(Long.valueOf(2L), crm.getCorruptReplicaGenerationStamp(blk1v2, dn2));
211-
211+
212212
// Validate null returned for non-existent block replica
213213
assertEquals(Long.valueOf(100L), crm.getCorruptReplicaGenerationStamp(blk2, dn1));
214214
assertNull(crm.getCorruptReplicaGenerationStamp(blk2, dn2));
215215
}
216-
216+
217217
private static void addToCorruptReplicasMap(CorruptReplicasMap crm,
218218
BlockInfo blk, DatanodeDescriptor dn) {
219219
crm.addToCorruptReplicasMap(blk, dn, "TEST", Reason.NONE, blk.isStriped());

0 commit comments

Comments
 (0)