1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.hadoop.hbase.quotas;
18
19 import java.util.Objects;
20
21 import org.apache.commons.lang.builder.HashCodeBuilder;
22 import org.apache.hadoop.hbase.classification.InterfaceAudience;
23 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
24 import org.apache.hadoop.hbase.protobuf.generated.QuotaProtos;
25
26
27
28
29 @InterfaceAudience.Private
30 public class SpaceQuotaSnapshot {
31 private static final SpaceQuotaSnapshot NO_SUCH_SNAPSHOT = new SpaceQuotaSnapshot(SpaceQuotaStatus.notInViolation(), 0, Long.MAX_VALUE);
32 private final SpaceQuotaStatus quotaStatus;
33 private final long usage;
34 private final long limit;
35
36
37
38
39
40
41 @InterfaceAudience.Private
42 public static class SpaceQuotaStatus {
43 private static final SpaceQuotaStatus NOT_IN_VIOLATION = new SpaceQuotaStatus(null, false);
44 final SpaceViolationPolicy policy;
45 final boolean inViolation;
46
47
48
49
50
51
52
53
54
55 public SpaceQuotaStatus(SpaceViolationPolicy policy) {
56
57 this (Objects.requireNonNull(policy), true);
58 }
59
60 private SpaceQuotaStatus(SpaceViolationPolicy policy, boolean inViolation) {
61 this.policy = policy;
62 this.inViolation = inViolation;
63 }
64
65
66
67
68
69 public SpaceViolationPolicy getPolicy() {
70 return policy;
71 }
72
73
74
75
76 public boolean isInViolation() {
77 return inViolation;
78 }
79
80
81
82
83 public static SpaceQuotaStatus notInViolation() {
84 return NOT_IN_VIOLATION;
85 }
86
87 @Override
88 public int hashCode() {
89 return new HashCodeBuilder().append(policy == null ? 0 : policy.hashCode())
90 .append(inViolation).toHashCode();
91 }
92
93 @Override
94 public boolean equals(Object o) {
95 if (o instanceof SpaceQuotaStatus) {
96 SpaceQuotaStatus other = (SpaceQuotaStatus) o;
97 return Objects.equals(policy, other.policy) && inViolation == other.inViolation;
98 }
99 return false;
100 }
101
102 @Override
103 public String toString() {
104 StringBuilder sb = new StringBuilder(getClass().getSimpleName());
105 sb.append("[policy=").append(policy);
106 sb.append(", inViolation=").append(inViolation).append("]");
107 return sb.toString();
108 }
109
110 public static QuotaProtos.SpaceQuotaStatus toProto(SpaceQuotaStatus status) {
111 QuotaProtos.SpaceQuotaStatus.Builder builder = QuotaProtos.SpaceQuotaStatus.newBuilder();
112 builder.setInViolation(status.inViolation);
113 if (status.isInViolation()) {
114 builder.setViolationPolicy(ProtobufUtil.toProtoViolationPolicy(status.getPolicy()));
115 }
116 return builder.build();
117 }
118
119 public static SpaceQuotaStatus toStatus(QuotaProtos.SpaceQuotaStatus proto) {
120 if (proto.getInViolation()) {
121 return new SpaceQuotaStatus(ProtobufUtil.toViolationPolicy(proto.getViolationPolicy()));
122 } else {
123 return NOT_IN_VIOLATION;
124 }
125 }
126 }
127
128 public SpaceQuotaSnapshot(SpaceQuotaStatus quotaStatus, long usage, long limit) {
129 this.quotaStatus = Objects.requireNonNull(quotaStatus);
130 this.usage = usage;
131 this.limit = limit;
132 }
133
134
135
136
137 public SpaceQuotaStatus getQuotaStatus() {
138 return quotaStatus;
139 }
140
141
142
143
144 public long getUsage() {
145 return usage;
146 }
147
148
149
150
151 public long getLimit() {
152 return limit;
153 }
154
155 @Override
156 public int hashCode() {
157 return new HashCodeBuilder()
158 .append(quotaStatus.hashCode())
159 .append(usage)
160 .append(limit)
161 .toHashCode();
162 }
163
164 @Override
165 public boolean equals(Object o) {
166 if (o instanceof SpaceQuotaSnapshot) {
167 SpaceQuotaSnapshot other = (SpaceQuotaSnapshot) o;
168 return quotaStatus.equals(other.quotaStatus) && usage == other.usage && limit == other.limit;
169 }
170 return false;
171 }
172
173 @Override
174 public String toString() {
175 StringBuilder sb = new StringBuilder(32);
176 sb.append("SpaceQuotaSnapshot[policy=").append(quotaStatus).append(", use=");
177 sb.append(usage).append("bytes/").append(limit).append("bytes]");
178 return sb.toString();
179 }
180
181
182 public static SpaceQuotaSnapshot toSpaceQuotaSnapshot(QuotaProtos.SpaceQuotaSnapshot proto) {
183 return new SpaceQuotaSnapshot(SpaceQuotaStatus.toStatus(proto.getQuotaStatus()),
184 proto.getQuotaUsage(), proto.getQuotaLimit());
185 }
186
187 public static QuotaProtos.SpaceQuotaSnapshot toProtoSnapshot(SpaceQuotaSnapshot snapshot) {
188 return QuotaProtos.SpaceQuotaSnapshot.newBuilder()
189 .setQuotaStatus(SpaceQuotaStatus.toProto(snapshot.getQuotaStatus()))
190 .setQuotaUsage(snapshot.getUsage()).setQuotaLimit(snapshot.getLimit()).build();
191 }
192
193 public static SpaceQuotaSnapshot getNoSuchSnapshot() {
194 return NO_SUCH_SNAPSHOT;
195 }
196 }