HDFS-17177. ErasureCodingWork should ignore the deleted block while reconstructing blocks (#6024)
This commit is contained in:
parent
c5e9510b54
commit
3bd6a751ed
@ -62,10 +62,18 @@ void chooseTargets(BlockPlacementPolicy blockplacement,
|
|||||||
BlockStoragePolicySuite storagePolicySuite,
|
BlockStoragePolicySuite storagePolicySuite,
|
||||||
Set<Node> excludedNodes) {
|
Set<Node> excludedNodes) {
|
||||||
// TODO: new placement policy for EC considering multiple writers
|
// TODO: new placement policy for EC considering multiple writers
|
||||||
DatanodeStorageInfo[] chosenTargets = blockplacement.chooseTarget(
|
DatanodeStorageInfo[] chosenTargets = null;
|
||||||
|
// HDFS-14720. If the block is deleted, the block size will become
|
||||||
|
// BlockCommand.NO_ACK (LONG.MAX_VALUE) . This kind of block we don't need
|
||||||
|
// to send for replication or reconstruction
|
||||||
|
if (!getBlock().isDeleted()) {
|
||||||
|
chosenTargets = blockplacement.chooseTarget(
|
||||||
getSrcPath(), getAdditionalReplRequired(), getSrcNodes()[0],
|
getSrcPath(), getAdditionalReplRequired(), getSrcNodes()[0],
|
||||||
getLiveReplicaStorages(), false, excludedNodes, getBlockSize(),
|
getLiveReplicaStorages(), false, excludedNodes, getBlockSize(),
|
||||||
storagePolicySuite.getPolicy(getStoragePolicyID()), null);
|
storagePolicySuite.getPolicy(getStoragePolicyID()), null);
|
||||||
|
} else {
|
||||||
|
LOG.warn("ErasureCodingWork could not need choose targets for {}", getBlock());
|
||||||
|
}
|
||||||
setTargets(chosenTargets);
|
setTargets(chosenTargets);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.hadoop.hdfs.server.blockmanagement;
|
package org.apache.hadoop.hdfs.server.blockmanagement;
|
||||||
|
|
||||||
import org.apache.hadoop.hdfs.server.protocol.BlockCommand;
|
|
||||||
import org.apache.hadoop.net.Node;
|
import org.apache.hadoop.net.Node;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -47,11 +46,13 @@ assert getSrcNodes().length > 0
|
|||||||
// HDFS-14720 If the block is deleted, the block size will become
|
// HDFS-14720 If the block is deleted, the block size will become
|
||||||
// BlockCommand.NO_ACK (LONG.MAX_VALUE) . This kind of block we don't need
|
// BlockCommand.NO_ACK (LONG.MAX_VALUE) . This kind of block we don't need
|
||||||
// to send for replication or reconstruction
|
// to send for replication or reconstruction
|
||||||
if (getBlock().getNumBytes() != BlockCommand.NO_ACK) {
|
if (!getBlock().isDeleted()) {
|
||||||
chosenTargets = blockplacement.chooseTarget(getSrcPath(),
|
chosenTargets = blockplacement.chooseTarget(getSrcPath(),
|
||||||
getAdditionalReplRequired(), getSrcNodes()[0],
|
getAdditionalReplRequired(), getSrcNodes()[0],
|
||||||
getLiveReplicaStorages(), false, excludedNodes, getBlockSize(),
|
getLiveReplicaStorages(), false, excludedNodes, getBlockSize(),
|
||||||
storagePolicySuite.getPolicy(getStoragePolicyID()), null);
|
storagePolicySuite.getPolicy(getStoragePolicyID()), null);
|
||||||
|
} else {
|
||||||
|
LOG.warn("ReplicationWork could not need choose targets for {}", getBlock());
|
||||||
}
|
}
|
||||||
setTargets(chosenTargets);
|
setTargets(chosenTargets);
|
||||||
} finally {
|
} finally {
|
||||||
|
Loading…
Reference in New Issue
Block a user