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