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}