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}