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

This commit is contained in:
Ayush Saxena 2019-07-23 08:37:55 +05:30
parent ee87e9a42e
commit 377f95bbe8
2 changed files with 19 additions and 1 deletions

View File

@ -269,7 +269,7 @@ private void addToParent(INodeDirectory parent, INode child) {
+ "name before upgrading to this release.");
}
// NOTE: This does not update space counts for parents
if (!parent.addChild(child)) {
if (!parent.addChildAtLoading(child)) {
return;
}
dir.cacheName(child);
@ -551,6 +551,8 @@ void serializeINodeDirectorySection(OutputStream out) throws IOException {
++numImageErrors;
}
if (!inode.isReference()) {
// Serialization must ensure that children are in order, related
// to HDFS-13693
b.addChildren(inode.getId());
} else {
refList.add(inode.asReference());

View File

@ -572,6 +572,22 @@ public boolean addChild(INode node) {
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.
* The basic add method which actually calls children.add(..).