From e7daeea711fd91bca8496b33ab617be23b31dba9 Mon Sep 17 00:00:00 2001 From: Xiao Chen Date: Mon, 19 Sep 2016 21:44:42 -0700 Subject: [PATCH] HDFS-10875. Optimize du -x to cache intermediate result. Contributed by Xiao Chen. (cherry picked from commit e52d6e7a46ceef74dd8d8a3d49c49420e3271365) --- .../hadoop/hdfs/server/namenode/INodeDirectory.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeDirectory.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeDirectory.java index 9a8f9b2c165..24c881556db 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeDirectory.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeDirectory.java @@ -630,14 +630,15 @@ public class INodeDirectory extends INodeWithAdditionalFields ContentSummaryComputationContext summary) { final DirectoryWithSnapshotFeature sf = getDirectoryWithSnapshotFeature(); if (sf != null && snapshotId == Snapshot.CURRENT_STATE_ID) { + final ContentCounts counts = new ContentCounts.Builder().build(); // if the getContentSummary call is against a non-snapshot path, the // computation should include all the deleted files/directories sf.computeContentSummary4Snapshot(summary.getBlockStoragePolicySuite(), - summary.getCounts()); - // Also compute ContentSummary for snapshotCounts (So we can extract it + counts); + summary.getCounts().addContents(counts); + // Also add ContentSummary to snapshotCounts (So we can extract it // later from the ContentSummary of all). - sf.computeContentSummary4Snapshot(summary.getBlockStoragePolicySuite(), - summary.getSnapshotCounts()); + summary.getSnapshotCounts().addContents(counts); } final DirectoryWithQuotaFeature q = getDirectoryWithQuotaFeature(); if (q != null && snapshotId == Snapshot.CURRENT_STATE_ID) {