HDFS-8217. During block recovery for truncate Log new Block Id in case of copy-on-truncate is true. (Contributed by Vinayakumar B)

This commit is contained in:
Vinayakumar B 2015-04-24 12:16:41 +05:30
parent a8898445dc
commit 262c1bc339
3 changed files with 13 additions and 6 deletions

View File

@ -545,6 +545,9 @@ Release 2.8.0 - UNRELEASED
HDFS-7993. Provide each Replica details in fsck (J.Andreina via vinayakumarb)
HDFS-8217. During block recovery for truncate Log new Block Id in case of
copy-on-truncate is true. (vinayakumarb)
Release 2.7.1 - UNRELEASED
INCOMPATIBLE CHANGES

View File

@ -2840,7 +2840,9 @@ public class DataNode extends ReconfigurableBase
LOG.info(who + " calls recoverBlock(" + block
+ ", targets=[" + Joiner.on(", ").join(targets) + "]"
+ ", newGenerationStamp=" + rb.getNewGenerationStamp() + ")");
+ ((rb.getNewBlock() == null) ? ", newGenerationStamp="
+ rb.getNewGenerationStamp() : ", newBlock=" + rb.getNewBlock())
+ ")");
}
@Override // ClientDataNodeProtocol

View File

@ -4229,6 +4229,8 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean,
String src = "";
waitForLoadingFSImage();
writeLock();
boolean copyTruncate = false;
BlockInfoContiguousUnderConstruction truncatedBlock = null;
try {
checkOperation(OperationCategory.WRITE);
// If a DN tries to commit to the standby, the recovery will
@ -4285,11 +4287,10 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean,
return;
}
BlockInfoContiguousUnderConstruction truncatedBlock =
(BlockInfoContiguousUnderConstruction) iFile.getLastBlock();
truncatedBlock = (BlockInfoContiguousUnderConstruction) iFile
.getLastBlock();
long recoveryId = truncatedBlock.getBlockRecoveryId();
boolean copyTruncate =
truncatedBlock.getBlockId() != storedBlock.getBlockId();
copyTruncate = truncatedBlock.getBlockId() != storedBlock.getBlockId();
if(recoveryId != newgenerationstamp) {
throw new IOException("The recovery id " + newgenerationstamp
+ " does not match current recovery id "
@ -4382,7 +4383,8 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean,
if (closeFile) {
LOG.info("commitBlockSynchronization(oldBlock=" + oldBlock
+ ", file=" + src
+ ", newgenerationstamp=" + newgenerationstamp
+ (copyTruncate ? ", newBlock=" + truncatedBlock
: ", newgenerationstamp=" + newgenerationstamp)
+ ", newlength=" + newlength
+ ", newtargets=" + Arrays.asList(newtargets) + ") successful");
} else {