001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018 package org.apache.hadoop.hdfs.server.namenode;
019
020 import org.apache.hadoop.hdfs.util.EnumCounters;
021
022 /** Quota types. */
023 public enum Quota {
024 /** The namespace usage, i.e. the number of name objects. */
025 NAMESPACE,
026 /** The diskspace usage in bytes including replication. */
027 DISKSPACE;
028
029 /** Counters for quota counts. */
030 public static class Counts extends EnumCounters<Quota> {
031 /** @return a new counter with the given namespace and diskspace usages. */
032 public static Counts newInstance(long namespace, long diskspace) {
033 final Counts c = new Counts();
034 c.set(NAMESPACE, namespace);
035 c.set(DISKSPACE, diskspace);
036 return c;
037 }
038
039 public static Counts newInstance() {
040 return newInstance(0, 0);
041 }
042
043 Counts() {
044 super(Quota.class);
045 }
046 }
047
048 /**
049 * Is quota violated?
050 * The quota is violated if quota is set and usage > quota.
051 */
052 static boolean isViolated(final long quota, final long usage) {
053 return quota >= 0 && usage > quota;
054 }
055
056 /**
057 * Is quota violated?
058 * The quota is violated if quota is set, delta > 0 and usage + delta > quota.
059 */
060 static boolean isViolated(final long quota, final long usage,
061 final long delta) {
062 return quota >= 0 && delta > 0 && usage > quota - delta;
063 }
064 }