/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.hadoop.hbase; import java.io.IOException; import java.net.InetSocketAddress; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.atomic.AtomicBoolean; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.client.locking.EntityLock; import org.apache.hadoop.hbase.executor.ExecutorService; import org.apache.hadoop.hbase.fs.HFileSystem; import org.apache.hadoop.hbase.ipc.RpcServerInterface; import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos; import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode; import org.apache.hadoop.hbase.quotas.RegionServerQuotaManager; import org.apache.hadoop.hbase.regionserver.CompactionRequestor; import org.apache.hadoop.hbase.regionserver.FlushRequester; import org.apache.hadoop.hbase.regionserver.HeapMemoryManager; import org.apache.hadoop.hbase.regionserver.Leases; import org.apache.hadoop.hbase.regionserver.MetricsRegionServer; import org.apache.hadoop.hbase.regionserver.Region; import org.apache.hadoop.hbase.regionserver.RegionServerAccounting; import org.apache.hadoop.hbase.regionserver.RegionServerServices; import org.apache.hadoop.hbase.regionserver.SecureBulkLoadManager; import org.apache.hadoop.hbase.regionserver.ServerNonceManager; import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.wal.WAL; import org.apache.hadoop.hbase.zookeeper.MetaTableLocator; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; import com.google.protobuf.Service; /** * Basic mock region server services. Should only be instantiated by HBaseTestingUtility.b */ public class MockRegionServerServices implements RegionServerServices { protected static final Log LOG = LogFactory.getLog(MockRegionServerServices.class); private final Map<String, Region> regions = new HashMap<>(); private final ConcurrentSkipListMap<byte[], Boolean> rit = new ConcurrentSkipListMap<>(Bytes.BYTES_COMPARATOR); private HFileSystem hfs = null; private final Configuration conf; private ZooKeeperWatcher zkw = null; private ServerName serverName = null; private RpcServerInterface rpcServer = null; private volatile boolean abortRequested; private volatile boolean stopping = false; private final AtomicBoolean running = new AtomicBoolean(true); MockRegionServerServices(ZooKeeperWatcher zkw) { this(zkw, null); } MockRegionServerServices(ZooKeeperWatcher zkw, ServerName serverName) { this.zkw = zkw; this.serverName = serverName; this.conf = (zkw == null ? new Configuration() : zkw.getConfiguration()); } MockRegionServerServices(){ this(null, null); } public MockRegionServerServices(Configuration conf) { this.conf = conf; } @Override public boolean removeFromOnlineRegions(Region r, ServerName destination) { return this.regions.remove(r.getRegionInfo().getEncodedName()) != null; } @Override public Region getFromOnlineRegions(String encodedRegionName) { return this.regions.get(encodedRegionName); } @Override public List<Region> getOnlineRegions(TableName tableName) throws IOException { return null; } @Override public Set<TableName> getOnlineTables() { return null; } @Override public List<Region> getOnlineRegions() { return null; } @Override public void addToOnlineRegions(Region r) { this.regions.put(r.getRegionInfo().getEncodedName(), r); } @Override public void postOpenDeployTasks(Region r) throws KeeperException, IOException { addToOnlineRegions(r); } @Override public void postOpenDeployTasks(PostOpenDeployContext context) throws KeeperException, IOException { addToOnlineRegions(context.getRegion()); } @Override public boolean isStopping() { return this.stopping; } @Override public RpcServerInterface getRpcServer() { return rpcServer; } public void setRpcServer(RpcServerInterface rpc) { this.rpcServer = rpc; } @Override public ConcurrentSkipListMap<byte[], Boolean> getRegionsInTransitionInRS() { return rit; } @Override public FlushRequester getFlushRequester() { return null; } @Override public CompactionRequestor getCompactionRequester() { return null; } @Override public ClusterConnection getConnection() { return null; } @Override public MetaTableLocator getMetaTableLocator() { return null; } @Override public ZooKeeperWatcher getZooKeeper() { return zkw; } @Override public CoordinatedStateManager getCoordinatedStateManager() { return null; } @Override public RegionServerAccounting getRegionServerAccounting() { return null; } @Override public RegionServerQuotaManager getRegionServerQuotaManager() { return null; } @Override public ServerName getServerName() { return this.serverName; } @Override public Configuration getConfiguration() { return conf; } @Override public void abort(String why, Throwable e) { this.abortRequested = true; stop(why); } @Override public void stop(String why) { this.stopping = true; if (running.compareAndSet(true, false)) { LOG.info("Shutting down due to request '" + why + "'"); } } @Override public boolean isStopped() { return !(running.get()); } @Override public boolean isAborted() { return this.abortRequested; } @Override public HFileSystem getFileSystem() { return this.hfs; } public void setFileSystem(FileSystem hfs) { this.hfs = (HFileSystem)hfs; } @Override public Leases getLeases() { return null; } @Override public List<WAL> getWALs() throws IOException { return Collections.emptyList(); } @Override public WAL getWAL(HRegionInfo regionInfo) throws IOException { return null; } @Override public ExecutorService getExecutorService() { return null; } @Override public ChoreService getChoreService() { return null; } @Override public void updateRegionFavoredNodesMapping(String encodedRegionName, List<HBaseProtos.ServerName> favoredNodes) { } @Override public InetSocketAddress[] getFavoredNodesForRegion(String encodedRegionName) { return null; } @Override public Map<String, Region> getRecoveringRegions() { // TODO Auto-generated method stub return null; } @Override public ServerNonceManager getNonceManager() { // TODO Auto-generated method stub return null; } @Override public boolean reportRegionStateTransition(TransitionCode code, long openSeqNum, HRegionInfo... hris) { return false; } @Override public boolean reportRegionStateTransition(TransitionCode code, HRegionInfo... hris) { return false; } @Override public boolean reportRegionStateTransition(RegionStateTransitionContext context) { return false; } @Override public long requestRegionSplit(final HRegionInfo regionInfo, final byte[] splitRow) { return -1; } @Override public boolean isProcedureFinished(final long procId) { return false; } @Override public boolean registerService(Service service) { // TODO Auto-generated method stub return false; } @Override public HeapMemoryManager getHeapMemoryManager() { return null; } @Override public double getCompactionPressure() { return 0; } @Override public ClusterConnection getClusterConnection() { return null; } @Override public ThroughputController getFlushThroughputController() { return null; } @Override public double getFlushPressure() { return 0; } @Override public MetricsRegionServer getMetrics() { return null; } @Override public EntityLock regionLock(List<HRegionInfo> regionInfos, String description, Abortable abort) throws IOException { return null; } @Override public SecureBulkLoadManager getSecureBulkLoadManager() { return null; } @Override public void unassign(byte[] regionName) throws IOException { } }