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; 019 020import java.io.IOException; 021import java.net.InetSocketAddress; 022import java.util.Collection; 023import java.util.Collections; 024import java.util.HashMap; 025import java.util.List; 026import java.util.Map; 027import java.util.Map.Entry; 028import java.util.Optional; 029import java.util.concurrent.ConcurrentSkipListMap; 030import java.util.concurrent.atomic.AtomicBoolean; 031import org.apache.hadoop.conf.Configuration; 032import org.apache.hadoop.fs.FileSystem; 033import org.apache.hadoop.hbase.client.AsyncClusterConnection; 034import org.apache.hadoop.hbase.client.Connection; 035import org.apache.hadoop.hbase.client.RegionInfo; 036import org.apache.hadoop.hbase.client.locking.EntityLock; 037import org.apache.hadoop.hbase.executor.ExecutorService; 038import org.apache.hadoop.hbase.fs.HFileSystem; 039import org.apache.hadoop.hbase.io.hfile.BlockCache; 040import org.apache.hadoop.hbase.ipc.RpcServerInterface; 041import org.apache.hadoop.hbase.keymeta.KeyManagementService; 042import org.apache.hadoop.hbase.keymeta.KeymetaAdmin; 043import org.apache.hadoop.hbase.keymeta.ManagedKeyDataCache; 044import org.apache.hadoop.hbase.keymeta.SystemKeyCache; 045import org.apache.hadoop.hbase.mob.MobFileCache; 046import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager; 047import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager; 048import org.apache.hadoop.hbase.quotas.RegionSizeStore; 049import org.apache.hadoop.hbase.regionserver.FlushRequester; 050import org.apache.hadoop.hbase.regionserver.HRegion; 051import org.apache.hadoop.hbase.regionserver.HeapMemoryManager; 052import org.apache.hadoop.hbase.regionserver.LeaseManager; 053import org.apache.hadoop.hbase.regionserver.MetricsRegionServer; 054import org.apache.hadoop.hbase.regionserver.RegionServerAccounting; 055import org.apache.hadoop.hbase.regionserver.RegionServerServices; 056import org.apache.hadoop.hbase.regionserver.ReplicationSourceService; 057import org.apache.hadoop.hbase.regionserver.SecureBulkLoadManager; 058import org.apache.hadoop.hbase.regionserver.ServerNonceManager; 059import org.apache.hadoop.hbase.regionserver.compactions.CompactionRequester; 060import org.apache.hadoop.hbase.regionserver.regionreplication.RegionReplicationBufferManager; 061import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController; 062import org.apache.hadoop.hbase.security.access.AccessChecker; 063import org.apache.hadoop.hbase.security.access.ZKPermissionWatcher; 064import org.apache.hadoop.hbase.util.Bytes; 065import org.apache.hadoop.hbase.wal.WAL; 066import org.apache.hadoop.hbase.zookeeper.ZKWatcher; 067import org.apache.yetus.audience.InterfaceAudience; 068import org.slf4j.Logger; 069import org.slf4j.LoggerFactory; 070 071import org.apache.hbase.thirdparty.com.google.protobuf.Service; 072 073import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos; 074 075/** 076 * Basic mock region server services. Should only be instantiated by HBaseTestingUtility.b 077 */ 078@InterfaceAudience.Private 079public class MockRegionServerServices implements RegionServerServices { 080 protected static final Logger LOG = LoggerFactory.getLogger(MockRegionServerServices.class); 081 private final Map<String, HRegion> regions = new HashMap<>(); 082 private final ConcurrentSkipListMap<byte[], Boolean> rit = 083 new ConcurrentSkipListMap<>(Bytes.BYTES_COMPARATOR); 084 private HFileSystem hfs = null; 085 private final Configuration conf; 086 private ZKWatcher zkw = null; 087 private ServerName serverName = null; 088 private RpcServerInterface rpcServer = null; 089 private volatile boolean abortRequested; 090 private volatile boolean stopping = false; 091 private final AtomicBoolean running = new AtomicBoolean(true); 092 093 public MockRegionServerServices(ZKWatcher zkw) { 094 this(zkw, null); 095 } 096 097 public MockRegionServerServices(ZKWatcher zkw, ServerName serverName) { 098 this.zkw = zkw; 099 this.serverName = serverName; 100 this.conf = (zkw == null ? new Configuration() : zkw.getConfiguration()); 101 } 102 103 public MockRegionServerServices() { 104 this(null, null); 105 } 106 107 public MockRegionServerServices(Configuration conf) { 108 this.conf = conf; 109 } 110 111 @Override 112 public boolean removeRegion(HRegion r, ServerName destination) { 113 return this.regions.remove(r.getRegionInfo().getEncodedName()) != null; 114 } 115 116 @Override 117 public HRegion getRegion(String encodedRegionName) { 118 return this.regions.get(encodedRegionName); 119 } 120 121 @Override 122 public List<HRegion> getRegions(TableName tableName) throws IOException { 123 return null; 124 } 125 126 @Override 127 public List<HRegion> getRegions() { 128 return null; 129 } 130 131 @Override 132 public void addRegion(HRegion r) { 133 this.regions.put(r.getRegionInfo().getEncodedName(), r); 134 } 135 136 @Override 137 public void postOpenDeployTasks(PostOpenDeployContext context) throws IOException { 138 addRegion(context.getRegion()); 139 } 140 141 @Override 142 public boolean isStopping() { 143 return this.stopping; 144 } 145 146 @Override 147 public RpcServerInterface getRpcServer() { 148 return rpcServer; 149 } 150 151 public void setRpcServer(RpcServerInterface rpc) { 152 this.rpcServer = rpc; 153 } 154 155 @Override 156 public ConcurrentSkipListMap<byte[], Boolean> getRegionsInTransitionInRS() { 157 return rit; 158 } 159 160 @Override 161 public FlushRequester getFlushRequester() { 162 return null; 163 } 164 165 @Override 166 public CompactionRequester getCompactionRequestor() { 167 return null; 168 } 169 170 @Override 171 public Connection getConnection() { 172 return null; 173 } 174 175 @Override 176 public ZKWatcher getZooKeeper() { 177 return zkw; 178 } 179 180 @Override 181 public CoordinatedStateManager getCoordinatedStateManager() { 182 return null; 183 } 184 185 @Override 186 public RegionServerAccounting getRegionServerAccounting() { 187 return null; 188 } 189 190 @Override 191 public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() { 192 return null; 193 } 194 195 @Override 196 public ServerName getServerName() { 197 return this.serverName; 198 } 199 200 @Override 201 public Configuration getConfiguration() { 202 return conf; 203 } 204 205 @Override 206 public void abort(String why, Throwable e) { 207 this.abortRequested = true; 208 stop(why); 209 } 210 211 @Override 212 public void stop(String why) { 213 this.stopping = true; 214 if (running.compareAndSet(true, false)) { 215 LOG.info("Shutting down due to request '" + why + "'"); 216 } 217 } 218 219 @Override 220 public boolean isStopped() { 221 return !(running.get()); 222 } 223 224 @Override 225 public boolean isAborted() { 226 return this.abortRequested; 227 } 228 229 @Override 230 public HFileSystem getFileSystem() { 231 return this.hfs; 232 } 233 234 public void setFileSystem(FileSystem hfs) { 235 this.hfs = (HFileSystem) hfs; 236 } 237 238 @Override 239 public LeaseManager getLeaseManager() { 240 return null; 241 } 242 243 @Override 244 public List<WAL> getWALs() throws IOException { 245 return Collections.emptyList(); 246 } 247 248 @Override 249 public WAL getWAL(RegionInfo regionInfo) throws IOException { 250 return null; 251 } 252 253 @Override 254 public ExecutorService getExecutorService() { 255 return null; 256 } 257 258 @Override 259 public ChoreService getChoreService() { 260 return null; 261 } 262 263 @Override 264 public SystemKeyCache getSystemKeyCache() { 265 return null; 266 } 267 268 @Override 269 public ManagedKeyDataCache getManagedKeyDataCache() { 270 return null; 271 } 272 273 @Override 274 public KeymetaAdmin getKeymetaAdmin() { 275 return null; 276 } 277 278 @Override 279 public void updateRegionFavoredNodesMapping(String encodedRegionName, 280 List<HBaseProtos.ServerName> favoredNodes) { 281 } 282 283 @Override 284 public InetSocketAddress[] getFavoredNodesForRegion(String encodedRegionName) { 285 return null; 286 } 287 288 @Override 289 public ServerNonceManager getNonceManager() { 290 return null; 291 } 292 293 @Override 294 public boolean reportRegionStateTransition(RegionStateTransitionContext context) { 295 return false; 296 } 297 298 @Override 299 public boolean registerService(Service service) { 300 return false; 301 } 302 303 @Override 304 public HeapMemoryManager getHeapMemoryManager() { 305 return null; 306 } 307 308 @Override 309 public double getCompactionPressure() { 310 return 0; 311 } 312 313 @Override 314 public ThroughputController getFlushThroughputController() { 315 return null; 316 } 317 318 @Override 319 public double getFlushPressure() { 320 return 0; 321 } 322 323 @Override 324 public MetricsRegionServer getMetrics() { 325 return null; 326 } 327 328 @Override 329 public EntityLock regionLock(List<RegionInfo> regionInfos, String description, Abortable abort) 330 throws IOException { 331 return null; 332 } 333 334 @Override 335 public SecureBulkLoadManager getSecureBulkLoadManager() { 336 return null; 337 } 338 339 @Override 340 public void unassign(byte[] regionName) throws IOException { 341 } 342 343 @Override 344 public RegionServerSpaceQuotaManager getRegionServerSpaceQuotaManager() { 345 return null; 346 } 347 348 @Override 349 public Connection createConnection(Configuration conf) throws IOException { 350 return null; 351 } 352 353 @Override 354 public boolean reportRegionSizesForQuotas(RegionSizeStore sizeStore) { 355 return true; 356 } 357 358 @Override 359 public boolean reportFileArchivalForQuotas(TableName tableName, 360 Collection<Entry<String, Long>> archivedFiles) { 361 return true; 362 } 363 364 @Override 365 public boolean isClusterUp() { 366 return true; 367 } 368 369 @Override 370 public ReplicationSourceService getReplicationSourceService() { 371 return null; 372 } 373 374 @Override 375 public TableDescriptors getTableDescriptors() { 376 return null; 377 } 378 379 @Override 380 public Optional<BlockCache> getBlockCache() { 381 return Optional.empty(); 382 } 383 384 @Override 385 public Optional<MobFileCache> getMobFileCache() { 386 return Optional.empty(); 387 } 388 389 @Override 390 public AccessChecker getAccessChecker() { 391 return null; 392 } 393 394 @Override 395 public ZKPermissionWatcher getZKPermissionWatcher() { 396 return null; 397 } 398 399 @Override 400 public AsyncClusterConnection getAsyncClusterConnection() { 401 return null; 402 } 403 404 @Override 405 public RegionReplicationBufferManager getRegionReplicationBufferManager() { 406 return null; 407 } 408 409 @Override 410 public KeyManagementService getKeyManagementService() { 411 return this; 412 } 413}