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