[ 
https://issues.apache.org/jira/browse/HDFS-14542?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16856504#comment-16856504
 ] 

Jinglun commented on HDFS-14542:
--------------------------------

Hi [~ayushtkn], thanks for comments. No, the method isQuotaByStorageTypeSet(t) 
wouldn't check for each storage type. Method isQuotaByStorageTypeSet(t) works 
differently from isQuotaByStorageTypeSet(), it only checks the value 
corresponding to StorageType t.

Quota check is a very frequent operation. Doing the storage type quota check 10 
times for each parent inode with quota whenever calling mkdir, create, addBlock 
etc. It's a big cost.

The simple way is deleting the redundant code and we can reduce the cost by 
half. I'm considering a final version that skips the check if there isn't any 
storage type quota. See HDFS-14547.

> Remove redundant code when verify quota
> ---------------------------------------
>
>                 Key: HDFS-14542
>                 URL: https://issues.apache.org/jira/browse/HDFS-14542
>             Project: Hadoop HDFS
>          Issue Type: Improvement
>    Affects Versions: 3.1.1
>            Reporter: Jinglun
>            Assignee: Jinglun
>            Priority: Minor
>         Attachments: HDFS-14542.patch
>
>
> DirectoryWithQuotaFeature.verifyQuotaByStorageType() does the job of 
> verifying quota. It's redundant to call isQuotaByStorageTypeSet() because the 
> for each iterator nextline has done the same job.
> {code:java}
> private void verifyQuotaByStorageType(EnumCounters<StorageType> typeDelta) 
>      throws QuotaByStorageTypeExceededException {
>   if (!isQuotaByStorageTypeSet()) { // REDUNDANT.
>     return;
>   }
>   for (StorageType t: StorageType.getTypesSupportingQuota()) {
>     if (!isQuotaByStorageTypeSet(t)) { // CHECK FOR EACH STORAGETYPE.
>       continue;
>     }
>     if (Quota.isViolated(quota.getTypeSpace(t), usage.getTypeSpace(t),
>         typeDelta.get(t))) {
>       throw new QuotaByStorageTypeExceededException(
>       quota.getTypeSpace(t), usage.getTypeSpace(t) + typeDelta.get(t), t);
>     }
>   }
> }
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: hdfs-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: hdfs-issues-h...@hadoop.apache.org

Reply via email to