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