HDFS-7811. Avoid recursive call getStoragePolicyID in INodeFile#computeQuotaUsage. Contributed by Xiaoyu Yao and Jing Zhao.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/aae48dea Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/aae48dea Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/aae48dea Branch: refs/heads/YARN-2928 Commit: aae48deac10c1ef26504997ae57d298bd6d6fd8d Parents: c134f99 Author: Jing Zhao <ji...@apache.org> Authored: Thu Apr 2 21:20:30 2015 -0700 Committer: Zhijie Shen <zjs...@apache.org> Committed: Mon Apr 6 12:08:15 2015 -0700 ---------------------------------------------------------------------- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 ++ .../hadoop/hdfs/server/namenode/FSImage.java | 14 +++++--- .../hadoop/hdfs/server/namenode/INode.java | 29 +++++++++++++++-- .../hdfs/server/namenode/INodeDirectory.java | 34 +++++++++++++------- .../hadoop/hdfs/server/namenode/INodeFile.java | 13 ++++---- .../hadoop/hdfs/server/namenode/INodeMap.java | 4 +-- .../hdfs/server/namenode/INodeReference.java | 15 +++++---- .../hdfs/server/namenode/INodeSymlink.java | 2 +- .../snapshot/DirectoryWithSnapshotFeature.java | 7 ++-- 9 files changed, 84 insertions(+), 37 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/aae48dea/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 85c013e..04eac75 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -877,6 +877,9 @@ Release 2.7.0 - UNRELEASED HDFS-8008. Support client-side back off when the datanodes are congested. (wheat9) + HDFS-7811. Avoid recursive call getStoragePolicyID in + INodeFile#computeQuotaUsage. (Xiaoyu Yao and jing9) + OPTIMIZATIONS HDFS-7454. Reduce memory footprint for AclEntries in NameNode. http://git-wip-us.apache.org/repos/asf/hadoop/blob/aae48dea/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImage.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImage.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImage.java index 7454850..d62b952 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImage.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImage.java @@ -856,23 +856,27 @@ public class FSImage implements Closeable { */ static void updateCountForQuota(BlockStoragePolicySuite bsps, INodeDirectory root) { - updateCountForQuotaRecursively(bsps, root, new QuotaCounts.Builder().build()); + updateCountForQuotaRecursively(bsps, root.getStoragePolicyID(), root, + new QuotaCounts.Builder().build()); } private static void updateCountForQuotaRecursively(BlockStoragePolicySuite bsps, - INodeDirectory dir, QuotaCounts counts) { + byte blockStoragePolicyId, INodeDirectory dir, QuotaCounts counts) { final long parentNamespace = counts.getNameSpace(); final long parentStoragespace = counts.getStorageSpace(); final EnumCounters<StorageType> parentTypeSpaces = counts.getTypeSpaces(); - dir.computeQuotaUsage4CurrentDirectory(bsps, counts); + dir.computeQuotaUsage4CurrentDirectory(bsps, blockStoragePolicyId, counts); for (INode child : dir.getChildrenList(Snapshot.CURRENT_STATE_ID)) { + final byte childPolicyId = child.getStoragePolicyIDForQuota(blockStoragePolicyId); if (child.isDirectory()) { - updateCountForQuotaRecursively(bsps, child.asDirectory(), counts); + updateCountForQuotaRecursively(bsps, childPolicyId, + child.asDirectory(), counts); } else { // file or symlink: count here to reduce recursive calls. - child.computeQuotaUsage(bsps, counts, false); + child.computeQuotaUsage(bsps, childPolicyId, counts, false, + Snapshot.CURRENT_STATE_ID); } } http://git-wip-us.apache.org/repos/asf/hadoop/blob/aae48dea/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INode.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INode.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INode.java index 586cce4..e629441 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INode.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INode.java @@ -505,9 +505,14 @@ public abstract class INode implements INodeAttributes, Diff.Element<byte[]> { /** * Count subtree {@link Quota#NAMESPACE} and {@link Quota#STORAGESPACE} usages. + * Entry point for FSDirectory where blockStoragePolicyId is given its initial + * value. */ public final QuotaCounts computeQuotaUsage(BlockStoragePolicySuite bsps) { - return computeQuotaUsage(bsps, new QuotaCounts.Builder().build(), true); + final byte storagePolicyId = isSymlink() ? + BlockStoragePolicySuite.ID_UNSPECIFIED : getStoragePolicyID(); + return computeQuotaUsage(bsps, storagePolicyId, + new QuotaCounts.Builder().build(), true, Snapshot.CURRENT_STATE_ID); } /** @@ -532,6 +537,7 @@ public abstract class INode implements INodeAttributes, Diff.Element<byte[]> { * <pre> * * @param bsps Block storage policy suite to calculate intended storage type usage + * @param blockStoragePolicyId block storage policy id of the current INode * @param counts The subtree counts for returning. * @param useCache Whether to use cached quota usage. Note that * {@link WithName} node never uses cache for its subtree. @@ -542,12 +548,15 @@ public abstract class INode implements INodeAttributes, Diff.Element<byte[]> { * @return The same objects as the counts parameter. */ public abstract QuotaCounts computeQuotaUsage( - BlockStoragePolicySuite bsps, + BlockStoragePolicySuite bsps, byte blockStoragePolicyId, QuotaCounts counts, boolean useCache, int lastSnapshotId); public final QuotaCounts computeQuotaUsage( BlockStoragePolicySuite bsps, QuotaCounts counts, boolean useCache) { - return computeQuotaUsage(bsps, counts, useCache, Snapshot.CURRENT_STATE_ID); + final byte storagePolicyId = isSymlink() ? + BlockStoragePolicySuite.ID_UNSPECIFIED : getStoragePolicyID(); + return computeQuotaUsage(bsps, storagePolicyId, counts, + useCache, Snapshot.CURRENT_STATE_ID); } /** @@ -708,6 +717,20 @@ public abstract class INode implements INodeAttributes, Diff.Element<byte[]> { public abstract byte getLocalStoragePolicyID(); /** + * Get the storage policy ID while computing quota usage + * @param parentStoragePolicyId the storage policy ID of the parent directory + * @return the storage policy ID of this INode. Note that for an + * {@link INodeSymlink} we return {@link BlockStoragePolicySuite#ID_UNSPECIFIED} + * instead of throwing Exception + */ + public byte getStoragePolicyIDForQuota(byte parentStoragePolicyId) { + byte localId = isSymlink() ? + BlockStoragePolicySuite.ID_UNSPECIFIED : getLocalStoragePolicyID(); + return localId != BlockStoragePolicySuite.ID_UNSPECIFIED ? + localId : parentStoragePolicyId; + } + + /** * Breaks {@code path} into components. * @return array of byte arrays each of which represents * a single path component. http://git-wip-us.apache.org/repos/asf/hadoop/blob/aae48dea/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeDirectory.java ---------------------------------------------------------------------- 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 dadb8c7..9f55fc4 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 @@ -45,6 +45,8 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; +import static org.apache.hadoop.hdfs.server.blockmanagement.BlockStoragePolicySuite.ID_UNSPECIFIED; + /** * Directory INode class. */ @@ -123,18 +125,18 @@ public class INodeDirectory extends INodeWithAdditionalFields return (xattr.getValue())[0]; } } - return BlockStoragePolicySuite.ID_UNSPECIFIED; + return ID_UNSPECIFIED; } @Override public byte getStoragePolicyID() { byte id = getLocalStoragePolicyID(); - if (id != BlockStoragePolicySuite.ID_UNSPECIFIED) { + if (id != ID_UNSPECIFIED) { return id; } // if it is unspecified, check its parent return getParent() != null ? getParent().getStoragePolicyID() : - BlockStoragePolicySuite.ID_UNSPECIFIED; + ID_UNSPECIFIED; } void setQuota(BlockStoragePolicySuite bsps, long nsQuota, long ssQuota, StorageType type) { @@ -568,10 +570,11 @@ public class INodeDirectory extends INodeWithAdditionalFields } @Override - public QuotaCounts computeQuotaUsage(BlockStoragePolicySuite bsps, QuotaCounts counts, boolean useCache, + public QuotaCounts computeQuotaUsage(BlockStoragePolicySuite bsps, + byte blockStoragePolicyId, QuotaCounts counts, boolean useCache, int lastSnapshotId) { final DirectoryWithSnapshotFeature sf = getDirectoryWithSnapshotFeature(); - + // we are computing the quota usage for a specific snapshot here, i.e., the // computation only includes files/directories that exist at the time of the // given snapshot @@ -579,7 +582,9 @@ public class INodeDirectory extends INodeWithAdditionalFields && !(useCache && isQuotaSet())) { ReadOnlyList<INode> childrenList = getChildrenList(lastSnapshotId); for (INode child : childrenList) { - child.computeQuotaUsage(bsps, counts, useCache, lastSnapshotId); + final byte childPolicyId = child.getStoragePolicyIDForQuota(blockStoragePolicyId); + child.computeQuotaUsage(bsps, childPolicyId, counts, useCache, + lastSnapshotId); } counts.addNameSpace(1); return counts; @@ -591,28 +596,33 @@ public class INodeDirectory extends INodeWithAdditionalFields return q.AddCurrentSpaceUsage(counts); } else { useCache = q != null && !q.isQuotaSet() ? false : useCache; - return computeDirectoryQuotaUsage(bsps, counts, useCache, lastSnapshotId); + return computeDirectoryQuotaUsage(bsps, blockStoragePolicyId, counts, + useCache, lastSnapshotId); } } private QuotaCounts computeDirectoryQuotaUsage(BlockStoragePolicySuite bsps, - QuotaCounts counts, boolean useCache, int lastSnapshotId) { + byte blockStoragePolicyId, QuotaCounts counts, boolean useCache, + int lastSnapshotId) { if (children != null) { for (INode child : children) { - child.computeQuotaUsage(bsps, counts, useCache, lastSnapshotId); + final byte childPolicyId = child.getStoragePolicyIDForQuota(blockStoragePolicyId); + child.computeQuotaUsage(bsps, childPolicyId, counts, useCache, + lastSnapshotId); } } - return computeQuotaUsage4CurrentDirectory(bsps, counts); + return computeQuotaUsage4CurrentDirectory(bsps, blockStoragePolicyId, + counts); } /** Add quota usage for this inode excluding children. */ public QuotaCounts computeQuotaUsage4CurrentDirectory( - BlockStoragePolicySuite bsps, QuotaCounts counts) { + BlockStoragePolicySuite bsps, byte storagePolicyId, QuotaCounts counts) { counts.addNameSpace(1); // include the diff list DirectoryWithSnapshotFeature sf = getDirectoryWithSnapshotFeature(); if (sf != null) { - sf.computeQuotaUsage4CurrentDirectory(bsps, counts); + sf.computeQuotaUsage4CurrentDirectory(bsps, storagePolicyId, counts); } return counts; } http://git-wip-us.apache.org/repos/asf/hadoop/blob/aae48dea/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeFile.java ---------------------------------------------------------------------- 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 a6f07f9..294dd14 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 @@ -17,6 +17,7 @@ */ package org.apache.hadoop.hdfs.server.namenode; +import static org.apache.hadoop.hdfs.server.blockmanagement.BlockStoragePolicySuite.ID_UNSPECIFIED; import static org.apache.hadoop.hdfs.server.namenode.snapshot.Snapshot.CURRENT_STATE_ID; import static org.apache.hadoop.hdfs.server.namenode.snapshot.Snapshot.NO_SNAPSHOT_ID; @@ -24,7 +25,6 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.PrintWriter; import java.util.Arrays; -import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -393,7 +393,7 @@ public class INodeFile extends INodeWithAdditionalFields @Override public byte getStoragePolicyID() { byte id = getLocalStoragePolicyID(); - if (id == BlockStoragePolicySuite.ID_UNSPECIFIED) { + if (id == ID_UNSPECIFIED) { return this.getParent() != null ? this.getParent().getStoragePolicyID() : id; } @@ -554,7 +554,8 @@ public class INodeFile extends INodeWithAdditionalFields // derive the intended storage type usage for quota by storage type @Override public final QuotaCounts computeQuotaUsage( - BlockStoragePolicySuite bsps, QuotaCounts counts, boolean useCache, + BlockStoragePolicySuite bsps, byte blockStoragePolicyId, + QuotaCounts counts, boolean useCache, int lastSnapshotId) { long nsDelta = 1; final long ssDeltaNoReplication; @@ -583,8 +584,8 @@ public class INodeFile extends INodeWithAdditionalFields counts.addNameSpace(nsDelta); counts.addStorageSpace(ssDeltaNoReplication * replication); - if (getStoragePolicyID() != BlockStoragePolicySuite.ID_UNSPECIFIED){ - BlockStoragePolicy bsp = bsps.getPolicy(getStoragePolicyID()); + if (blockStoragePolicyId != ID_UNSPECIFIED){ + BlockStoragePolicy bsp = bsps.getPolicy(blockStoragePolicyId); List<StorageType> storageTypes = bsp.chooseStorageTypes(replication); for (StorageType t : storageTypes) { if (!t.supportTypeQuota()) { @@ -618,7 +619,7 @@ public class INodeFile extends INodeWithAdditionalFields counts.addContent(Content.LENGTH, fileLen); counts.addContent(Content.DISKSPACE, storagespaceConsumed()); - if (getStoragePolicyID() != BlockStoragePolicySuite.ID_UNSPECIFIED){ + if (getStoragePolicyID() != ID_UNSPECIFIED){ BlockStoragePolicy bsp = summary.getBlockStoragePolicySuite(). getPolicy(getStoragePolicyID()); List<StorageType> storageTypes = bsp.chooseStorageTypes(getFileReplication()); http://git-wip-us.apache.org/repos/asf/hadoop/blob/aae48dea/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeMap.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeMap.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeMap.java index cb270bf..fc1cbec 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeMap.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeMap.java @@ -103,8 +103,8 @@ public class INodeMap { @Override public QuotaCounts computeQuotaUsage( - BlockStoragePolicySuite bsps, QuotaCounts counts, - boolean useCache, int lastSnapshotId) { + BlockStoragePolicySuite bsps, byte blockStoragePolicyId, + QuotaCounts counts, boolean useCache, int lastSnapshotId) { return null; } http://git-wip-us.apache.org/repos/asf/hadoop/blob/aae48dea/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeReference.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeReference.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeReference.java index eee50a5..b33a93c 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeReference.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeReference.java @@ -23,7 +23,6 @@ import java.util.Collections; import java.util.Comparator; import java.util.List; -import org.apache.hadoop.fs.StorageType; import org.apache.hadoop.fs.permission.FsPermission; import org.apache.hadoop.fs.permission.PermissionStatus; import org.apache.hadoop.hdfs.protocol.QuotaExceededException; @@ -327,9 +326,10 @@ public abstract class INodeReference extends INode { @Override public QuotaCounts computeQuotaUsage( - BlockStoragePolicySuite bsps, + BlockStoragePolicySuite bsps, byte blockStoragePolicyId, QuotaCounts counts, boolean useCache, int lastSnapshotId) { - return referred.computeQuotaUsage(bsps, counts, useCache, lastSnapshotId); + return referred.computeQuotaUsage(bsps, blockStoragePolicyId, counts, + useCache, lastSnapshotId); } @Override @@ -512,7 +512,8 @@ public abstract class INodeReference extends INode { ContentSummaryComputationContext summary) { //only count storagespace for WithName final QuotaCounts q = new QuotaCounts.Builder().build(); - computeQuotaUsage(summary.getBlockStoragePolicySuite(), q, false, lastSnapshotId); + computeQuotaUsage(summary.getBlockStoragePolicySuite(), + getStoragePolicyID(), q, false, lastSnapshotId); summary.getCounts().addContent(Content.DISKSPACE, q.getStorageSpace()); summary.getCounts().addTypeSpaces(q.getTypeSpaces()); return summary; @@ -520,7 +521,8 @@ public abstract class INodeReference extends INode { @Override public final QuotaCounts computeQuotaUsage(BlockStoragePolicySuite bsps, - QuotaCounts counts, boolean useCache, int lastSnapshotId) { + byte blockStoragePolicyId, QuotaCounts counts, boolean useCache, + int lastSnapshotId) { // if this.lastSnapshotId < lastSnapshotId, the rename of the referred // node happened before the rename of its ancestor. This should be // impossible since for WithName node we only count its children at the @@ -535,7 +537,8 @@ public abstract class INodeReference extends INode { // been updated by changes in the current tree. int id = lastSnapshotId != Snapshot.CURRENT_STATE_ID ? lastSnapshotId : this.lastSnapshotId; - return referred.computeQuotaUsage(bsps, counts, false, id); + return referred.computeQuotaUsage(bsps, blockStoragePolicyId, counts, + false, id); } @Override http://git-wip-us.apache.org/repos/asf/hadoop/blob/aae48dea/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeSymlink.java ---------------------------------------------------------------------- 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 120d0dc..21a9e4f 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 @@ -93,7 +93,7 @@ public class INodeSymlink extends INodeWithAdditionalFields { @Override public QuotaCounts computeQuotaUsage( - BlockStoragePolicySuite bsps, + BlockStoragePolicySuite bsps, byte blockStoragePolicyId, QuotaCounts counts, boolean useCache, int lastSnapshotId) { counts.addNameSpace(1); return counts; http://git-wip-us.apache.org/repos/asf/hadoop/blob/aae48dea/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/snapshot/DirectoryWithSnapshotFeature.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/snapshot/DirectoryWithSnapshotFeature.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/snapshot/DirectoryWithSnapshotFeature.java index d55332f..95f9d8a 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/snapshot/DirectoryWithSnapshotFeature.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/snapshot/DirectoryWithSnapshotFeature.java @@ -641,10 +641,13 @@ public class DirectoryWithSnapshotFeature implements INode.Feature { } public QuotaCounts computeQuotaUsage4CurrentDirectory( - BlockStoragePolicySuite bsps, QuotaCounts counts) { + BlockStoragePolicySuite bsps, byte storagePolicyId, + QuotaCounts counts) { for(DirectoryDiff d : diffs) { for(INode deleted : d.getChildrenDiff().getList(ListType.DELETED)) { - deleted.computeQuotaUsage(bsps, counts, false, Snapshot.CURRENT_STATE_ID); + final byte childPolicyId = deleted.getStoragePolicyIDForQuota(storagePolicyId); + deleted.computeQuotaUsage(bsps, childPolicyId, counts, false, + Snapshot.CURRENT_STATE_ID); } } return counts;