HDFS-15227. NPE if the last block changes from COMMITTED to COMPLETE during FSCK. Contributed by Ayush Saxena.
This commit is contained in:
parent
b74e47e31a
commit
62c8015683
@ -38,6 +38,7 @@
|
|||||||
import java.util.concurrent.ThreadLocalRandom;
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
|
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
|
import org.apache.hadoop.hdfs.server.blockmanagement.BlockUnderConstructionFeature;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.apache.hadoop.classification.InterfaceAudience;
|
import org.apache.hadoop.classification.InterfaceAudience;
|
||||||
@ -871,18 +872,22 @@ private void collectBlocksSummary(String parent, HdfsFileStatus file,
|
|||||||
String blkName = block.toString();
|
String blkName = block.toString();
|
||||||
BlockInfo storedBlock = blockManager.getStoredBlock(
|
BlockInfo storedBlock = blockManager.getStoredBlock(
|
||||||
block.getLocalBlock());
|
block.getLocalBlock());
|
||||||
DatanodeStorageInfo[] storages = storedBlock
|
BlockUnderConstructionFeature uc =
|
||||||
.getUnderConstructionFeature().getExpectedStorageLocations();
|
storedBlock.getUnderConstructionFeature();
|
||||||
report.append('\n')
|
if (uc != null) {
|
||||||
.append("Under Construction Block:\n")
|
// BlockUnderConstructionFeature can be null, in case the block was
|
||||||
.append(blockNumber).append(". ").append(blkName)
|
// in committed state, and the IBR came just after the check.
|
||||||
.append(" len=").append(block.getNumBytes())
|
DatanodeStorageInfo[] storages = uc.getExpectedStorageLocations();
|
||||||
|
report.append('\n').append("Under Construction Block:\n")
|
||||||
|
.append(blockNumber).append(". ").append(blkName).append(" len=")
|
||||||
|
.append(block.getNumBytes())
|
||||||
.append(" Expected_repl=" + storages.length);
|
.append(" Expected_repl=" + storages.length);
|
||||||
String info = getReplicaInfo(storedBlock);
|
String info = getReplicaInfo(storedBlock);
|
||||||
if (!info.isEmpty()) {
|
if (!info.isEmpty()) {
|
||||||
report.append(" ").append(info);
|
report.append(" ").append(info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// count corrupt file & move or delete if necessary
|
// count corrupt file & move or delete if necessary
|
||||||
if ((missing > 0) || (corrupt > 0)) {
|
if ((missing > 0) || (corrupt > 0)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user