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