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