HDFS-8273. FSNamesystem#Delete() should not call logSync() when holding the lock. Contributed by Haohui Mai.
This commit is contained in:
parent
30d0f10458
commit
4b9147ef8c
|
@ -50,6 +50,9 @@ Release 2.7.1 - UNRELEASED
|
|||
HDFS-8070. Pre-HDFS-7915 DFSClient cannot use short circuit on
|
||||
post-HDFS-7915 DataNode (cmccabe)
|
||||
|
||||
HDFS-8273. FSNamesystem#Delete() should not call logSync() when holding the
|
||||
lock. (wheat9)
|
||||
|
||||
Release 2.7.0 - 2015-04-20
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
|
|
@ -158,7 +158,6 @@ class FSDirDeleteOp {
|
|||
incrDeletedFileCount(filesRemoved);
|
||||
|
||||
fsn.removeLeasesAndINodes(src, removedINodes, true);
|
||||
fsd.getEditLog().logSync();
|
||||
|
||||
if (NameNode.stateChangeLog.isDebugEnabled()) {
|
||||
NameNode.stateChangeLog.debug("DIR* Namesystem.delete: "
|
||||
|
|
|
@ -3713,6 +3713,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean,
|
|||
} finally {
|
||||
writeUnlock();
|
||||
}
|
||||
getEditLog().logSync();
|
||||
if (toRemovedBlocks != null) {
|
||||
removeBlocks(toRemovedBlocks); // Incremental deletion of blocks
|
||||
}
|
||||
|
@ -4717,22 +4718,21 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean,
|
|||
* blocks and unlink them from the namespace.
|
||||
*/
|
||||
private void clearCorruptLazyPersistFiles()
|
||||
throws SafeModeException, AccessControlException,
|
||||
UnresolvedLinkException, IOException {
|
||||
throws IOException {
|
||||
|
||||
BlockStoragePolicy lpPolicy = blockManager.getStoragePolicy("LAZY_PERSIST");
|
||||
|
||||
List<BlockCollection> filesToDelete = new ArrayList<BlockCollection>();
|
||||
|
||||
List<BlockCollection> filesToDelete = new ArrayList<>();
|
||||
boolean changed = false;
|
||||
writeLock();
|
||||
|
||||
try {
|
||||
final Iterator<Block> it = blockManager.getCorruptReplicaBlockIterator();
|
||||
|
||||
while (it.hasNext()) {
|
||||
Block b = it.next();
|
||||
BlockInfoContiguous blockInfo = blockManager.getStoredBlock(b);
|
||||
if (blockInfo.getBlockCollection().getStoragePolicyID() == lpPolicy.getId()) {
|
||||
if (blockInfo.getBlockCollection().getStoragePolicyID()
|
||||
== lpPolicy.getId()) {
|
||||
filesToDelete.add(blockInfo.getBlockCollection());
|
||||
}
|
||||
}
|
||||
|
@ -4740,9 +4740,10 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean,
|
|||
for (BlockCollection bc : filesToDelete) {
|
||||
LOG.warn("Removing lazyPersist file " + bc.getName() + " with no replicas.");
|
||||
BlocksMapUpdateInfo toRemoveBlocks =
|
||||
FSDirDeleteOp.deleteInternal(
|
||||
FSNamesystem.this, bc.getName(),
|
||||
INodesInPath.fromINode((INodeFile) bc), false);
|
||||
FSDirDeleteOp.deleteInternal(
|
||||
FSNamesystem.this, bc.getName(),
|
||||
INodesInPath.fromINode((INodeFile) bc), false);
|
||||
changed |= toRemoveBlocks != null;
|
||||
if (toRemoveBlocks != null) {
|
||||
removeBlocks(toRemoveBlocks); // Incremental deletion of blocks
|
||||
}
|
||||
|
@ -4750,6 +4751,9 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean,
|
|||
} finally {
|
||||
writeUnlock();
|
||||
}
|
||||
if (changed) {
|
||||
getEditLog().logSync();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Reference in New Issue