1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.master;
19
20 import java.io.IOException;
21 import java.util.ArrayList;
22 import java.util.HashMap;
23 import java.net.InetSocketAddress;
24 import java.util.List;
25 import java.util.Map;
26 import java.util.Random;
27 import java.util.TreeMap;
28 import java.util.concurrent.ConcurrentSkipListMap;
29
30 import com.google.protobuf.Message;
31 import org.apache.hadoop.conf.Configuration;
32 import org.apache.hadoop.fs.FileSystem;
33 import org.apache.hadoop.hbase.CellScannable;
34 import org.apache.hadoop.hbase.CellUtil;
35 import org.apache.hadoop.hbase.TableName;
36 import org.apache.hadoop.hbase.HRegionInfo;
37 import org.apache.hadoop.hbase.ServerName;
38 import org.apache.hadoop.hbase.ZooKeeperConnectionException;
39 import org.apache.hadoop.hbase.catalog.CatalogTracker;
40 import org.apache.hadoop.hbase.client.Get;
41 import org.apache.hadoop.hbase.client.Result;
42 import org.apache.hadoop.hbase.client.Scan;
43 import org.apache.hadoop.hbase.executor.ExecutorService;
44 import org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController;
45 import org.apache.hadoop.hbase.ipc.RpcServerInterface;
46 import org.apache.hadoop.hbase.master.TableLockManager.NullTableLockManager;
47 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
48 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos;
49 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest;
50 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionResponse;
51 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionRequest;
52 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionResponse;
53 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionRequest;
54 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionResponse;
55 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionRequest;
56 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionResponse;
57 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRequest;
58 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse;
59 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoRequest;
60 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoResponse;
61 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileRequest;
62 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileResponse;
63 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsRequest;
64 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsResponse;
65 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest;
66 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse;
67 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;
68 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;
69 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest;
70 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterResponse;
71 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionRequest;
72 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionResponse;
73 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest;
74 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerResponse;
75 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;
76 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;
77 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;
78 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest;
79 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileResponse;
80 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceRequest;
81 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse;
82 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest;
83 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetResponse;
84 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiRequest;
85 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateRequest;
86 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateResponse;
87 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;
88 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;
89 import org.apache.hadoop.hbase.protobuf.generated.RPCProtos;
90 import org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;
91 import org.apache.hadoop.hbase.regionserver.CompactionRequestor;
92 import org.apache.hadoop.hbase.regionserver.FlushRequester;
93 import org.apache.hadoop.hbase.regionserver.HRegion;
94 import org.apache.hadoop.hbase.regionserver.HeapMemoryManager;
95 import org.apache.hadoop.hbase.regionserver.Leases;
96 import org.apache.hadoop.hbase.regionserver.RegionServerAccounting;
97 import org.apache.hadoop.hbase.regionserver.RegionServerServices;
98 import org.apache.hadoop.hbase.regionserver.ServerNonceManager;
99 import org.apache.hadoop.hbase.regionserver.wal.HLog;
100 import org.apache.hadoop.hbase.util.Bytes;
101 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
102 import org.apache.zookeeper.KeeperException;
103
104 import com.google.protobuf.RpcController;
105 import com.google.protobuf.Service;
106 import com.google.protobuf.ServiceException;
107
108
109
110
111
112
113
114
115
116 class MockRegionServer
117 implements AdminProtos.AdminService.BlockingInterface,
118 ClientProtos.ClientService.BlockingInterface, RegionServerServices {
119 private final ServerName sn;
120 private final ZooKeeperWatcher zkw;
121 private final Configuration conf;
122 private final Random random = new Random();
123
124
125
126
127
128
129
130 private final Map<byte [], Map<byte [], Result>> gets =
131 new TreeMap<byte [], Map<byte [], Result>>(Bytes.BYTES_COMPARATOR);
132
133
134
135
136 private final Map<byte [], Result []> nexts =
137 new TreeMap<byte [], Result []>(Bytes.BYTES_COMPARATOR);
138
139
140
141
142 class RegionNameAndIndex {
143 private final byte[] regionName;
144 private int index = 0;
145
146 RegionNameAndIndex(final byte[] regionName) {
147 this.regionName = regionName;
148 }
149
150 byte[] getRegionName() {
151 return this.regionName;
152 }
153
154 int getThenIncrement() {
155 int currentIndex = this.index;
156 this.index++;
157 return currentIndex;
158 }
159 }
160
161
162
163
164 private final Map<Long, RegionNameAndIndex> scannersAndOffsets =
165 new HashMap<Long, RegionNameAndIndex>();
166
167
168
169
170
171
172 MockRegionServer(final Configuration conf, final ServerName sn)
173 throws ZooKeeperConnectionException, IOException {
174 this.sn = sn;
175 this.conf = conf;
176 this.zkw = new ZooKeeperWatcher(conf, sn.toString(), this, true);
177 }
178
179
180
181
182
183
184
185 void setGetResult(final byte [] regionName, final byte [] row, final Result r) {
186 Map<byte [], Result> value = this.gets.get(regionName);
187 if (value == null) {
188
189
190 value = new TreeMap<byte [], Result>(Bytes.BYTES_COMPARATOR);
191 this.gets.put(regionName, value);
192 }
193 value.put(row, r);
194 }
195
196
197
198
199
200
201 void setNextResults(final byte [] regionName, final Result [] rs) {
202 this.nexts.put(regionName, rs);
203 }
204
205 @Override
206 public boolean isStopped() {
207
208 return false;
209 }
210
211 @Override
212 public void abort(String why, Throwable e) {
213 throw new RuntimeException(this.sn + ": " + why, e);
214 }
215
216 @Override
217 public boolean isAborted() {
218 return false;
219 }
220
221 public long openScanner(byte[] regionName, Scan scan) throws IOException {
222 long scannerId = this.random.nextLong();
223 this.scannersAndOffsets.put(scannerId, new RegionNameAndIndex(regionName));
224 return scannerId;
225 }
226
227 public Result next(long scannerId) throws IOException {
228 RegionNameAndIndex rnai = this.scannersAndOffsets.get(scannerId);
229 int index = rnai.getThenIncrement();
230 Result [] results = this.nexts.get(rnai.getRegionName());
231 if (results == null) return null;
232 return index < results.length? results[index]: null;
233 }
234
235 public Result [] next(long scannerId, int numberOfRows) throws IOException {
236
237 Result r = next(scannerId);
238 return r == null? null: new Result [] {r};
239 }
240
241 public void close(final long scannerId) throws IOException {
242 this.scannersAndOffsets.remove(scannerId);
243 }
244
245 @Override
246 public void stop(String why) {
247 this.zkw.close();
248 }
249
250 @Override
251 public void addToOnlineRegions(HRegion r) {
252
253 }
254
255 @Override
256 public boolean removeFromOnlineRegions(HRegion r, ServerName destination) {
257
258 return false;
259 }
260
261 @Override
262 public HRegion getFromOnlineRegions(String encodedRegionName) {
263
264 return null;
265 }
266
267 @Override
268 public Configuration getConfiguration() {
269 return this.conf;
270 }
271
272 @Override
273 public ZooKeeperWatcher getZooKeeper() {
274 return this.zkw;
275 }
276
277 @Override
278 public CatalogTracker getCatalogTracker() {
279
280 return null;
281 }
282
283 @Override
284 public ServerName getServerName() {
285 return this.sn;
286 }
287
288 @Override
289 public void postOpenDeployTasks(PostOpenDeployContext context, CatalogTracker ct)
290 throws KeeperException, IOException {
291 addToOnlineRegions(context.getRegion());
292 }
293
294 @Override
295 public boolean isStopping() {
296 return false;
297 }
298
299 @Override
300 public CompactionRequestor getCompactionRequester() {
301
302 return null;
303 }
304
305 @Override
306 public FlushRequester getFlushRequester() {
307
308 return null;
309 }
310
311 @Override
312 public RegionServerAccounting getRegionServerAccounting() {
313
314 return null;
315 }
316
317 public TableLockManager getTableLockManager() {
318 return new NullTableLockManager();
319 }
320
321 @Override
322 public void postOpenDeployTasks(HRegion r, CatalogTracker ct)
323 throws KeeperException, IOException {
324
325 }
326
327 @Override
328 public RpcServerInterface getRpcServer() {
329
330 return null;
331 }
332
333 @Override
334 public ConcurrentSkipListMap<byte[], Boolean> getRegionsInTransitionInRS() {
335
336 return null;
337 }
338
339 @Override
340 public FileSystem getFileSystem() {
341
342 return null;
343 }
344
345 @Override
346 public GetResponse get(RpcController controller, GetRequest request)
347 throws ServiceException {
348 byte[] regionName = request.getRegion().getValue().toByteArray();
349 Map<byte [], Result> m = this.gets.get(regionName);
350 GetResponse.Builder builder = GetResponse.newBuilder();
351 if (m != null) {
352 byte[] row = request.getGet().getRow().toByteArray();
353 builder.setResult(ProtobufUtil.toResult(m.get(row)));
354 }
355 return builder.build();
356 }
357
358
359
360
361 @Override
362 public MutateResponse mutate(RpcController controller, MutateRequest request)
363 throws ServiceException {
364
365 return null;
366 }
367
368 @Override
369 public ScanResponse scan(RpcController controller, ScanRequest request)
370 throws ServiceException {
371 ScanResponse.Builder builder = ScanResponse.newBuilder();
372 try {
373 if (request.hasScan()) {
374 byte[] regionName = request.getRegion().getValue().toByteArray();
375 builder.setScannerId(openScanner(regionName, null));
376 builder.setMoreResults(true);
377 }
378 else {
379 long scannerId = request.getScannerId();
380 Result result = next(scannerId);
381 if (result != null) {
382 builder.addCellsPerResult(result.size());
383 List<CellScannable> results = new ArrayList<CellScannable>(1);
384 results.add(result);
385 ((PayloadCarryingRpcController) controller).setCellScanner(CellUtil
386 .createCellScanner(results));
387 builder.setMoreResults(true);
388 }
389 else {
390 builder.setMoreResults(false);
391 close(scannerId);
392 }
393 }
394 } catch (IOException ie) {
395 throw new ServiceException(ie);
396 }
397 return builder.build();
398 }
399
400 @Override
401 public BulkLoadHFileResponse bulkLoadHFile(RpcController controller,
402 BulkLoadHFileRequest request) throws ServiceException {
403
404 return null;
405 }
406
407 @Override
408 public ClientProtos.CoprocessorServiceResponse execService(RpcController controller,
409 ClientProtos.CoprocessorServiceRequest request) throws ServiceException {
410 return null;
411 }
412
413 @Override
414 public org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiResponse multi(
415 RpcController controller, MultiRequest request) throws ServiceException {
416
417 return null;
418 }
419
420 @Override
421 public GetRegionInfoResponse getRegionInfo(RpcController controller,
422 GetRegionInfoRequest request) throws ServiceException {
423 GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();
424 builder.setRegionInfo(HRegionInfo.convert(HRegionInfo.FIRST_META_REGIONINFO));
425 return builder.build();
426 }
427
428 @Override
429 public GetStoreFileResponse getStoreFile(RpcController controller,
430 GetStoreFileRequest request) throws ServiceException {
431
432 return null;
433 }
434
435 @Override
436 public GetOnlineRegionResponse getOnlineRegion(RpcController controller,
437 GetOnlineRegionRequest request) throws ServiceException {
438
439 return null;
440 }
441
442 @Override
443 public OpenRegionResponse openRegion(RpcController controller,
444 OpenRegionRequest request) throws ServiceException {
445
446 return null;
447 }
448
449 @Override
450 public CloseRegionResponse closeRegion(RpcController controller,
451 CloseRegionRequest request) throws ServiceException {
452
453 return null;
454 }
455
456 @Override
457 public FlushRegionResponse flushRegion(RpcController controller,
458 FlushRegionRequest request) throws ServiceException {
459
460 return null;
461 }
462
463 @Override
464 public SplitRegionResponse splitRegion(RpcController controller,
465 SplitRegionRequest request) throws ServiceException {
466
467 return null;
468 }
469
470 @Override
471 public MergeRegionsResponse mergeRegions(RpcController controller,
472 MergeRegionsRequest request) throws ServiceException {
473
474 return null;
475 }
476
477 @Override
478 public CompactRegionResponse compactRegion(RpcController controller,
479 CompactRegionRequest request) throws ServiceException {
480
481 return null;
482 }
483
484 @Override
485 public ReplicateWALEntryResponse replicateWALEntry(RpcController controller,
486 ReplicateWALEntryRequest request) throws ServiceException {
487
488 return null;
489 }
490
491 @Override
492 public RollWALWriterResponse rollWALWriter(RpcController controller,
493 RollWALWriterRequest request) throws ServiceException {
494
495 return null;
496 }
497
498 @Override
499 public GetServerInfoResponse getServerInfo(RpcController controller,
500 GetServerInfoRequest request) throws ServiceException {
501
502 return null;
503 }
504
505 @Override
506 public StopServerResponse stopServer(RpcController controller,
507 StopServerRequest request) throws ServiceException {
508
509 return null;
510 }
511
512 @Override
513 public List<HRegion> getOnlineRegions(TableName tableName) throws IOException {
514
515 return null;
516 }
517
518 @Override
519 public Leases getLeases() {
520
521 return null;
522 }
523
524 @Override
525 public HLog getWAL(HRegionInfo regionInfo) throws IOException {
526
527 return null;
528 }
529
530 @Override
531 public ExecutorService getExecutorService() {
532 return null;
533 }
534
535 @Override
536 public void updateRegionFavoredNodesMapping(String encodedRegionName,
537 List<org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ServerName> favoredNodes) {
538 }
539
540 @Override
541 public InetSocketAddress[] getFavoredNodesForRegion(String encodedRegionName) {
542 return null;
543 }
544
545 @Override
546 public ReplicateWALEntryResponse
547 replay(RpcController controller, ReplicateWALEntryRequest request)
548 throws ServiceException {
549
550 return null;
551 }
552
553 @Override
554 public Map<String, HRegion> getRecoveringRegions() {
555
556 return null;
557 }
558
559 @Override
560 public int getPriority(RPCProtos.RequestHeader header, Message param) {
561 return 0;
562 }
563
564 @Override
565 public UpdateFavoredNodesResponse updateFavoredNodes(RpcController controller,
566 UpdateFavoredNodesRequest request) throws ServiceException {
567 return null;
568 }
569
570 @Override
571 public ServerNonceManager getNonceManager() {
572 return null;
573 }
574
575 @Override
576 public boolean reportRegionStateTransition(TransitionCode code, HRegionInfo... hris) {
577 return false;
578 }
579
580 @Override
581 public boolean reportRegionStateTransition(TransitionCode code, long openSeqNum,
582 HRegionInfo... hris) {
583 return false;
584 }
585
586 @Override
587 public boolean reportRegionStateTransition(RegionStateTransitionContext context) {
588 return false;
589 }
590
591 @Override
592 public boolean registerService(Service service) {
593
594 return false;
595 }
596
597 @Override
598 public CoprocessorServiceResponse execRegionServerService(RpcController controller,
599 CoprocessorServiceRequest request) throws ServiceException {
600
601 return null;
602 }
603
604 @Override
605 public HeapMemoryManager getHeapMemoryManager() {
606 return null;
607 }
608
609 @Override
610 public double getCompactionPressure() {
611 return 0;
612 }
613 }