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}