diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure2/store/region/RegionProcedureStore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure2/store/region/RegionProcedureStore.java index 3d01b01fc4..a550d0f319 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure2/store/region/RegionProcedureStore.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure2/store/region/RegionProcedureStore.java @@ -23,22 +23,34 @@ import static org.apache.hadoop.hbase.HConstants.NO_NONCE; import java.io.IOException; import java.io.UncheckedIOException; +import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; +import java.util.concurrent.ConcurrentMap; +import com.google.protobuf.Service; import org.apache.commons.lang3.mutable.MutableLong; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; +import org.apache.hadoop.hbase.Abortable; import org.apache.hadoop.hbase.Cell; +import org.apache.hadoop.hbase.ChoreService; +import org.apache.hadoop.hbase.CoordinatedStateManager; import org.apache.hadoop.hbase.HBaseIOException; import org.apache.hadoop.hbase.Server; +import org.apache.hadoop.hbase.ServerName; +import org.apache.hadoop.hbase.TableDescriptors; import org.apache.hadoop.hbase.TableName; +import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder; +import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.client.Mutation; import org.apache.hadoop.hbase.client.Put; @@ -47,6 +59,11 @@ import org.apache.hadoop.hbase.client.RegionInfoBuilder; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.client.TableDescriptor; import org.apache.hadoop.hbase.client.TableDescriptorBuilder; +import org.apache.hadoop.hbase.client.locking.EntityLock; +import org.apache.hadoop.hbase.executor.ExecutorService; +import org.apache.hadoop.hbase.io.hfile.BlockCache; +import org.apache.hadoop.hbase.ipc.RpcCall; +import org.apache.hadoop.hbase.ipc.RpcServerInterface; import org.apache.hadoop.hbase.log.HBaseMarkers; import org.apache.hadoop.hbase.master.HMaster; import org.apache.hadoop.hbase.master.assignment.AssignProcedure; @@ -56,22 +73,41 @@ import org.apache.hadoop.hbase.master.cleaner.DirScanPool; import org.apache.hadoop.hbase.master.cleaner.HFileCleaner; import org.apache.hadoop.hbase.master.procedure.RecoverMetaProcedure; import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure; +import org.apache.hadoop.hbase.mob.MobFileCache; import org.apache.hadoop.hbase.procedure2.Procedure; import org.apache.hadoop.hbase.procedure2.ProcedureUtil; import org.apache.hadoop.hbase.procedure2.store.LeaseRecovery; import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreBase; import org.apache.hadoop.hbase.procedure2.store.ProcedureTree; import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore; +import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager; +import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager; +import org.apache.hadoop.hbase.quotas.RegionSizeStore; +import org.apache.hadoop.hbase.regionserver.FlushRequester; import org.apache.hadoop.hbase.regionserver.HRegion; import org.apache.hadoop.hbase.regionserver.HRegionFileSystem; +import org.apache.hadoop.hbase.regionserver.HeapMemoryManager; +import org.apache.hadoop.hbase.regionserver.LeaseManager; +import org.apache.hadoop.hbase.regionserver.MetricsRegionServer; +import org.apache.hadoop.hbase.regionserver.Region; import org.apache.hadoop.hbase.regionserver.RegionScanner; +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.compactions.CompactionRequester; +import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController; import org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL; +import org.apache.hadoop.hbase.security.access.AccessChecker; +import org.apache.hadoop.hbase.security.access.ZKPermissionWatcher; +import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.CommonFSUtils; import org.apache.hadoop.hbase.util.HFileArchiveUtil; import org.apache.hadoop.hbase.wal.AbstractFSWALProvider; import org.apache.hadoop.hbase.wal.WAL; import org.apache.hadoop.hbase.wal.WALFactory; +import org.apache.hadoop.hbase.zookeeper.ZKWatcher; import org.apache.yetus.audience.InterfaceAudience; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -267,8 +303,206 @@ public class RegionProcedureStore extends ProcedureStoreBase { throw new IOException("Can not rename " + tmpTableDir + " to " + tableDir); } WAL wal = createWAL(fs, rootDir, regionInfo); - return HRegion.openHRegionFromTableDir(conf, fs, tableDir, regionInfo, TABLE_DESC, wal, null, - null); + return HRegion.openHRegionFromTableDir(conf, fs, tableDir, regionInfo, TABLE_DESC, wal, + new RegionServerServices() { + @Override public Optional getCurrentCall() { + return Optional.empty(); + } + + @Override public WAL getWAL(RegionInfo regionInfo) throws IOException { + return null; + } + + @Override public List getWALs() throws IOException { + return null; + } + + @Override public FlushRequester getFlushRequester() { + return null; + } + + @Override public CompactionRequester getCompactionRequestor() { + return null; + } + + @Override public RegionServerAccounting getRegionServerAccounting() { + return null; + } + + @Override public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() { + return null; + } + + @Override public SecureBulkLoadManager getSecureBulkLoadManager() { + return null; + } + + @Override public RegionServerSpaceQuotaManager getRegionServerSpaceQuotaManager() { + return null; + } + + @Override public void postOpenDeployTasks(PostOpenDeployContext context) + throws IOException { + } + + @Override public boolean reportRegionStateTransition(RegionStateTransitionContext context) { + return false; + } + + @Override public RpcServerInterface getRpcServer() { + return null; + } + + @Override public ConcurrentMap getRegionsInTransitionInRS() { + return null; + } + + @Override public LeaseManager getLeaseManager() { + return null; + } + + @Override public ExecutorService getExecutorService() { + return null; + } + + @Override public ServerNonceManager getNonceManager() { + return null; + } + + @Override public boolean registerService(Service service) { + return false; + } + + @Override public HeapMemoryManager getHeapMemoryManager() { + return null; + } + + @Override public double getCompactionPressure() { + return 0; + } + + @Override public ThroughputController getFlushThroughputController() { + return null; + } + + @Override public double getFlushPressure() { + return 0; + } + + @Override public MetricsRegionServer getMetrics() { + return null; + } + + @Override public EntityLock regionLock(List regionInfos, String description, + Abortable abort) throws IOException { + return null; + } + + @Override public void unassign(byte[] regionName) throws IOException {} + + @Override public boolean isClusterUp() { + return false; + } + + @Override public TableDescriptors getTableDescriptors() { + return null; + } + + @Override public Optional getBlockCache() { + return Optional.empty(); + } + + @Override public Optional getMobFileCache() { + return Optional.empty(); + } + + @Override public AccessChecker getAccessChecker() { + return null; + } + + @Override public ZKPermissionWatcher getZKPermissionWatcher() { + return null; + } + + @Override public boolean reportRegionSizesForQuotas(RegionSizeStore sizeStore) { + return false; + } + + @Override public boolean reportFileArchivalForQuotas(TableName tableName, + Collection> archivedFiles) { + return false; + } + + @Override public Configuration getConfiguration() { + return null; + } + + @Override public ZKWatcher getZooKeeper() { + return null; + } + + @Override public Connection getConnection() { + return null; + } + + @Override public Connection createConnection(Configuration conf) throws IOException { + return null; + } + + @Override public ClusterConnection getClusterConnection() { + return null; + } + + @Override public ServerName getServerName() { + return null; + } + + @Override public CoordinatedStateManager getCoordinatedStateManager() { + return null; + } + + @Override public ChoreService getChoreService() { + return null; + } + + @Override public void abort(String why, Throwable e) {} + + @Override public boolean isAborted() { + return false; + } + + @Override public void stop(String why) {} + + @Override public boolean isStopped() { + return false; + } + + @Override public void updateRegionFavoredNodesMapping(String encodedRegionName, + List favoredNodes) { + } + + @Override public InetSocketAddress[] getFavoredNodesForRegion(String encodedRegionName) { + return new InetSocketAddress[0]; + } + + @Override public void addRegion(HRegion r) {} + + @Override public boolean removeRegion(HRegion r, ServerName destination) { + return false; + } + + @Override public Region getRegion(String encodedRegionName) { + return null; + } + + @Override public List getRegions(TableName tableName) throws IOException { + return null; + } + + @Override public List getRegions() { + return null; + } + }, null); } private HRegion open(Configuration conf, FileSystem fs, Path rootDir) throws IOException { diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java index dac034d3be..c2af7ae559 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java @@ -5960,7 +5960,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi int timeout = rowLockWaitDuration; boolean reachDeadlineFirst = false; - Optional call = RpcServer.getCurrentCall(); + Optional call = getRegionServerServices().getCurrentCall(); if (call.isPresent()) { long deadline = call.get().getDeadline(); if (deadline < Long.MAX_VALUE) { @@ -6742,7 +6742,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi if (scannerContext == null) { throw new IllegalArgumentException("Scanner context cannot be null"); } - Optional rpcCall = RpcServer.getCurrentCall(); + Optional rpcCall = getRegionServerServices().getCurrentCall(); // Save the initial progress from the Scanner context in these local variables. The progress // may need to be reset a few times if rows are being filtered out so we save the initial diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java index bf531f47a3..93054c4dfd 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java @@ -1,5 +1,4 @@ -/** - * +/* * 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 @@ -33,6 +32,8 @@ import org.apache.hadoop.hbase.client.RegionInfo; import org.apache.hadoop.hbase.client.locking.EntityLock; import org.apache.hadoop.hbase.executor.ExecutorService; import org.apache.hadoop.hbase.io.hfile.BlockCache; +import org.apache.hadoop.hbase.ipc.RpcCall; +import org.apache.hadoop.hbase.ipc.RpcServer; import org.apache.hadoop.hbase.ipc.RpcServerInterface; import org.apache.hadoop.hbase.mob.MobFileCache; import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager; @@ -44,7 +45,6 @@ import org.apache.hadoop.hbase.security.access.AccessChecker; import org.apache.hadoop.hbase.security.access.ZKPermissionWatcher; import org.apache.hadoop.hbase.wal.WAL; import org.apache.yetus.audience.InterfaceAudience; - import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode; /** @@ -57,11 +57,11 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProto public interface RegionServerServices extends Server, MutableOnlineRegions, FavoredNodesForRegion { /** @return the WAL for a particular region. Pass null for getting the - * default (common) WAL */ + * default (common) WAL */ WAL getWAL(RegionInfo regionInfo) throws IOException; /** @return the List of WALs that are used by this server - * Doesn't include the meta WAL + * Doesn't include the meta WAL */ List getWALs() throws IOException; @@ -238,6 +238,7 @@ public interface RegionServerServices extends Server, MutableOnlineRegions, Favo * @return the flush pressure of all stores on this regionserver. The value should be greater than * or equal to 0.0, and any value greater than 1.0 means we enter the emergency state that * global memstore size already exceeds lower limit. + * @deprecated Since 2.0.0, to be removed in 3.0.0. No replacement. */ @Deprecated double getFlushPressure(); @@ -311,4 +312,11 @@ public interface RegionServerServices extends Server, MutableOnlineRegions, Favo */ boolean reportFileArchivalForQuotas( TableName tableName, Collection> archivedFiles); + + /** + * @return The currently ongoing Rpc Call. + */ + default Optional getCurrentCall() { + return RpcServer.getCurrentCall(); + } }