001/*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements.  See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership.  The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License.  You may obtain a copy of the License at
009 *
010 *     http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018package org.apache.hadoop.hbase.master;
019
020import java.io.IOException;
021import java.net.InetSocketAddress;
022import java.util.ArrayList;
023import java.util.Collections;
024import java.util.HashMap;
025import java.util.List;
026import java.util.Map;
027import java.util.Random;
028import java.util.TreeMap;
029import java.util.concurrent.ConcurrentSkipListMap;
030
031import org.apache.hadoop.conf.Configuration;
032import org.apache.hadoop.fs.FileSystem;
033import org.apache.hadoop.hbase.Abortable;
034import org.apache.hadoop.hbase.CellScannable;
035import org.apache.hadoop.hbase.CellUtil;
036import org.apache.hadoop.hbase.ChoreService;
037import org.apache.hadoop.hbase.CoordinatedStateManager;
038import org.apache.hadoop.hbase.ServerName;
039import org.apache.hadoop.hbase.TableName;
040import org.apache.hadoop.hbase.ZooKeeperConnectionException;
041import org.apache.hadoop.hbase.client.ClusterConnection;
042import org.apache.hadoop.hbase.client.Connection;
043import org.apache.hadoop.hbase.client.RegionInfo;
044import org.apache.hadoop.hbase.client.RegionInfoBuilder;
045import org.apache.hadoop.hbase.client.Result;
046import org.apache.hadoop.hbase.client.Scan;
047import org.apache.hadoop.hbase.client.locking.EntityLock;
048import org.apache.hadoop.hbase.executor.ExecutorService;
049import org.apache.hadoop.hbase.ipc.HBaseRpcController;
050import org.apache.hadoop.hbase.ipc.RpcServerInterface;
051import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager;
052import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager;
053import org.apache.hadoop.hbase.regionserver.FlushRequester;
054import org.apache.hadoop.hbase.regionserver.HRegion;
055import org.apache.hadoop.hbase.regionserver.HeapMemoryManager;
056import org.apache.hadoop.hbase.regionserver.Leases;
057import org.apache.hadoop.hbase.regionserver.MetricsRegionServer;
058import org.apache.hadoop.hbase.regionserver.Region;
059import org.apache.hadoop.hbase.regionserver.RegionServerAccounting;
060import org.apache.hadoop.hbase.regionserver.RegionServerServices;
061import org.apache.hadoop.hbase.regionserver.SecureBulkLoadManager;
062import org.apache.hadoop.hbase.regionserver.ServerNonceManager;
063import org.apache.hadoop.hbase.regionserver.compactions.CompactionRequester;
064import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController;
065import org.apache.hadoop.hbase.util.Bytes;
066import org.apache.hadoop.hbase.wal.WAL;
067import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;
068import org.apache.hadoop.hbase.zookeeper.ZKWatcher;
069import org.apache.zookeeper.KeeperException;
070
071import org.apache.hbase.thirdparty.com.google.protobuf.RpcController;
072import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;
073import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;
074import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos;
075import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest;
076import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse;
077import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheRequest;
078import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheResponse;
079import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;
080import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;
081import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest;
082import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse;
083import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;
084import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;
085import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest;
086import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse;
087import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;
088import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;
089import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;
090import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;
091import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest;
092import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse;
093import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest;
094import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse;
095import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest;
096import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse;
097import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;
098import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;
099import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;
100import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;
101import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest;
102import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse;
103import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest;
104import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse;
105import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest;
106import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse;
107import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;
108import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;
109import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest;
110import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse;
111import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;
112import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest;
113import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileResponse;
114import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadRequest;
115import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadResponse;
116import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest;
117import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse;
118import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetRequest;
119import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetResponse;
120import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest;
121import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateRequest;
122import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse;
123import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest;
124import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse;
125import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;
126import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;
127import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest;
128import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse;
129
130/**
131 * A mock RegionServer implementation.
132 * Use this when you can't bend Mockito to your liking (e.g. return null result
133 * when 'scanning' until master timesout and then return a coherent meta row
134 * result thereafter.  Have some facility for faking gets and scans.  See
135 * setGetResult(byte[], byte[], Result) for how to fill the backing data
136 * store that the get pulls from.
137 */
138class MockRegionServer implements AdminProtos.AdminService.BlockingInterface,
139ClientProtos.ClientService.BlockingInterface, RegionServerServices {
140  private final ServerName sn;
141  private final ZKWatcher zkw;
142  private final Configuration conf;
143  private final Random random = new Random();
144
145  /**
146   * Map of regions to map of rows and {@link Result}. Used as data source when
147   * {@link #get(RpcController, ClientProtos.GetRequest)} is called. Because we have a byte
148   * key, need to use TreeMap and provide a Comparator.  Use
149   * {@link #setGetResult(byte[], byte[], Result)} filling this map.
150   */
151  private final Map<byte [], Map<byte [], Result>> gets = new TreeMap<>(Bytes.BYTES_COMPARATOR);
152
153  /**
154   * Map of regions to results to return when scanning.
155   */
156  private final Map<byte [], Result []> nexts = new TreeMap<>(Bytes.BYTES_COMPARATOR);
157
158  /**
159   * Data structure that holds regionname and index used scanning.
160   */
161  class RegionNameAndIndex {
162    private final byte[] regionName;
163    private int index = 0;
164
165    RegionNameAndIndex(final byte[] regionName) {
166      this.regionName = regionName;
167    }
168
169    byte[] getRegionName() {
170      return this.regionName;
171    }
172
173    int getThenIncrement() {
174      int currentIndex = this.index;
175      this.index++;
176      return currentIndex;
177    }
178  }
179
180  /**
181   * Outstanding scanners and their offset into <code>nexts</code>
182   */
183  private final Map<Long, RegionNameAndIndex> scannersAndOffsets = new HashMap<>();
184
185  /**
186   * @param sn Name of this mock regionserver
187   * @throws IOException
188   * @throws org.apache.hadoop.hbase.ZooKeeperConnectionException
189   */
190  MockRegionServer(final Configuration conf, final ServerName sn)
191  throws ZooKeeperConnectionException, IOException {
192    this.sn = sn;
193    this.conf = conf;
194    this.zkw = new ZKWatcher(conf, sn.toString(), this, true);
195  }
196
197  /**
198   * Use this method filling the backing data source used by
199   * {@link #get(RpcController, ClientProtos.GetRequest)}
200   * @param regionName the region name to assign
201   * @param row the row key
202   * @param r the single row result
203   */
204  void setGetResult(final byte [] regionName, final byte [] row, final Result r) {
205    Map<byte [], Result> value = this.gets.get(regionName);
206    if (value == null) {
207      // If no value already, create one.  Needs to be treemap because we are
208      // using byte array as key.   Not thread safe.
209      value = new TreeMap<>(Bytes.BYTES_COMPARATOR);
210      this.gets.put(regionName, value);
211    }
212    value.put(row, r);
213  }
214
215  /**
216   * Use this method to set what a scanner will reply as we next through
217   * @param regionName
218   * @param rs
219   */
220  void setNextResults(final byte [] regionName, final Result [] rs) {
221    this.nexts.put(regionName, rs);
222  }
223
224  @Override
225  public boolean isStopped() {
226    return false;
227  }
228
229  @Override
230  public void abort(String why, Throwable e) {
231    throw new RuntimeException(this.sn + ": " + why, e);
232  }
233
234  @Override
235  public boolean isAborted() {
236    return false;
237  }
238
239  public long openScanner(byte[] regionName, Scan scan) throws IOException {
240    long scannerId = this.random.nextLong();
241    this.scannersAndOffsets.put(scannerId, new RegionNameAndIndex(regionName));
242    return scannerId;
243  }
244
245  public Result next(long scannerId) throws IOException {
246    RegionNameAndIndex rnai = this.scannersAndOffsets.get(scannerId);
247    int index = rnai.getThenIncrement();
248    Result [] results = this.nexts.get(rnai.getRegionName());
249    if (results == null) return null;
250    return index < results.length? results[index]: null;
251  }
252
253  public Result [] next(long scannerId, int numberOfRows) throws IOException {
254    // Just return one result whatever they ask for.
255    Result r = next(scannerId);
256    return r == null? null: new Result [] {r};
257  }
258
259  public void close(final long scannerId) throws IOException {
260    this.scannersAndOffsets.remove(scannerId);
261  }
262
263  @Override
264  public void stop(String why) {
265    this.zkw.close();
266  }
267
268  @Override
269  public void addRegion(HRegion r) {
270  }
271
272  @Override
273  public boolean removeRegion(HRegion r, ServerName destination) {
274    return false;
275  }
276
277  @Override
278  public HRegion getRegion(String encodedRegionName) {
279    return null;
280  }
281
282  @Override
283  public Configuration getConfiguration() {
284    return this.conf;
285  }
286
287  @Override
288  public ZKWatcher getZooKeeper() {
289    return this.zkw;
290  }
291
292  @Override
293  public CoordinatedStateManager getCoordinatedStateManager() {
294    return null;
295  }
296
297  @Override
298  public ClusterConnection getConnection() {
299    return null;
300  }
301
302  @Override
303  public MetaTableLocator getMetaTableLocator() {
304    return null;
305  }
306
307  @Override
308  public ServerName getServerName() {
309    return this.sn;
310  }
311
312  @Override
313  public boolean isStopping() {
314    return false;
315  }
316
317  @Override
318  public FlushRequester getFlushRequester() {
319    return null;
320  }
321  @Override
322  public CompactionRequester getCompactionRequestor() {
323    return null;
324  }
325  @Override
326  public RegionServerAccounting getRegionServerAccounting() {
327    return null;
328  }
329
330  @Override
331  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {
332    return null;
333  }
334
335  @Override
336  public void postOpenDeployTasks(PostOpenDeployContext context) throws KeeperException,
337      IOException {
338  }
339
340  @Override
341  public RpcServerInterface getRpcServer() {
342    return null;
343  }
344
345  @Override
346  public ConcurrentSkipListMap<byte[], Boolean> getRegionsInTransitionInRS() {
347    return null;
348  }
349
350  @Override
351  public FileSystem getFileSystem() {
352    return null;
353  }
354
355  @Override
356  public GetResponse get(RpcController controller, GetRequest request)
357  throws ServiceException {
358    byte[] regionName = request.getRegion().getValue().toByteArray();
359    Map<byte [], Result> m = this.gets.get(regionName);
360    GetResponse.Builder builder = GetResponse.newBuilder();
361    if (m != null) {
362      byte[] row = request.getGet().getRow().toByteArray();
363      builder.setResult(ProtobufUtil.toResult(m.get(row)));
364    }
365    return builder.build();
366  }
367
368  @Override
369  public MutateResponse mutate(RpcController controller, MutateRequest request)
370      throws ServiceException {
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<>(1);
390          results.add(result);
391          ((HBaseRpcController) 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    return null;
410  }
411
412  @Override
413  public ClientProtos.CoprocessorServiceResponse execService(RpcController controller,
414      ClientProtos.CoprocessorServiceRequest request) throws ServiceException {
415    return null;
416  }
417
418  @Override
419  public ClientProtos.MultiResponse multi(
420      RpcController controller, MultiRequest request) throws ServiceException {
421    return null;
422  }
423
424  @Override
425  public GetRegionInfoResponse getRegionInfo(RpcController controller,
426      GetRegionInfoRequest request) throws ServiceException {
427    GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();
428    builder.setRegionInfo(ProtobufUtil.toRegionInfo(RegionInfoBuilder.FIRST_META_REGIONINFO));
429    return builder.build();
430  }
431
432  @Override
433  public GetRegionLoadResponse getRegionLoad(RpcController controller,
434      GetRegionLoadRequest request) throws ServiceException {
435    GetRegionLoadResponse.Builder builder = GetRegionLoadResponse.newBuilder();
436    return builder.build();
437  }
438
439  @Override
440  public ClearCompactionQueuesResponse clearCompactionQueues(RpcController controller,
441    ClearCompactionQueuesRequest request) throws ServiceException {
442    return null;
443  }
444
445  @Override
446  public GetStoreFileResponse getStoreFile(RpcController controller,
447      GetStoreFileRequest request) throws ServiceException {
448    return null;
449  }
450
451  @Override
452  public GetOnlineRegionResponse getOnlineRegion(RpcController controller,
453      GetOnlineRegionRequest request) throws ServiceException {
454    return null;
455  }
456
457  @Override
458  public List<Region> getRegions() {
459    return null;
460  }
461
462  @Override
463  public OpenRegionResponse openRegion(RpcController controller,
464      OpenRegionRequest request) throws ServiceException {
465    return null;
466  }
467
468  @Override
469  public WarmupRegionResponse warmupRegion(RpcController controller,
470      WarmupRegionRequest request) throws ServiceException {
471    return null;
472  }
473  @Override
474  public CloseRegionResponse closeRegion(RpcController controller,
475      CloseRegionRequest request) throws ServiceException {
476    return null;
477  }
478
479  @Override
480  public FlushRegionResponse flushRegion(RpcController controller,
481      FlushRegionRequest request) throws ServiceException {
482    return null;
483  }
484
485  @Override
486  public CompactRegionResponse compactRegion(RpcController controller,
487      CompactRegionRequest request) throws ServiceException {
488    return null;
489  }
490
491  @Override
492  public ReplicateWALEntryResponse replicateWALEntry(RpcController controller,
493      ReplicateWALEntryRequest request) throws ServiceException {
494    return null;
495  }
496
497  @Override
498  public RollWALWriterResponse rollWALWriter(RpcController controller,
499      RollWALWriterRequest request) throws ServiceException {
500    return null;
501  }
502
503  @Override
504  public GetServerInfoResponse getServerInfo(RpcController controller,
505      GetServerInfoRequest request) throws ServiceException {
506    return null;
507  }
508
509  @Override
510  public StopServerResponse stopServer(RpcController controller,
511      StopServerRequest request) throws ServiceException {
512    return null;
513  }
514
515  @Override
516  public List<Region> getRegions(TableName tableName) throws IOException {
517    return null;
518  }
519
520  @Override
521  public Leases getLeases() {
522    return null;
523  }
524
525  @Override
526  public List<WAL> getWALs() throws IOException {
527    return Collections.emptyList();
528  }
529
530  @Override
531  public WAL getWAL(RegionInfo regionInfo) throws IOException {
532    return null;
533  }
534
535  @Override
536  public ExecutorService getExecutorService() {
537    return null;
538  }
539
540  @Override
541  public ChoreService getChoreService() {
542    return null;
543  }
544
545  @Override
546  public void updateRegionFavoredNodesMapping(String encodedRegionName,
547      List<org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName> favoredNodes) {
548  }
549
550  @Override
551  public InetSocketAddress[] getFavoredNodesForRegion(String encodedRegionName) {
552    return null;
553  }
554
555  @Override
556  public ReplicateWALEntryResponse
557      replay(RpcController controller, ReplicateWALEntryRequest request)
558      throws ServiceException {
559    return null;
560  }
561
562  @Override
563  public UpdateFavoredNodesResponse updateFavoredNodes(RpcController controller,
564      UpdateFavoredNodesRequest request) throws ServiceException {
565    return null;
566  }
567
568  @Override
569  public ServerNonceManager getNonceManager() {
570    return null;
571  }
572
573  @Override
574  public boolean reportRegionStateTransition(RegionStateTransitionContext context) {
575    return false;
576  }
577
578  @Override
579  public boolean registerService(com.google.protobuf.Service service) {
580    return false;
581  }
582
583  @Override
584  public CoprocessorServiceResponse execRegionServerService(RpcController controller,
585      CoprocessorServiceRequest request) throws ServiceException {
586    return null;
587  }
588
589  @Override
590  public UpdateConfigurationResponse updateConfiguration(
591      RpcController controller, UpdateConfigurationRequest request)
592      throws ServiceException {
593    return null;
594  }
595
596  @Override
597  public ClearRegionBlockCacheResponse clearRegionBlockCache(RpcController controller,
598                                                             ClearRegionBlockCacheRequest request)
599    throws ServiceException {
600    return null;
601  }
602
603  @Override
604  public HeapMemoryManager getHeapMemoryManager() {
605    return null;
606  }
607
608  @Override
609  public double getCompactionPressure() {
610    return 0;
611  }
612
613  @Override
614  public ClusterConnection getClusterConnection() {
615    return null;
616  }
617
618  @Override
619  public ThroughputController getFlushThroughputController() {
620    return null;
621  }
622
623  @Override
624  public double getFlushPressure() {
625    return 0;
626  }
627
628  @Override
629  public MetricsRegionServer getMetrics() {
630    return null;
631  }
632
633  @Override
634  public EntityLock regionLock(List<RegionInfo> regionInfos, String description, Abortable abort)
635      throws IOException {
636    return null;
637  }
638
639  @Override
640  public PrepareBulkLoadResponse prepareBulkLoad(RpcController controller,
641      PrepareBulkLoadRequest request) throws ServiceException {
642    return null;
643  }
644
645  @Override
646  public CleanupBulkLoadResponse cleanupBulkLoad(RpcController controller,
647      CleanupBulkLoadRequest request) throws ServiceException {
648    return null;
649  }
650
651  @Override
652  public SecureBulkLoadManager getSecureBulkLoadManager() {
653    return null;
654  }
655
656  @Override
657  public void unassign(byte[] regionName) throws IOException {
658  }
659
660  @Override
661  public RegionServerSpaceQuotaManager getRegionServerSpaceQuotaManager() {
662    return null;
663  }
664
665  @Override
666  public ExecuteProceduresResponse executeProcedures(RpcController controller,
667      ExecuteProceduresRequest request) throws ServiceException {
668    return null;
669  }
670
671  @Override
672  public GetSpaceQuotaSnapshotsResponse getSpaceQuotaSnapshots(
673      RpcController controller, GetSpaceQuotaSnapshotsRequest request)
674      throws ServiceException {
675    return null;
676  }
677
678  @Override
679  public Connection createConnection(Configuration conf) throws IOException {
680    return null;
681  }
682
683  @Override
684  public boolean isClusterUp() {
685    return true;
686  }
687}