Return-Path: X-Original-To: apmail-hbase-commits-archive@www.apache.org Delivered-To: apmail-hbase-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id E7E951899B for ; Fri, 18 Dec 2015 16:42:38 +0000 (UTC) Received: (qmail 71898 invoked by uid 500); 18 Dec 2015 16:42:36 -0000 Delivered-To: apmail-hbase-commits-archive@hbase.apache.org Received: (qmail 71761 invoked by uid 500); 18 Dec 2015 16:42:36 -0000 Mailing-List: contact commits-help@hbase.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@hbase.apache.org Delivered-To: mailing list commits@hbase.apache.org Received: (qmail 69922 invoked by uid 99); 18 Dec 2015 16:42:35 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 18 Dec 2015 16:42:35 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 6DA30E0441; Fri, 18 Dec 2015 16:42:35 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: misty@apache.org To: commits@hbase.apache.org Date: Fri, 18 Dec 2015 16:42:59 -0000 Message-Id: <78bc4ba8f8024da29f4a1d4f661cf1f2@git.apache.org> In-Reply-To: <2b06700c24844cf38cd4158783c0e9ba@git.apache.org> References: <2b06700c24844cf38cd4158783c0e9ba@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [26/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5. http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html ---------------------------------------------------------------------- diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html index feed20b..abb8a15 100644 --- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html +++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html @@ -31,2767 +31,2812 @@ 023import java.net.BindException; 024import java.net.InetSocketAddress; 025import java.net.UnknownHostException; -026import java.util.ArrayList; -027import java.util.Collections; -028import java.util.HashMap; -029import java.util.Iterator; -030import java.util.List; -031import java.util.Map; -032import java.util.Map.Entry; -033import java.util.NavigableMap; -034import java.util.Set; -035import java.util.TreeSet; -036import java.util.concurrent.ConcurrentHashMap; -037import java.util.concurrent.atomic.AtomicLong; -038 -039import org.apache.commons.logging.Log; -040import org.apache.commons.logging.LogFactory; -041import org.apache.hadoop.conf.Configuration; -042import org.apache.hadoop.hbase.Cell; -043import org.apache.hadoop.hbase.CellScannable; -044import org.apache.hadoop.hbase.CellScanner; -045import org.apache.hadoop.hbase.CellUtil; -046import org.apache.hadoop.hbase.DoNotRetryIOException; -047import org.apache.hadoop.hbase.DroppedSnapshotException; -048import org.apache.hadoop.hbase.HBaseIOException; -049import org.apache.hadoop.hbase.HConstants; -050import org.apache.hadoop.hbase.HRegionInfo; -051import org.apache.hadoop.hbase.HTableDescriptor; -052import org.apache.hadoop.hbase.MultiActionResultTooLarge; -053import org.apache.hadoop.hbase.NotServingRegionException; -054import org.apache.hadoop.hbase.ServerName; -055import org.apache.hadoop.hbase.TableName; -056import org.apache.hadoop.hbase.UnknownScannerException; -057import org.apache.hadoop.hbase.classification.InterfaceAudience; -058import org.apache.hadoop.hbase.client.Append; -059import org.apache.hadoop.hbase.client.ConnectionUtils; -060import org.apache.hadoop.hbase.client.Delete; -061import org.apache.hadoop.hbase.client.Durability; -062import org.apache.hadoop.hbase.client.Get; -063import org.apache.hadoop.hbase.client.Increment; -064import org.apache.hadoop.hbase.client.Mutation; -065import org.apache.hadoop.hbase.client.Put; -066import org.apache.hadoop.hbase.client.RegionReplicaUtil; -067import org.apache.hadoop.hbase.client.Result; -068import org.apache.hadoop.hbase.client.RowMutations; -069import org.apache.hadoop.hbase.client.Scan; -070import org.apache.hadoop.hbase.conf.ConfigurationObserver; -071import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException; -072import org.apache.hadoop.hbase.exceptions.MergeRegionException; -073import org.apache.hadoop.hbase.exceptions.OperationConflictException; -074import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException; -075import org.apache.hadoop.hbase.filter.ByteArrayComparable; -076import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp; -077import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler; -078import org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController; -079import org.apache.hadoop.hbase.ipc.PriorityFunction; -080import org.apache.hadoop.hbase.ipc.QosPriority; -081import org.apache.hadoop.hbase.ipc.RpcCallContext; -082import org.apache.hadoop.hbase.ipc.RpcCallback; -083import org.apache.hadoop.hbase.ipc.RpcServer; -084import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface; -085import org.apache.hadoop.hbase.ipc.RpcServerInterface; -086import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException; -087import org.apache.hadoop.hbase.ipc.ServerRpcController; -088import org.apache.hadoop.hbase.master.MasterRpcServices; -089import org.apache.hadoop.hbase.protobuf.ProtobufUtil; -090import org.apache.hadoop.hbase.protobuf.RequestConverter; -091import org.apache.hadoop.hbase.protobuf.ResponseConverter; -092import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService; -093import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest; -094import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionResponse; -095import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionRequest; -096import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionResponse; -097import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionRequest; -098import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionResponse; -099import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionRequest; -100import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionResponse; -101import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRequest; -102import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse; -103import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoRequest; -104import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoResponse; -105import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileRequest; -106import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileResponse; -107import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsRequest; -108import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsResponse; -109import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest; -110import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo; -111import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse; -112import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState; -113import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest; -114import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryResponse; -115import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest; -116import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterResponse; -117import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionRequest; -118import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionResponse; -119import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest; -120import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerResponse; -121import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationRequest; -122import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationResponse; -123import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest; -124import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse; -125import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry; -126import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionRequest; -127import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionResponse; -128import org.apache.hadoop.hbase.protobuf.generated.ClientProtos; -129import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest; -130import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath; -131import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileResponse; -132import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ClientService; -133import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Condition; -134import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceRequest; -135import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse; -136import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest; -137import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetResponse; -138import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiRequest; -139import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiResponse; -140import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateRequest; -141import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateResponse; -142import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto; -143import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType; -144import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionAction; -145import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionActionResult; -146import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException; -147import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest; -148import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse; -149import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameInt64Pair; -150import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionInfo; -151import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier; -152import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType; -153import org.apache.hadoop.hbase.protobuf.generated.MapReduceProtos.ScanMetrics; -154import org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader; -155import org.apache.hadoop.hbase.protobuf.generated.WALProtos.BulkLoadDescriptor; -156import org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor; -157import org.apache.hadoop.hbase.protobuf.generated.WALProtos.FlushDescriptor; -158import org.apache.hadoop.hbase.protobuf.generated.WALProtos.RegionEventDescriptor; -159import org.apache.hadoop.hbase.quotas.OperationQuota; -160import org.apache.hadoop.hbase.quotas.RegionServerQuotaManager; -161import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl; -162import org.apache.hadoop.hbase.regionserver.Leases.Lease; -163import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException; -164import org.apache.hadoop.hbase.regionserver.Region.FlushResult; -165import org.apache.hadoop.hbase.regionserver.Region.Operation; -166import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope; -167import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler; -168import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler; -169import org.apache.hadoop.hbase.regionserver.wal.WALEdit; -170import org.apache.hadoop.hbase.security.User; -171import org.apache.hadoop.hbase.util.Bytes; -172import org.apache.hadoop.hbase.util.Counter; -173import org.apache.hadoop.hbase.util.DNS; -174import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; -175import org.apache.hadoop.hbase.util.Pair; -176import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil; -177import org.apache.hadoop.hbase.util.Strings; -178import org.apache.hadoop.hbase.wal.WAL; -179import org.apache.hadoop.hbase.wal.WALKey; -180import org.apache.hadoop.hbase.wal.WALSplitter; -181import org.apache.hadoop.hbase.zookeeper.ZKSplitLog; -182import org.apache.zookeeper.KeeperException; -183 -184import com.google.common.annotations.VisibleForTesting; -185import com.google.protobuf.ByteString; -186import com.google.protobuf.Message; -187import com.google.protobuf.RpcController; -188import com.google.protobuf.ServiceException; -189import com.google.protobuf.TextFormat; -190 -191/** -192 * Implements the regionserver RPC services. -193 */ -194@InterfaceAudience.Private -195@SuppressWarnings("deprecation") -196public class RSRpcServices implements HBaseRPCErrorHandler, -197 AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction, -198 ConfigurationObserver { -199 protected static final Log LOG = LogFactory.getLog(RSRpcServices.class); -200 -201 /** RPC scheduler to use for the region server. */ -202 public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS = -203 "hbase.region.server.rpc.scheduler.factory.class"; -204 -205 /** -206 * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This -207 * configuration exists to prevent the scenario where a time limit is specified to be so -208 * restrictive that the time limit is reached immediately (before any cells are scanned). -209 */ -210 private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = -211 "hbase.region.server.rpc.minimum.scan.time.limit.delta"; -212 /** -213 * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA} -214 */ -215 private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10; -216 -217 // Request counter. (Includes requests that are not serviced by regions.) -218 final Counter requestCount = new Counter(); -219 // Server to handle client requests. -220 final RpcServerInterface rpcServer; -221 final InetSocketAddress isa; -222 -223 private final HRegionServer regionServer; -224 private final long maxScannerResultSize; +026import java.nio.ByteBuffer; +027import java.util.ArrayList; +028import java.util.Collections; +029import java.util.HashMap; +030import java.util.Iterator; +031import java.util.List; +032import java.util.Map; +033import java.util.Map.Entry; +034import java.util.NavigableMap; +035import java.util.Set; +036import java.util.TreeSet; +037import java.util.concurrent.ConcurrentHashMap; +038import java.util.concurrent.atomic.AtomicLong; +039 +040import org.apache.commons.logging.Log; +041import org.apache.commons.logging.LogFactory; +042import org.apache.hadoop.conf.Configuration; +043import org.apache.hadoop.hbase.ByteBufferedCell; +044import org.apache.hadoop.hbase.Cell; +045import org.apache.hadoop.hbase.CellScannable; +046import org.apache.hadoop.hbase.CellScanner; +047import org.apache.hadoop.hbase.CellUtil; +048import org.apache.hadoop.hbase.DoNotRetryIOException; +049import org.apache.hadoop.hbase.DroppedSnapshotException; +050import org.apache.hadoop.hbase.HBaseIOException; +051import org.apache.hadoop.hbase.HConstants; +052import org.apache.hadoop.hbase.HRegionInfo; +053import org.apache.hadoop.hbase.HTableDescriptor; +054import org.apache.hadoop.hbase.MultiActionResultTooLarge; +055import org.apache.hadoop.hbase.NotServingRegionException; +056import org.apache.hadoop.hbase.ServerName; +057import org.apache.hadoop.hbase.TableName; +058import org.apache.hadoop.hbase.UnknownScannerException; +059import org.apache.hadoop.hbase.classification.InterfaceAudience; +060import org.apache.hadoop.hbase.client.Append; +061import org.apache.hadoop.hbase.client.ConnectionUtils; +062import org.apache.hadoop.hbase.client.Delete; +063import org.apache.hadoop.hbase.client.Durability; +064import org.apache.hadoop.hbase.client.Get; +065import org.apache.hadoop.hbase.client.Increment; +066import org.apache.hadoop.hbase.client.Mutation; +067import org.apache.hadoop.hbase.client.Put; +068import org.apache.hadoop.hbase.client.RegionReplicaUtil; +069import org.apache.hadoop.hbase.client.Result; +070import org.apache.hadoop.hbase.client.RowMutations; +071import org.apache.hadoop.hbase.client.Scan; +072import org.apache.hadoop.hbase.client.VersionInfoUtil; +073import org.apache.hadoop.hbase.conf.ConfigurationObserver; +074import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException; +075import org.apache.hadoop.hbase.exceptions.MergeRegionException; +076import org.apache.hadoop.hbase.exceptions.OperationConflictException; +077import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException; +078import org.apache.hadoop.hbase.filter.ByteArrayComparable; +079import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp; +080import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler; +081import org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController; +082import org.apache.hadoop.hbase.ipc.PriorityFunction; +083import org.apache.hadoop.hbase.ipc.QosPriority; +084import org.apache.hadoop.hbase.ipc.RpcCallContext; +085import org.apache.hadoop.hbase.ipc.RpcCallback; +086import org.apache.hadoop.hbase.ipc.RpcServer; +087import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface; +088import org.apache.hadoop.hbase.ipc.RpcServerInterface; +089import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException; +090import org.apache.hadoop.hbase.ipc.ServerRpcController; +091import org.apache.hadoop.hbase.master.MasterRpcServices; +092import org.apache.hadoop.hbase.protobuf.ProtobufUtil; +093import org.apache.hadoop.hbase.protobuf.RequestConverter; +094import org.apache.hadoop.hbase.protobuf.ResponseConverter; +095import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService; +096import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest; +097import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionResponse; +098import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionRequest; +099import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionResponse; +100import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionRequest; +101import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionResponse; +102import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionRequest; +103import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionResponse; +104import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRequest; +105import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse; +106import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoRequest; +107import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoResponse; +108import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileRequest; +109import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileResponse; +110import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsRequest; +111import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsResponse; +112import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest; +113import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo; +114import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse; +115import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState; +116import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest; +117import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryResponse; +118import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest; +119import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterResponse; +120import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionRequest; +121import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionResponse; +122import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest; +123import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerResponse; +124import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationRequest; +125import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationResponse; +126import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest; +127import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse; +128import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry; +129import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionRequest; +130import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionResponse; +131import org.apache.hadoop.hbase.protobuf.generated.ClientProtos; +132import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest; +133import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath; +134import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileResponse; +135import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ClientService; +136import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Condition; +137import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceRequest; +138import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse; +139import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest; +140import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetResponse; +141import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiRequest; +142import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiResponse; +143import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateRequest; +144import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateResponse; +145import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto; +146import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType; +147import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionAction; +148import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionActionResult; +149import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException; +150import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest; +151import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse; +152import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameInt64Pair; +153import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionInfo; +154import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier; +155import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType; +156import org.apache.hadoop.hbase.protobuf.generated.MapReduceProtos.ScanMetrics; +157import org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader; +158import org.apache.hadoop.hbase.protobuf.generated.WALProtos.BulkLoadDescriptor; +159import org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor; +160import org.apache.hadoop.hbase.protobuf.generated.WALProtos.FlushDescriptor; +161import org.apache.hadoop.hbase.protobuf.generated.WALProtos.RegionEventDescriptor; +162import org.apache.hadoop.hbase.quotas.OperationQuota; +163import org.apache.hadoop.hbase.quotas.RegionServerQuotaManager; +164import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl; +165import org.apache.hadoop.hbase.regionserver.Leases.Lease; +166import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException; +167import org.apache.hadoop.hbase.regionserver.Region.FlushResult; +168import org.apache.hadoop.hbase.regionserver.Region.Operation; +169import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope; +170import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler; +171import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler; +172import org.apache.hadoop.hbase.regionserver.wal.WALEdit; +173import org.apache.hadoop.hbase.security.User; +174import org.apache.hadoop.hbase.util.Bytes; +175import org.apache.hadoop.hbase.util.Counter; +176import org.apache.hadoop.hbase.util.DNS; +177import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; +178import org.apache.hadoop.hbase.util.Pair; +179import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil; +180import org.apache.hadoop.hbase.util.Strings; +181import org.apache.hadoop.hbase.wal.WAL; +182import org.apache.hadoop.hbase.wal.WALKey; +183import org.apache.hadoop.hbase.wal.WALSplitter; +184import org.apache.hadoop.hbase.zookeeper.ZKSplitLog; +185import org.apache.zookeeper.KeeperException; +186 +187import com.google.common.annotations.VisibleForTesting; +188import com.google.protobuf.ByteString; +189import com.google.protobuf.Message; +190import com.google.protobuf.RpcController; +191import com.google.protobuf.ServiceException; +192import com.google.protobuf.TextFormat; +193 +194/** +195 * Implements the regionserver RPC services. +196 */ +197@InterfaceAudience.Private +198@SuppressWarnings("deprecation") +199public class RSRpcServices implements HBaseRPCErrorHandler, +200 AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction, +201 ConfigurationObserver { +202 protected static final Log LOG = LogFactory.getLog(RSRpcServices.class); +203 +204 /** RPC scheduler to use for the region server. */ +205 public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS = +206 "hbase.region.server.rpc.scheduler.factory.class"; +207 +208 /** +209 * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This +210 * configuration exists to prevent the scenario where a time limit is specified to be so +211 * restrictive that the time limit is reached immediately (before any cells are scanned). +212 */ +213 private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = +214 "hbase.region.server.rpc.minimum.scan.time.limit.delta"; +215 /** +216 * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA} +217 */ +218 private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10; +219 +220 // Request counter. (Includes requests that are not serviced by regions.) +221 final Counter requestCount = new Counter(); +222 // Server to handle client requests. +223 final RpcServerInterface rpcServer; +224 final InetSocketAddress isa; 225 -226 // The reference to the priority extraction function -227 private final PriorityFunction priority; +226 private final HRegionServer regionServer; +227 private final long maxScannerResultSize; 228 -229 private final AtomicLong scannerIdGen = new AtomicLong(0L); -230 private final ConcurrentHashMap<String, RegionScannerHolder> scanners = -231 new ConcurrentHashMap<String, RegionScannerHolder>(); -232 -233 /** -234 * The lease timeout period for client scanners (milliseconds). -235 */ -236 private final int scannerLeaseTimeoutPeriod; -237 -238 /** -239 * The RPC timeout period (milliseconds) -240 */ -241 private final int rpcTimeout; -242 -243 /** -244 * The minimum allowable delta to use for the scan limit -245 */ -246 private final long minimumScanTimeLimitDelta; -247 -248 /** -249 * An Rpc callback for closing a RegionScanner. -250 */ -251 static class RegionScannerCloseCallBack implements RpcCallback { -252 -253 private final RegionScanner scanner; -254 -255 public RegionScannerCloseCallBack(RegionScanner scanner){ -256 this.scanner = scanner; -257 } -258 -259 @Override -260 public void run() throws IOException { -261 this.scanner.close(); -262 } -263 } -264 -265 /** -266 * An Rpc callback for doing shipped() call on a RegionScanner. -267 */ -268 private class RegionScannerShippedCallBack implements RpcCallback { -269 -270 private final String scannerName; -271 private final RegionScanner scanner; -272 private final Lease lease; -273 -274 public RegionScannerShippedCallBack(String scannerName, RegionScanner scanner, Lease lease) { -275 this.scannerName = scannerName; -276 this.scanner = scanner; -277 this.lease = lease; -278 } -279 -280 @Override -281 public void run() throws IOException { -282 this.scanner.shipped(); -283 // We're done. On way out re-add the above removed lease. The lease was temp removed for this -284 // Rpc call and we are at end of the call now. Time to add it back. -285 if (scanners.containsKey(scannerName)) { -286 if (lease != null) regionServer.leases.addLease(lease); -287 } -288 } -289 } -290 -291 /** -292 * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on -293 * completion of multiGets. -294 */ -295 static class RegionScannersCloseCallBack implements RpcCallback { -296 private final List<RegionScanner> scanners = new ArrayList<RegionScanner>(); -297 -298 public void addScanner(RegionScanner scanner) { -299 this.scanners.add(scanner); -300 } -301 -302 @Override -303 public void run() { -304 for (RegionScanner scanner : scanners) { -305 try { -306 scanner.close(); -307 } catch (IOException e) { -308 LOG.error("Exception while closing the scanner " + scanner, e); -309 } -310 } -311 } -312 } -313 -314 /** -315 * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together. -316 */ -317 private static class RegionScannerHolder { -318 private AtomicLong nextCallSeq = new AtomicLong(0); -319 private RegionScanner s; -320 private Region r; -321 final RpcCallback closeCallBack; -322 final RpcCallback shippedCallback; -323 -324 public RegionScannerHolder(RegionScanner s, Region r, RpcCallback closeCallBack, -325 RpcCallback shippedCallback) { -326 this.s = s; -327 this.r = r; -328 this.closeCallBack = closeCallBack; -329 this.shippedCallback = shippedCallback; -330 } -331 -332 private long getNextCallSeq() { -333 return nextCallSeq.get(); -334 } -335 -336 private void incNextCallSeq() { -337 nextCallSeq.incrementAndGet(); -338 } -339 -340 private void rollbackNextCallSeq() { -341 nextCallSeq.decrementAndGet(); -342 } -343 } -344 -345 /** -346 * Instantiated as a scanner lease. If the lease times out, the scanner is -347 * closed -348 */ -349 private class ScannerListener implements LeaseListener { -350 private final String scannerName; -351 -352 ScannerListener(final String n) { -353 this.scannerName = n; -354 } -355 -356 @Override -357 public void leaseExpired() { -358 RegionScannerHolder rsh = scanners.remove(this.scannerName); -359 if (rsh != null) { -360 RegionScanner s = rsh.s; -361 LOG.info("Scanner " + this.scannerName + " lease expired on region " -362 + s.getRegionInfo().getRegionNameAsString()); -363 try { -364 Region region = regionServer.getRegion(s.getRegionInfo().getRegionName()); -365 if (region != null && region.getCoprocessorHost() != null) { -366 region.getCoprocessorHost().preScannerClose(s); -367 } -368 s.close(); -369 if (region != null && region.getCoprocessorHost() != null) { -370 region.getCoprocessorHost().postScannerClose(s); -371 } -372 } catch (IOException e) { -373 LOG.error("Closing scanner for " -374 + s.getRegionInfo().getRegionNameAsString(), e); -375 } -376 } else { -377 LOG.warn("Scanner " + this.scannerName + " lease expired, but no related" + -378 " scanner found, hence no chance to close that related scanner!"); -379 } -380 } -381 } -382 -383 private static ResultOrException getResultOrException( -384 final ClientProtos.Result r, final int index, final ClientProtos.RegionLoadStats stats) { -385 return getResultOrException(ResponseConverter.buildActionResult(r, stats), index); -386 } -387 -388 private static ResultOrException getResultOrException(final Exception e, final int index) { -389 return getResultOrException(ResponseConverter.buildActionResult(e), index); -390 } -391 -392 private static ResultOrException getResultOrException( -393 final ResultOrException.Builder builder, final int index) { -394 return builder.setIndex(index).build(); -395 } -396 -397 /** -398 * Starts the nonce operation for a mutation, if needed. -399 * @param mutation Mutation. -400 * @param nonceGroup Nonce group from the request. -401 * @returns Nonce used (can be NO_NONCE). -402 */ -403 private long startNonceOperation(final MutationProto mutation, long nonceGroup) -404 throws IOException, OperationConflictException { -405 if (regionServer.nonceManager == null || !mutation.hasNonce()) return HConstants.NO_NONCE; -406 boolean canProceed = false; -407 try { -408 canProceed = regionServer.nonceManager.startOperation( -409 nonceGroup, mutation.getNonce(), regionServer); -410 } catch (InterruptedException ex) { -411 throw new InterruptedIOException("Nonce start operation interrupted"); -412 } -413 if (!canProceed) { -414 // TODO: instead, we could convert append/increment to get w/mvcc -415 String message = "The operation with nonce {" + nonceGroup + ", " + mutation.getNonce() -416 + "} on row [" + Bytes.toString(mutation.getRow().toByteArray()) -417 + "] may have already completed"; -418 throw new OperationConflictException(message); -419 } -420 return mutation.getNonce(); -421 } -422 -423 /** -424 * Ends nonce operation for a mutation, if needed. -425 * @param mutation Mutation. -426 * @param nonceGroup Nonce group from the request. Always 0 in initial implementation. -427 * @param success Whether the operation for this nonce has succeeded. -428 */ -429 private void endNonceOperation(final MutationProto mutation, -430 long nonceGroup, boolean success) { -431 if (regionServer.nonceManager != null && mutation.hasNonce()) { -432 regionServer.nonceManager.endOperation(nonceGroup, mutation.getNonce(), success); -433 } -434 } -435 -436 /** -437 * @return True if current call supports cellblocks -438 */ -439 private boolean isClientCellBlockSupport() { -440 RpcCallContext context = RpcServer.getCurrentCall(); -441 return context != null && context.isClientCellBlockSupported(); -442 } -443 -444 private boolean isClientCellBlockSupport(RpcCallContext context) { -445 return context != null && context.isClientCellBlockSupported(); -446 } -447 -448 private void addResult(final MutateResponse.Builder builder, final Result result, -449 final PayloadCarryingRpcController rpcc) { -450 if (result == null) return; -451 if (isClientCellBlockSupport()) { -452 builder.setResult(ProtobufUtil.toResultNoData(result)); -453 rpcc.setCellScanner(result.cellScanner()); -454 } else { -455 ClientProtos.Result pbr = ProtobufUtil.toResult(result); -456 builder.setResult(pbr); -457 } -458 } -459 -460 private void addResults(final ScanResponse.Builder builder, final List<Result> results, -461 final RpcController controller, boolean isDefaultRegion, boolean clientCellBlockSupported) { -462 builder.setStale(!isDefaultRegion); -463 if (results == null || results.isEmpty()) return; -464 if (clientCellBlockSupported) { -465 for (Result res : results) { -466 builder.addCellsPerResult(res.size()); -467 builder.addPartialFlagPerResult(res.isPartial()); -468 } -469 ((PayloadCarryingRpcController)controller). -470 setCellScanner(CellUtil.createCellScanner(results)); -471 } else { -472 for (Result res: results) { -473 ClientProtos.Result pbr = ProtobufUtil.toResult(res); -474 builder.addResults(pbr); -475 } -476 } -477 } -478 -479 /** -480 * Mutate a list of rows atomically. -481 * -482 * @param region -483 * @param actions -484 * @param cellScanner if non-null, the mutation data -- the Cell content. -485 * @throws IOException -486 */ -487 private ClientProtos.RegionLoadStats mutateRows(final Region region, -488 final List<ClientProtos.Action> actions, -489 final CellScanner cellScanner) throws IOException { -490 if (!region.getRegionInfo().isMetaTable()) { -491 regionServer.cacheFlusher.reclaimMemStoreMemory(); -492 } -493 RowMutations rm = null; -494 for (ClientProtos.Action action: actions) { -495 if (action.hasGet()) { -496 throw new DoNotRetryIOException("Atomic put and/or delete only, not a Get=" + -497 action.getGet()); -498 } -499 MutationType type = action.getMutation().getMutateType(); -500 if (rm == null) { -501 rm = new RowMutations(action.getMutation().getRow().toByteArray()); -502 } -503 switch (type) { -504 case PUT: -505 rm.add(ProtobufUtil.toPut(action.getMutation(), cellScanner)); -506 break; -507 case DELETE: -508 rm.add(ProtobufUtil.toDelete(action.getMutation(), cellScanner)); +229 // The reference to the priority extraction function +230 private final PriorityFunction priority; +231 +232 private final AtomicLong scannerIdGen = new AtomicLong(0L); +233 private final ConcurrentHashMap<String, RegionScannerHolder> scanners = +234 new ConcurrentHashMap<String, RegionScannerHolder>(); +235 +236 /** +237 * The lease timeout period for client scanners (milliseconds). +238 */ +239 private final int scannerLeaseTimeoutPeriod; +240 +241 /** +242 * The RPC timeout period (milliseconds) +243 */ +244 private final int rpcTimeout; +245 +246 /** +247 * The minimum allowable delta to use for the scan limit +248 */ +249 private final long minimumScanTimeLimitDelta; +250 +251 /** +252 * An Rpc callback for closing a RegionScanner. +253 */ +254 static class RegionScannerCloseCallBack implements RpcCallback { +255 +256 private final RegionScanner scanner; +257 +258 public RegionScannerCloseCallBack(RegionScanner scanner){ +259 this.scanner = scanner; +260 } +261 +262 @Override +263 public void run() throws IOException { +264 this.scanner.close(); +265 } +266 } +267 +268 /** +269 * An Rpc callback for doing shipped() call on a RegionScanner. +270 */ +271 private class RegionScannerShippedCallBack implements RpcCallback { +272 +273 private final String scannerName; +274 private final RegionScanner scanner; +275 private final Lease lease; +276 +277 public RegionScannerShippedCallBack(String scannerName, RegionScanner scanner, Lease lease) { +278 this.scannerName = scannerName; +279 this.scanner = scanner; +280 this.lease = lease; +281 } +282 +283 @Override +284 public void run() throws IOException { +285 this.scanner.shipped(); +286 // We're done. On way out re-add the above removed lease. The lease was temp removed for this +287 // Rpc call and we are at end of the call now. Time to add it back. +288 if (scanners.containsKey(scannerName)) { +289 if (lease != null) regionServer.leases.addLease(lease); +290 } +291 } +292 } +293 +294 /** +295 * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on +296 * completion of multiGets. +297 */ +298 static class RegionScannersCloseCallBack implements RpcCallback { +299 private final List<RegionScanner> scanners = new ArrayList<RegionScanner>(); +300 +301 public void addScanner(RegionScanner scanner) { +302 this.scanners.add(scanner); +303 } +304 +305 @Override +306 public void run() { +307 for (RegionScanner scanner : scanners) { +308 try { +309 scanner.close(); +310 } catch (IOException e) { +311 LOG.error("Exception while closing the scanner " + scanner, e); +312 } +313 } +314 } +315 } +316 +317 /** +318 * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together. +319 */ +320 private static class RegionScannerHolder { +321 private AtomicLong nextCallSeq = new AtomicLong(0); +322 private RegionScanner s; +323 private Region r; +324 final RpcCallback closeCallBack; +325 final RpcCallback shippedCallback; +326 +327 public RegionScannerHolder(RegionScanner s, Region r, RpcCallback closeCallBack, +328 RpcCallback shippedCallback) { +329 this.s = s; +330 this.r = r; +331 this.closeCallBack = closeCallBack; +332 this.shippedCallback = shippedCallback; +333 } +334 +335 private long getNextCallSeq() { +336 return nextCallSeq.get(); +337 } +338 +339 private void incNextCallSeq() { +340 nextCallSeq.incrementAndGet(); +341 } +342 +343 private void rollbackNextCallSeq() { +344 nextCallSeq.decrementAndGet(); +345 } +346 } +347 +348 /** +349 * Instantiated as a scanner lease. If the lease times out, the scanner is +350 * closed +351 */ +352 private class ScannerListener implements LeaseListener { +353 private final String scannerName; +354 +355 ScannerListener(final String n) { +356 this.scannerName = n; +357 } +358 +359 @Override +360 public void leaseExpired() { +361 RegionScannerHolder rsh = scanners.remove(this.scannerName); +362 if (rsh != null) { +363 RegionScanner s = rsh.s; +364 LOG.info("Scanner " + this.scannerName + " lease expired on region " +365 + s.getRegionInfo().getRegionNameAsString()); +366 try { +367 Region region = regionServer.getRegion(s.getRegionInfo().getRegionName()); +368 if (region != null && region.getCoprocessorHost() != null) { +369 region.getCoprocessorHost().preScannerClose(s); +370 } +371 s.close(); +372 if (region != null && region.getCoprocessorHost() != null) { +373 region.getCoprocessorHost().postScannerClose(s); +374 } +375 } catch (IOException e) { +376 LOG.error("Closing scanner for " +377 + s.getRegionInfo().getRegionNameAsString(), e);