|
@@ -455,6 +455,11 @@ public class BlockManager implements BlockStatsMXBean {
|
|
* from ENTERING_MAINTENANCE to IN_MAINTENANCE.
|
|
* from ENTERING_MAINTENANCE to IN_MAINTENANCE.
|
|
*/
|
|
*/
|
|
private final short minReplicationToBeInMaintenance;
|
|
private final short minReplicationToBeInMaintenance;
|
|
|
|
+ /**
|
|
|
|
+ * Whether to delete corrupt replica immediately irrespective of other
|
|
|
|
+ * replicas available on stale storages.
|
|
|
|
+ */
|
|
|
|
+ private final boolean deleteCorruptReplicaImmediately;
|
|
|
|
|
|
/** Storages accessible from multiple DNs. */
|
|
/** Storages accessible from multiple DNs. */
|
|
private final ProvidedStorageMap providedStorageMap;
|
|
private final ProvidedStorageMap providedStorageMap;
|
|
@@ -607,6 +612,10 @@ public class BlockManager implements BlockStatsMXBean {
|
|
DFSConfigKeys.DFS_NAMENODE_BLOCKREPORT_QUEUE_SIZE_DEFAULT);
|
|
DFSConfigKeys.DFS_NAMENODE_BLOCKREPORT_QUEUE_SIZE_DEFAULT);
|
|
blockReportThread = new BlockReportProcessingThread(queueSize);
|
|
blockReportThread = new BlockReportProcessingThread(queueSize);
|
|
|
|
|
|
|
|
+ this.deleteCorruptReplicaImmediately =
|
|
|
|
+ conf.getBoolean(DFS_NAMENODE_CORRUPT_BLOCK_DELETE_IMMEDIATELY_ENABLED,
|
|
|
|
+ DFS_NAMENODE_CORRUPT_BLOCK_DELETE_IMMEDIATELY_ENABLED_DEFAULT);
|
|
|
|
+
|
|
LOG.info("defaultReplication = {}", defaultReplication);
|
|
LOG.info("defaultReplication = {}", defaultReplication);
|
|
LOG.info("maxReplication = {}", maxReplication);
|
|
LOG.info("maxReplication = {}", maxReplication);
|
|
LOG.info("minReplication = {}", minReplication);
|
|
LOG.info("minReplication = {}", minReplication);
|
|
@@ -1864,7 +1873,7 @@ public class BlockManager implements BlockStatsMXBean {
|
|
}
|
|
}
|
|
|
|
|
|
// Check how many copies we have of the block
|
|
// Check how many copies we have of the block
|
|
- if (nr.replicasOnStaleNodes() > 0) {
|
|
|
|
|
|
+ if (nr.replicasOnStaleNodes() > 0 && !deleteCorruptReplicaImmediately) {
|
|
blockLog.debug("BLOCK* invalidateBlocks: postponing " +
|
|
blockLog.debug("BLOCK* invalidateBlocks: postponing " +
|
|
"invalidation of {} on {} because {} replica(s) are located on " +
|
|
"invalidation of {} on {} because {} replica(s) are located on " +
|
|
"nodes with potentially out-of-date block reports", b, dn,
|
|
"nodes with potentially out-of-date block reports", b, dn,
|