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