HDFS-13693. Remove unnecessary search in INodeDirectory.addChild during image loading. Contributed by Lisheng Sun.

(cherry picked from commit 377f95bbe8)
(cherry picked from commit e3f54a7babf942efbe879aabef65a5b6df57fb65)
This commit is contained in:
Ayush Saxena 2019-07-23 08:37:55 +05:30 committed by Wei-Chiu Chuang
parent c48f2730b4
commit 8ce5015e94
2 changed files with 19 additions and 1 deletions

View File

@ -268,7 +268,7 @@ public final class FSImageFormatPBINode {
+ "name before upgrading to this release."); + "name before upgrading to this release.");
} }
// NOTE: This does not update space counts for parents // NOTE: This does not update space counts for parents
if (!parent.addChild(child)) { if (!parent.addChildAtLoading(child)) {
return; return;
} }
dir.cacheName(child); dir.cacheName(child);
@ -550,6 +550,8 @@ public final class FSImageFormatPBINode {
++numImageErrors; ++numImageErrors;
} }
if (!inode.isReference()) { if (!inode.isReference()) {
// Serialization must ensure that children are in order, related
// to HDFS-13693
b.addChildren(inode.getId()); b.addChildren(inode.getId());
} else { } else {
refList.add(inode.asReference()); refList.add(inode.asReference());

View File

@ -572,6 +572,22 @@ public class INodeDirectory extends INodeWithAdditionalFields
return true; return true;
} }
/**
* During image loading, the search is unnecessary since the insert position
* should always be at the end of the map given the sequence they are
* serialized on disk.
*/
public boolean addChildAtLoading(INode node) {
int pos;
if (!node.isReference()) {
pos = (children == null) ? (-1) : (-children.size() - 1);
addChild(node, pos);
return true;
} else {
return addChild(node);
}
}
/** /**
* Add the node to the children list at the given insertion point. * Add the node to the children list at the given insertion point.
* The basic add method which actually calls children.add(..). * The basic add method which actually calls children.add(..).