1
2
3
4
5
6
7
8
9
10
11
12 package org.apache.hadoop.hbase.quotas;
13
14 import java.util.List;
15
16 import org.apache.hadoop.hbase.classification.InterfaceAudience;
17 import org.apache.hadoop.hbase.classification.InterfaceStability;
18 import org.apache.hadoop.hbase.client.Mutation;
19 import org.apache.hadoop.hbase.client.Result;
20
21
22
23
24 @InterfaceAudience.Private
25 @InterfaceStability.Evolving
26 public interface OperationQuota {
27 public enum OperationType {
28 MUTATE, GET, SCAN
29 }
30
31
32
33
34 public class AvgOperationSize {
35 private final long[] sizeSum;
36 private final long[] count;
37
38 public AvgOperationSize() {
39 int size = OperationType.values().length;
40 sizeSum = new long[size];
41 count = new long[size];
42 for (int i = 0; i < size; ++i) {
43 sizeSum[i] = 0;
44 count[i] = 0;
45 }
46 }
47
48 public void addOperationSize(OperationType type, long size) {
49 if (size > 0) {
50 int index = type.ordinal();
51 sizeSum[index] += size;
52 count[index]++;
53 }
54 }
55
56 public long getAvgOperationSize(OperationType type) {
57 int index = type.ordinal();
58 return count[index] > 0 ? sizeSum[index] / count[index] : 0;
59 }
60
61 public long getOperationSize(OperationType type) {
62 return sizeSum[type.ordinal()];
63 }
64
65 public void addGetResult(final Result result) {
66 long size = QuotaUtil.calculateResultSize(result);
67 addOperationSize(OperationType.GET, size);
68 }
69
70 public void addScanResult(final List<Result> results) {
71 long size = QuotaUtil.calculateResultSize(results);
72 addOperationSize(OperationType.SCAN, size);
73 }
74
75 public void addMutation(final Mutation mutation) {
76 long size = QuotaUtil.calculateMutationSize(mutation);
77 addOperationSize(OperationType.MUTATE, size);
78 }
79 }
80
81
82
83
84
85
86
87
88
89 void checkQuota(int numWrites, int numReads, int numScans) throws ThrottlingException;
90
91
92 void close();
93
94
95
96
97
98 void addGetResult(Result result);
99
100
101
102
103
104 void addScanResult(List<Result> results);
105
106
107
108
109
110 void addMutation(Mutation mutation);
111
112
113 long getReadAvailable();
114
115
116 long getWriteAvailable();
117
118
119 long getAvgOperationSize(OperationType type);
120 }