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