diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-2802.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-2802.txt index 93d5c95c72c..77d6bedc3a8 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-2802.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-2802.txt @@ -204,3 +204,6 @@ Branch-2802 Snapshot (Unreleased) HDFS-4534. Add INodeReference in order to support rename with snapshots. (szetszwo) + + HDFS-4616. Update the FilesDeleted metric while deleting file/dir in the + current tree. (Jing Zhao via szetszwo) 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 238f35fd73b..b0a4be2bc0c 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 @@ -647,8 +647,10 @@ public class INodeDirectory extends INodeWithAdditionalFields { throws QuotaExceededException { if (prior == null && snapshot == null) { // destroy the whole subtree and collect blocks that should be deleted + Quota.Counts counts = Quota.Counts.newInstance(); + this.computeQuotaUsage(counts, true); destroyAndCollectBlocks(collectedBlocks); - return Quota.Counts.newInstance(); + return counts; } else { // process recursively down the subtree Quota.Counts counts = cleanSubtreeRecursively(snapshot, prior, diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeFile.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeFile.java index 7fb06015256..cbe55830f41 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeFile.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeFile.java @@ -293,11 +293,13 @@ public class INodeFile extends INodeWithAdditionalFields implements BlockCollect public Quota.Counts cleanSubtree(final Snapshot snapshot, Snapshot prior, final BlocksMapUpdateInfo collectedBlocks) throws QuotaExceededException { + Quota.Counts counts = Quota.Counts.newInstance(); if (snapshot == null && prior == null) { // this only happens when deleting the current file + computeQuotaUsage(counts, false); destroyAndCollectBlocks(collectedBlocks); } - return Quota.Counts.newInstance(); + return counts; } @Override diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeSymlink.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeSymlink.java index f0f1aacbeb4..0106ba8955c 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeSymlink.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeSymlink.java @@ -74,7 +74,7 @@ public class INodeSymlink extends INodeWithAdditionalFields { @Override public Quota.Counts cleanSubtree(final Snapshot snapshot, Snapshot prior, final BlocksMapUpdateInfo collectedBlocks) { - return Quota.Counts.newInstance(); + return Quota.Counts.newInstance(1, 0); } @Override diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/snapshot/INodeDirectoryWithSnapshot.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/snapshot/INodeDirectoryWithSnapshot.java index 0bb637f6267..cca1ee69b70 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/snapshot/INodeDirectoryWithSnapshot.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/snapshot/INodeDirectoryWithSnapshot.java @@ -89,16 +89,19 @@ public class INodeDirectoryWithSnapshot extends INodeDirectoryWithQuota { } /** clear the created list */ - private void destroyCreatedList( + private Quota.Counts destroyCreatedList( final INodeDirectoryWithSnapshot currentINode, final BlocksMapUpdateInfo collectedBlocks) { + Quota.Counts counts = Quota.Counts.newInstance(); final List createdList = getList(ListType.CREATED); for (INode c : createdList) { + c.computeQuotaUsage(counts, true); c.destroyAndCollectBlocks(collectedBlocks); // c should be contained in the children list, remove it currentINode.removeChild(c); } createdList.clear(); + return counts; } /** clear the deleted list */ @@ -659,7 +662,7 @@ public class INodeDirectoryWithSnapshot extends INodeDirectoryWithQuota { // delete everything in created list DirectoryDiff lastDiff = diffs.getLast(); if (lastDiff != null) { - lastDiff.diff.destroyCreatedList(this, collectedBlocks); + counts.add(lastDiff.diff.destroyCreatedList(this, collectedBlocks)); } } else { // update prior