32
32
import org .apache .hadoop .hbase .HBaseTestingUtility ;
33
33
import org .apache .hadoop .hbase .HConstants ;
34
34
import org .apache .hadoop .hbase .TableName ;
35
+ import org .apache .hadoop .hbase .client .Scan .ReadType ;
35
36
import org .apache .hadoop .hbase .coprocessor .CoprocessorHost ;
36
37
import org .apache .hadoop .hbase .coprocessor .ProtobufCoprocessorService ;
37
38
import org .apache .hadoop .hbase .ipc .DelegatingHBaseRpcController ;
52
53
import org .apache .hbase .thirdparty .com .google .common .collect .Lists ;
53
54
import org .apache .hbase .thirdparty .com .google .common .collect .Multiset ;
54
55
55
- @ Category ({MediumTests .class , ClientTests .class })
56
+ @ Category ({ MediumTests .class , ClientTests .class })
56
57
public class TestRpcControllerFactory {
57
58
58
59
@ ClassRule
59
60
public static final HBaseClassTestRule CLASS_RULE =
60
- HBaseClassTestRule .forClass (TestRpcControllerFactory .class );
61
+ HBaseClassTestRule .forClass (TestRpcControllerFactory .class );
61
62
62
63
public static class StaticRpcControllerFactory extends RpcControllerFactory {
63
64
@@ -85,32 +86,15 @@ public static class CountingRpcController extends DelegatingHBaseRpcController {
85
86
86
87
private static Multiset <Integer > GROUPED_PRIORITY = ConcurrentHashMultiset .create ();
87
88
private static AtomicInteger INT_PRIORITY = new AtomicInteger ();
88
- private static AtomicInteger TABLE_PRIORITY = new AtomicInteger ();
89
89
90
90
public CountingRpcController (HBaseRpcController delegate ) {
91
91
super (delegate );
92
92
}
93
93
94
94
@ Override
95
95
public void setPriority (int priority ) {
96
- int oldPriority = getPriority ();
97
- super .setPriority (priority );
98
- int newPriority = getPriority ();
99
- if (newPriority != oldPriority ) {
100
- INT_PRIORITY .incrementAndGet ();
101
- GROUPED_PRIORITY .add (priority );
102
- }
103
- }
104
-
105
- @ Override
106
- public void setPriority (TableName tn ) {
107
- super .setPriority (tn );
108
- // ignore counts for system tables - it could change and we really only want to check on what
109
- // the client should change
110
- if (tn != null && !tn .isSystemTable ()) {
111
- TABLE_PRIORITY .incrementAndGet ();
112
- }
113
-
96
+ INT_PRIORITY .incrementAndGet ();
97
+ GROUPED_PRIORITY .add (priority );
114
98
}
115
99
}
116
100
@@ -120,7 +104,7 @@ public void setPriority(TableName tn) {
120
104
public TestName name = new TestName ();
121
105
122
106
@ BeforeClass
123
- public static void setup () throws Exception {
107
+ public static void setUp () throws Exception {
124
108
// load an endpoint so we have an endpoint to test - it doesn't matter which one, but
125
109
// this is already in tests, so we can just use it.
126
110
Configuration conf = UTIL .getConfiguration ();
@@ -131,7 +115,7 @@ public static void setup() throws Exception {
131
115
}
132
116
133
117
@ AfterClass
134
- public static void teardown () throws Exception {
118
+ public static void tearDown () throws Exception {
135
119
UTIL .shutdownMiniCluster ();
136
120
}
137
121
@@ -154,84 +138,83 @@ public void testCountController() throws Exception {
154
138
// change one of the connection properties so we get a new Connection with our configuration
155
139
conf .setInt (HConstants .HBASE_RPC_TIMEOUT_KEY , HConstants .DEFAULT_HBASE_RPC_TIMEOUT + 1 );
156
140
157
- Connection connection = ConnectionFactory .createConnection (conf );
158
- Table table = connection .getTable (tableName );
159
- byte [] row = Bytes .toBytes ("row" );
160
- Put p = new Put (row );
161
- p .addColumn (fam1 , fam1 , Bytes .toBytes ("val0" ));
162
- table .put (p );
163
-
164
- Integer counter = 1 ;
165
- counter = verifyCount (counter );
166
-
167
- Delete d = new Delete (row );
168
- d .addColumn (fam1 , fam1 );
169
- table .delete (d );
170
- counter = verifyCount (counter );
171
-
172
- Put p2 = new Put (row );
173
- p2 .addColumn (fam1 , Bytes .toBytes ("qual" ), Bytes .toBytes ("val1" ));
174
- table .batch (Lists .newArrayList (p , p2 ), null );
175
- // this only goes to a single server, so we don't need to change the count here
176
- counter = verifyCount (counter );
177
-
178
- Append append = new Append (row );
179
- append .addColumn (fam1 , fam1 , Bytes .toBytes ("val2" ));
180
- table .append (append );
181
- counter = verifyCount (counter );
182
-
183
- // and check the major lookup calls as well
184
- Get g = new Get (row );
185
- table .get (g );
186
- counter = verifyCount (counter );
187
-
188
- ResultScanner scan = table .getScanner (fam1 );
189
- scan .next ();
190
- scan .close ();
191
- counter = verifyCount (counter + 1 );
192
-
193
- Get g2 = new Get (row );
194
- table .get (Lists .newArrayList (g , g2 ));
195
- // same server, so same as above for not changing count
196
- counter = verifyCount (counter );
197
-
198
- // make sure all the scanner types are covered
199
- Scan scanInfo = new Scan (row );
200
- // regular small
201
- scanInfo .setSmall ( true );
202
- counter = doScan (table , scanInfo , counter );
203
-
204
- // reversed, small
205
- scanInfo .setReversed (true );
206
- counter = doScan (table , scanInfo , counter );
207
-
208
- // reversed, regular
209
- scanInfo .setSmall ( false );
210
- counter = doScan (table , scanInfo , counter + 1 );
211
-
212
- // make sure we have no priority count
213
- verifyPriorityGroupCount (HConstants .ADMIN_QOS , 0 );
214
- // lets set a custom priority on a get
215
- Get get = new Get (row );
216
- get .setPriority (HConstants .ADMIN_QOS );
217
- table .get (get );
218
- verifyPriorityGroupCount ( HConstants . ADMIN_QOS , 1 );
219
-
220
- table . close ( );
221
- connection . close ();
141
+ try ( Connection connection = ConnectionFactory .createConnection (conf );
142
+ Table table = connection .getTable (tableName )) {
143
+ byte [] row = Bytes .toBytes ("row" );
144
+ Put p = new Put (row );
145
+ p .addColumn (fam1 , fam1 , Bytes .toBytes ("val0" ));
146
+ table .put (p );
147
+
148
+ Integer counter = 1 ;
149
+ counter = verifyCount (counter );
150
+
151
+ Delete d = new Delete (row );
152
+ d .addColumn (fam1 , fam1 );
153
+ table .delete (d );
154
+ counter = verifyCount (counter );
155
+
156
+ Put p2 = new Put (row );
157
+ p2 .addColumn (fam1 , Bytes .toBytes ("qual" ), Bytes .toBytes ("val1" ));
158
+ table .batch (Lists .newArrayList (p , p2 ), null );
159
+ // this only goes to a single server, so we don't need to change the count here
160
+ counter = verifyCount (counter );
161
+
162
+ Append append = new Append (row );
163
+ append .addColumn (fam1 , fam1 , Bytes .toBytes ("val2" ));
164
+ table .append (append );
165
+ counter = verifyCount (counter );
166
+
167
+ // and check the major lookup calls as well
168
+ Get g = new Get (row );
169
+ table .get (g );
170
+ counter = verifyCount (counter );
171
+
172
+ ResultScanner scan = table .getScanner (fam1 );
173
+ scan .next ();
174
+ scan .close ();
175
+ counter = verifyCount (counter + 1 );
176
+
177
+ Get g2 = new Get (row );
178
+ table .get (Lists .newArrayList (g , g2 ));
179
+ // same server, so same as above for not changing count
180
+ counter = verifyCount (counter );
181
+
182
+ // make sure all the scanner types are covered
183
+ Scan scanInfo = new Scan (). withStartRow (row );
184
+ // regular small
185
+ scanInfo .setReadType ( ReadType . PREAD );
186
+ counter = doScan (table , scanInfo , counter );
187
+
188
+ // reversed, small
189
+ scanInfo .setReversed (true );
190
+ counter = doScan (table , scanInfo , counter );
191
+
192
+ // reversed, regular
193
+ scanInfo .setReadType ( ReadType . STREAM );
194
+ counter = doScan (table , scanInfo , counter + 1 );
195
+
196
+ // make sure we have no priority count
197
+ verifyPriorityGroupCount (HConstants .ADMIN_QOS , 0 );
198
+ // lets set a custom priority on a get
199
+ Get get = new Get (row );
200
+ get .setPriority (HConstants .ADMIN_QOS );
201
+ table .get (get );
202
+ // we will reset the controller for setting the call timeout so it will lead to an extra
203
+ // setPriority
204
+ verifyPriorityGroupCount ( HConstants . ADMIN_QOS , 2 );
205
+ }
222
206
}
223
207
224
208
int doScan (Table table , Scan scan , int expectedCount ) throws IOException {
225
- ResultScanner results = table .getScanner (scan );
226
- results .next ();
227
- results . close ();
209
+ try ( ResultScanner results = table .getScanner (scan )) {
210
+ results .next ();
211
+ }
228
212
return verifyCount (expectedCount );
229
213
}
230
214
231
215
int verifyCount (Integer counter ) {
232
- assertTrue (CountingRpcController .TABLE_PRIORITY .get () >= counter );
233
- assertEquals (0 , CountingRpcController .INT_PRIORITY .get ());
234
- return CountingRpcController .TABLE_PRIORITY .get () + 1 ;
216
+ assertTrue (CountingRpcController .INT_PRIORITY .get () >= counter );
217
+ return CountingRpcController .GROUPED_PRIORITY .count (HConstants .NORMAL_QOS ) + 1 ;
235
218
}
236
219
237
220
void verifyPriorityGroupCount (int priorityLevel , int count ) {
0 commit comments