Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 2A9F7200CF9 for ; Sun, 23 Jul 2017 17:08:43 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 2948D1643CC; Sun, 23 Jul 2017 15:08:43 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 929B61642FE for ; Sun, 23 Jul 2017 17:08:40 +0200 (CEST) Received: (qmail 67334 invoked by uid 500); 23 Jul 2017 15:08:39 -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 66196 invoked by uid 99); 23 Jul 2017 15:08:37 -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; Sun, 23 Jul 2017 15:08:37 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 8F279F3253; Sun, 23 Jul 2017 15:08:36 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: git-site-role@apache.org To: commits@hbase.apache.org Date: Sun, 23 Jul 2017 15:08:44 -0000 Message-Id: <5357e72def3242ffa9120d4e88d70605@git.apache.org> In-Reply-To: <10dce31be4034f58b712555cb49aa90c@git.apache.org> References: <10dce31be4034f58b712555cb49aa90c@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [09/51] [partial] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd. archived-at: Sun, 23 Jul 2017 15:08:43 -0000 http://git-wip-us.apache.org/repos/asf/hbase-site/blob/0383a9c2/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html ---------------------------------------------------------------------- diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html index a945b54..422c076 100644 --- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html +++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html @@ -92,3454 +92,3410 @@ 084import org.apache.hadoop.hbase.client.VersionInfoUtil; 085import org.apache.hadoop.hbase.conf.ConfigurationObserver; 086import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException; -087import org.apache.hadoop.hbase.exceptions.MergeRegionException; -088import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException; -089import org.apache.hadoop.hbase.exceptions.ScannerResetException; -090import org.apache.hadoop.hbase.filter.ByteArrayComparable; -091import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp; -092import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler; -093import org.apache.hadoop.hbase.ipc.HBaseRpcController; -094import org.apache.hadoop.hbase.ipc.PriorityFunction; -095import org.apache.hadoop.hbase.ipc.QosPriority; -096import org.apache.hadoop.hbase.ipc.RpcCallContext; -097import org.apache.hadoop.hbase.ipc.RpcCallback; -098import org.apache.hadoop.hbase.ipc.RpcServer; -099import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface; -100import org.apache.hadoop.hbase.ipc.RpcServerFactory; -101import org.apache.hadoop.hbase.ipc.RpcServerInterface; -102import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException; -103import org.apache.hadoop.hbase.ipc.ServerRpcController; -104import org.apache.hadoop.hbase.master.MasterRpcServices; -105import org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement; -106import org.apache.hadoop.hbase.quotas.OperationQuota; -107import org.apache.hadoop.hbase.quotas.QuotaUtil; -108import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager; -109import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager; -110import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot; -111import org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement; -112import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl; -113import org.apache.hadoop.hbase.regionserver.Leases.Lease; -114import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException; -115import org.apache.hadoop.hbase.regionserver.Region.Operation; -116import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope; -117import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler; -118import org.apache.hadoop.hbase.regionserver.handler.OpenPriorityRegionHandler; -119import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler; -120import org.apache.hadoop.hbase.regionserver.wal.WALEdit; -121import org.apache.hadoop.hbase.security.Superusers; -122import org.apache.hadoop.hbase.security.User; -123import org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString; -124import org.apache.hadoop.hbase.shaded.com.google.protobuf.Message; -125import org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController; -126import org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException; -127import org.apache.hadoop.hbase.shaded.com.google.protobuf.TextFormat; -128import org.apache.hadoop.hbase.shaded.com.google.protobuf.UnsafeByteOperations; -129import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; -130import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter; -131import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter; -132import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService; -133import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest; -134import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse; -135import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest; -136import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse; -137import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest; -138import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse; -139import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest; -140import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse; -141import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest; -142import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse; -143import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest; -144import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse; -145import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest; -146import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse; -147import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest; -148import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse; -149import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest; -150import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse; -151import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest; -152import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse; -153import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.MergeRegionsRequest; -154import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.MergeRegionsResponse; -155import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest; -156import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo; -157import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse; -158import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState; -159import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest; -160import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse; -161import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest; -162import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse; -163import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.SplitRegionRequest; -164import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.SplitRegionResponse; -165import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest; -166import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse; -167import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest; -168import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse; -169import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest; -170import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse; -171import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry; -172import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest; -173import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse; -174import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos; -175import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action; -176import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest; -177import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath; -178import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileResponse; -179import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadRequest; -180import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadResponse; -181import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService; -182import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Condition; -183import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest; -184import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse; -185import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetRequest; -186import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetResponse; -187import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRegionLoadStats; -188import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest; -189import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse; -190import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateRequest; -191import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse; -192import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto; -193import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto.MutationType; -194import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest; -195import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse; -196import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction; -197import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult; -198import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException; -199import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest; -200import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse; -201import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos; -202import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad; -203import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameBytesPair; -204import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameInt64Pair; -205import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo; -206import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier; -207import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType; -208import org.apache.hadoop.hbase.shaded.protobuf.generated.MapReduceProtos.ScanMetrics; -209import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest; -210import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse; -211import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse.TableQuotaSnapshot; -212import org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader; -213import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor; -214import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor; -215import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor; -216import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor; -217import org.apache.hadoop.hbase.util.Bytes; -218import org.apache.hadoop.hbase.util.DNS; -219import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; -220import org.apache.hadoop.hbase.util.Pair; -221import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil; -222import org.apache.hadoop.hbase.util.Strings; -223import org.apache.hadoop.hbase.wal.WAL; -224import org.apache.hadoop.hbase.wal.WALKey; -225import org.apache.hadoop.hbase.wal.WALSplitter; -226import org.apache.hadoop.hbase.zookeeper.ZKSplitLog; -227import org.apache.zookeeper.KeeperException; -228 -229import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting; -230 -231/** -232 * Implements the regionserver RPC services. -233 */ -234@InterfaceAudience.Private -235@SuppressWarnings("deprecation") -236public class RSRpcServices implements HBaseRPCErrorHandler, -237 AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction, -238 ConfigurationObserver { -239 protected static final Log LOG = LogFactory.getLog(RSRpcServices.class); -240 -241 /** RPC scheduler to use for the region server. */ -242 public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS = -243 "hbase.region.server.rpc.scheduler.factory.class"; -244 -245 /** -246 * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This -247 * configuration exists to prevent the scenario where a time limit is specified to be so -248 * restrictive that the time limit is reached immediately (before any cells are scanned). -249 */ -250 private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = -251 "hbase.region.server.rpc.minimum.scan.time.limit.delta"; -252 /** -253 * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA} -254 */ -255 private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10; -256 -257 /** -258 * Number of rows in a batch operation above which a warning will be logged. -259 */ -260 static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold"; -261 /** -262 * Default value of {@link RSRpcServices#BATCH_ROWS_THRESHOLD_NAME} -263 */ -264 static final int BATCH_ROWS_THRESHOLD_DEFAULT = 1000; +087import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException; +088import org.apache.hadoop.hbase.exceptions.ScannerResetException; +089import org.apache.hadoop.hbase.filter.ByteArrayComparable; +090import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp; +091import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler; +092import org.apache.hadoop.hbase.ipc.HBaseRpcController; +093import org.apache.hadoop.hbase.ipc.PriorityFunction; +094import org.apache.hadoop.hbase.ipc.QosPriority; +095import org.apache.hadoop.hbase.ipc.RpcCallContext; +096import org.apache.hadoop.hbase.ipc.RpcCallback; +097import org.apache.hadoop.hbase.ipc.RpcServer; +098import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface; +099import org.apache.hadoop.hbase.ipc.RpcServerFactory; +100import org.apache.hadoop.hbase.ipc.RpcServerInterface; +101import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException; +102import org.apache.hadoop.hbase.ipc.ServerRpcController; +103import org.apache.hadoop.hbase.master.MasterRpcServices; +104import org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement; +105import org.apache.hadoop.hbase.quotas.OperationQuota; +106import org.apache.hadoop.hbase.quotas.QuotaUtil; +107import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager; +108import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager; +109import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot; +110import org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement; +111import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl; +112import org.apache.hadoop.hbase.regionserver.Leases.Lease; +113import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException; +114import org.apache.hadoop.hbase.regionserver.Region.Operation; +115import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope; +116import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler; +117import org.apache.hadoop.hbase.regionserver.handler.OpenPriorityRegionHandler; +118import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler; +119import org.apache.hadoop.hbase.regionserver.wal.WALEdit; +120import org.apache.hadoop.hbase.security.Superusers; +121import org.apache.hadoop.hbase.security.User; +122import org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString; +123import org.apache.hadoop.hbase.shaded.com.google.protobuf.Message; +124import org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController; +125import org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException; +126import org.apache.hadoop.hbase.shaded.com.google.protobuf.TextFormat; +127import org.apache.hadoop.hbase.shaded.com.google.protobuf.UnsafeByteOperations; +128import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; +129import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter; +130import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter; +131import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService; +132import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest; +133import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse; +134import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest; +135import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse; +136import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest; +137import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse; +138import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest; +139import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse; +140import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest; +141import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse; +142import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest; +143import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse; +144import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest; +145import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse; +146import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest; +147import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse; +148import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest; +149import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse; +150import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest; +151import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse; +152import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest; +153import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo; +154import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse; +155import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState; +156import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest; +157import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse; +158import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest; +159import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse; +160import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.SplitRegionRequest; +161import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.SplitRegionResponse; +162import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest; +163import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse; +164import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest; +165import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse; +166import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest; +167import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse; +168import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry; +169import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest; +170import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse; +171import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos; +172import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action; +173import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest; +174import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath; +175import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileResponse; +176import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadRequest; +177import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadResponse; +178import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService; +179import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Condition; +180import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest; +181import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse; +182import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetRequest; +183import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetResponse; +184import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRegionLoadStats; +185import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest; +186import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse; +187import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateRequest; +188import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse; +189import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto; +190import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto.MutationType; +191import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest; +192import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse; +193import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction; +194import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult; +195import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException; +196import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest; +197import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse; +198import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos; +199import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad; +200import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameBytesPair; +201import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameInt64Pair; +202import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo; +203import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier; +204import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType; +205import org.apache.hadoop.hbase.shaded.protobuf.generated.MapReduceProtos.ScanMetrics; +206import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest; +207import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse; +208import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse.TableQuotaSnapshot; +209import org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader; +210import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor; +211import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor; +212import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor; +213import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor; +214import org.apache.hadoop.hbase.util.Bytes; +215import org.apache.hadoop.hbase.util.DNS; +216import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; +217import org.apache.hadoop.hbase.util.Pair; +218import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil; +219import org.apache.hadoop.hbase.util.Strings; +220import org.apache.hadoop.hbase.wal.WAL; +221import org.apache.hadoop.hbase.wal.WALKey; +222import org.apache.hadoop.hbase.wal.WALSplitter; +223import org.apache.hadoop.hbase.zookeeper.ZKSplitLog; +224import org.apache.zookeeper.KeeperException; +225 +226import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting; +227 +228/** +229 * Implements the regionserver RPC services. +230 */ +231@InterfaceAudience.Private +232@SuppressWarnings("deprecation") +233public class RSRpcServices implements HBaseRPCErrorHandler, +234 AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction, +235 ConfigurationObserver { +236 protected static final Log LOG = LogFactory.getLog(RSRpcServices.class); +237 +238 /** RPC scheduler to use for the region server. */ +239 public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS = +240 "hbase.region.server.rpc.scheduler.factory.class"; +241 +242 /** +243 * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This +244 * configuration exists to prevent the scenario where a time limit is specified to be so +245 * restrictive that the time limit is reached immediately (before any cells are scanned). +246 */ +247 private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = +248 "hbase.region.server.rpc.minimum.scan.time.limit.delta"; +249 /** +250 * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA} +251 */ +252 private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10; +253 +254 /** +255 * Number of rows in a batch operation above which a warning will be logged. +256 */ +257 static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold"; +258 /** +259 * Default value of {@link RSRpcServices#BATCH_ROWS_THRESHOLD_NAME} +260 */ +261 static final int BATCH_ROWS_THRESHOLD_DEFAULT = 1000; +262 +263 // Request counter. (Includes requests that are not serviced by regions.) +264 final LongAdder requestCount = new LongAdder(); 265 -266 // Request counter. (Includes requests that are not serviced by regions.) -267 final LongAdder requestCount = new LongAdder(); +266 // Request counter for rpc get +267 final LongAdder rpcGetRequestCount = new LongAdder(); 268 -269 // Request counter for rpc get -270 final LongAdder rpcGetRequestCount = new LongAdder(); +269 // Request counter for rpc scan +270 final LongAdder rpcScanRequestCount = new LongAdder(); 271 -272 // Request counter for rpc scan -273 final LongAdder rpcScanRequestCount = new LongAdder(); +272 // Request counter for rpc multi +273 final LongAdder rpcMultiRequestCount = new LongAdder(); 274 -275 // Request counter for rpc multi -276 final LongAdder rpcMultiRequestCount = new LongAdder(); +275 // Request counter for rpc mutate +276 final LongAdder rpcMutateRequestCount = new LongAdder(); 277 -278 // Request counter for rpc mutate -279 final LongAdder rpcMutateRequestCount = new LongAdder(); -280 -281 // Server to handle client requests. -282 final RpcServerInterface rpcServer; -283 final InetSocketAddress isa; +278 // Server to handle client requests. +279 final RpcServerInterface rpcServer; +280 final InetSocketAddress isa; +281 +282 private final HRegionServer regionServer; +283 private final long maxScannerResultSize; 284 -285 private final HRegionServer regionServer; -286 private final long maxScannerResultSize; +285 // The reference to the priority extraction function +286 private final PriorityFunction priority; 287 -288 // The reference to the priority extraction function -289 private final PriorityFunction priority; -290 -291 private ScannerIdGenerator scannerIdGenerator; -292 private final ConcurrentMap<String, RegionScannerHolder> scanners = new ConcurrentHashMap<>(); -293 // Hold the name of a closed scanner for a while. This is used to keep compatible for old clients -294 // which may send next or close request to a region scanner which has already been exhausted. The -295 // entries will be removed automatically after scannerLeaseTimeoutPeriod. -296 private final Cache<String, String> closedScanners; -297 /** -298 * The lease timeout period for client scanners (milliseconds). -299 */ -300 private final int scannerLeaseTimeoutPeriod; -301 -302 /** -303 * The RPC timeout period (milliseconds) -304 */ -305 private final int rpcTimeout; -306 -307 /** -308 * The minimum allowable delta to use for the scan limit -309 */ -310 private final long minimumScanTimeLimitDelta; -311 -312 /** -313 * Row size threshold for multi requests above which a warning is logged -314 */ -315 private final int rowSizeWarnThreshold; -316 -317 final AtomicBoolean clearCompactionQueues = new AtomicBoolean(false); -318 -319 /** -320 * An Rpc callback for closing a RegionScanner. -321 */ -322 private static final class RegionScannerCloseCallBack implements RpcCallback { -323 -324 private final RegionScanner scanner; -325 -326 public RegionScannerCloseCallBack(RegionScanner scanner) { -327 this.scanner = scanner; -328 } -329 -330 @Override -331 public void run() throws IOException { -332 this.scanner.close(); -333 } -334 } -335 -336 /** -337 * An Rpc callback for doing shipped() call on a RegionScanner. -338 */ -339 private class RegionScannerShippedCallBack implements RpcCallback { -340 -341 private final String scannerName; -342 private final RegionScanner scanner; -343 private final Lease lease; -344 -345 public RegionScannerShippedCallBack(String scannerName, RegionScanner scanner, Lease lease) { -346 this.scannerName = scannerName; -347 this.scanner = scanner; -348 this.lease = lease; -349 } -350 -351 @Override -352 public void run() throws IOException { -353 this.scanner.shipped(); -354 // We're done. On way out re-add the above removed lease. The lease was temp removed for this -355 // Rpc call and we are at end of the call now. Time to add it back. -356 if (scanners.containsKey(scannerName)) { -357 if (lease != null) regionServer.leases.addLease(lease); -358 } -359 } -360 } -361 -362 /** -363 * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on -364 * completion of multiGets. -365 */ -366 static class RegionScannersCloseCallBack implements RpcCallback { -367 private final List<RegionScanner> scanners = new ArrayList<>(); -368 -369 public void addScanner(RegionScanner scanner) { -370 this.scanners.add(scanner); -371 } -372 -373 @Override -374 public void run() { -375 for (RegionScanner scanner : scanners) { -376 try { -377 scanner.close(); -378 } catch (IOException e) { -379 LOG.error("Exception while closing the scanner " + scanner, e); -380 } -381 } -382 } -383 } -384 -385 /** -386 * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together. -387 */ -388 private static final class RegionScannerHolder { -389 -390 private final AtomicLong nextCallSeq = new AtomicLong(0); -391 private final String scannerName; -392 private final RegionScanner s; -393 private final Region r; -394 private final RpcCallback closeCallBack; -395 private final RpcCallback shippedCallback; -396 private byte[] rowOfLastPartialResult; -397 private boolean needCursor; -398 -399 public RegionScannerHolder(String scannerName, RegionScanner s, Region r, -400 RpcCallback closeCallBack, RpcCallback shippedCallback, boolean needCursor) { -401 this.scannerName = scannerName; -402 this.s = s; -403 this.r = r; -404 this.closeCallBack = closeCallBack; -405 this.shippedCallback = shippedCallback; -406 this.needCursor = needCursor; -407 } -408 -409 public long getNextCallSeq() { -410 return nextCallSeq.get(); -411 } -412 -413 public boolean incNextCallSeq(long currentSeq) { -414 // Use CAS to prevent multiple scan request running on the same scanner. -415 return nextCallSeq.compareAndSet(currentSeq, currentSeq + 1); -416 } -417 } -418 -419 /** -420 * Instantiated as a scanner lease. If the lease times out, the scanner is -421 * closed -422 */ -423 private class ScannerListener implements LeaseListener { -424 private final String scannerName; -425 -426 ScannerListener(final String n) { -427 this.scannerName = n; -428 } -429 -430 @Override -431 public void leaseExpired() { -432 RegionScannerHolder rsh = scanners.remove(this.scannerName); -433 if (rsh != null) { -434 RegionScanner s = rsh.s; -435 LOG.info("Scanner " + this.scannerName + " lease expired on region " -436 + s.getRegionInfo().getRegionNameAsString()); -437 Region region = null; -438 try { -439 region = regionServer.getRegion(s.getRegionInfo().getRegionName()); -440 if (region != null && region.getCoprocessorHost() != null) { -441 region.getCoprocessorHost().preScannerClose(s); -442 } -443 } catch (IOException e) { -444 LOG.error("Closing scanner for " + s.getRegionInfo().getRegionNameAsString(), e); -445 } finally { -446 try { -447 s.close(); -448 if (region != null && region.getCoprocessorHost() != null) { -449 region.getCoprocessorHost().postScannerClose(s); -450 } -451 } catch (IOException e) { -452 LOG.error("Closing scanner for " + s.getRegionInfo().getRegionNameAsString(), e); -453 } -454 } -455 } else { -456 LOG.warn("Scanner " + this.scannerName + " lease expired, but no related" + -457 " scanner found, hence no chance to close that related scanner!"); -458 } -459 } -460 } -461 -462 private static ResultOrException getResultOrException(final ClientProtos.Result r, -463 final int index){ -464 return getResultOrException(ResponseConverter.buildActionResult(r), index); -465 } -466 -467 private static ResultOrException getResultOrException(final Exception e, final int index) { -468 return getResultOrException(ResponseConverter.buildActionResult(e), index); -469 } -470 -471 private static ResultOrException getResultOrException( -472 final ResultOrException.Builder builder, final int index) { -473 return builder.setIndex(index).build(); -474 } -475 -476 /** -477 * Starts the nonce operation for a mutation, if needed. -478 * @param mutation Mutation. -479 * @param nonceGroup Nonce group from the request. -480 * @returns whether to proceed this mutation. -481 */ -482 private boolean startNonceOperation(final MutationProto mutation, long nonceGroup) -483 throws IOException { -484 if (regionServer.nonceManager == null || !mutation.hasNonce()) return true; -485 boolean canProceed = false; -486 try { -487 canProceed = regionServer.nonceManager.startOperation( -488 nonceGroup, mutation.getNonce(), regionServer); -489 } catch (InterruptedException ex) { -490 throw new InterruptedIOException("Nonce start operation interrupted"); -491 } -492 return canProceed; -493 } -494 -495 /** -496 * Ends nonce operation for a mutation, if needed. -497 * @param mutation Mutation. -498 * @param nonceGroup Nonce group from the request. Always 0 in initial implementation. -499 * @param success Whether the operation for this nonce has succeeded. -500 */ -501 private void endNonceOperation(final MutationProto mutation, -502 long nonceGroup, boolean success) { -503 if (regionServer.nonceManager != null && mutation.hasNonce()) { -504 regionServer.nonceManager.endOperation(nonceGroup, mutation.getNonce(), success); -505 } -506 } -507 -508 private boolean isClientCellBlockSupport(RpcCallContext context) { -509 return context != null && context.isClientCellBlockSupported(); -510 } -511 -512 private void addResult(final MutateResponse.Builder builder, final Result result, -513 final HBaseRpcController rpcc, boolean clientCellBlockSupported) { -514 if (result == null) return; -515 if (clientCellBlockSupported) { -516 builder.setResult(ProtobufUtil.toResultNoData(result)); -517 rpcc.setCellScanner(result.cellScanner()); -518 } else { -519 ClientProtos.Result pbr = ProtobufUtil.toResult(result); -520 builder.setResult(pbr); -521 } -522 } -523 -524 private void addResults(ScanResponse.Builder builder, List<Result> results, -525 HBaseRpcController controller, boolean isDefaultRegion, boolean clientCellBlockSupported) { -526 builder.setStale(!isDefaultRegion); -527 if (results.isEmpty()) { -528 return; -529 } -530 if (clientCellBlockSupported) { -531 for (Result res : results) { -532 builder.addCellsPerResult(res.size()); -533 builder.addPartialFlagPerResult(res.mayHaveMoreCellsInRow()); -534 } -535 controller.setCellScanner(CellUtil.createCellScanner(results)); -536 } else { -537 for (Result res : results) { -538 ClientProtos.Result pbr = ProtobufUtil.toResult(res); -539 builder.addResults(pbr); -540 } -541 } -542 } -543 -544 /** -545 * Mutate a list of rows atomically. -546 * -547 * @param region -548 * @param actions -549 * @param cellScanner if non-null, the mutation data -- the Cell content. -550 * @throws IOException -551 */ -552 private void mutateRows(final Region region, -553 final List<ClientProtos.Action> actions, -554 final CellScanner cellScanner, RegionActionResult.Builder builder) throws IOException { -555 if (!region.getRegionInfo().isMetaTable()) { -556 regionServer.cacheFlusher.reclaimMemStoreMemory(); -557 } -558 RowMutations rm = null; -559 int i = 0; -560 ClientProtos.ResultOrException.Builder resultOrExceptionOrBuilder = -561 ClientProtos.ResultOrException.newBuilder(); -562 for (ClientProtos.Action action: actions) { -563 if (action.hasGet()) { -564 throw new DoNotRetryIOException("Atomic put and/or delete only, not a Get=" + -565 action.getGet()); -566 } -567 MutationType type = action.getMutation().getMutateType(); -568 if (rm == null) { -569 rm = new RowMutations(action.getMutation().getRow().toByteArray(), actions.size()); -570 } -571 switch (type) { -572 case PUT: -573 Put put = ProtobufUtil.toPut(action.getMutation(), cellScanner); -574 checkCellSizeLimit(region, put); -575 rm.add(put); +288 private ScannerIdGenerator scannerIdGenerator; +289 private final ConcurrentMap<String, RegionScannerHolder> scanners = new ConcurrentHashMap<>(); +290 // Hold the name of a closed scanner for a while. This is used to keep compatible for old clients +291 // which may send next or close request to a region scanner which has already been exhausted. The +292 // entries will be removed automatically after scannerLeaseTimeoutPeriod. +293 private final Cache<String, String> closedScanners; +294 /** +295 * The lease timeout period for client scanners (milliseconds). +296 */ +297 private final int scannerLeaseTimeoutPeriod; +298 +299 /** +300 * The RPC timeout period (milliseconds) +301 */ +302 private final int rpcTimeout; +303 +304 /** +305 * The minimum allowable delta to use for the scan limit +306 */ +307 private final long minimumScanTimeLimitDelta; +308 +309 /** +310 * Row size threshold for multi requests above which a warning is logged +311 */ +312 private final int rowSizeWarnThreshold; +313 +314 final AtomicBoolean clearCompactionQueues = new AtomicBoolean(false); +315 +316 /** +317 * An Rpc callback for closing a RegionScanner. +318 */ +319 private static final class RegionScannerCloseCallBack implements RpcCallback { +320 +321 private final RegionScanner scanner; +322 +323 public RegionScannerCloseCallBack(RegionScanner scanner) { +324 this.scanner = scanner; +325 } +326 +327 @Override +328 public void run() throws IOException { +329 this.scanner.close(); +330 } +331 } +332 +333 /** +334 * An Rpc callback for doing shipped() call on a RegionScanner. +335 */ +336 private class RegionScannerShippedCallBack implements RpcCallback { +337 +338 private final String scannerName; +339 private final RegionScanner scanner; +340 private final Lease lease; +341 +342 public RegionScannerShippedCallBack(String scannerName, RegionScanner scanner, Lease lease) { +343 this.scannerName = scannerName; +344 this.scanner = scanner; +345 this.lease = lease; +346 } +347 +348 @Override +349 public void run() throws IOException { +350 this.scanner.shipped(); +351 // We're done. On way out re-add the above removed lease. The lease was temp removed for this +352 // Rpc call and we are at end of the call now. Time to add it back. +353 if (scanners.containsKey(scannerName)) { +354 if (lease != null) regionServer.leases.addLease(lease); +355 } +356 } +357 } +358 +359 /** +360 * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on +361 * completion of multiGets. +362 */ +363 static class RegionScannersCloseCallBack implements RpcCallback { +364 private final List<RegionScanner> scanners = new ArrayList<>(); +365 +366 public void addScanner(RegionScanner scanner) { +367 this.scanners.add(scanner); +368 } +369 +370 @Override +371 public void run() { +372 for (RegionScanner scanner : scanners) { +373 try { +374 scanner.close(); +375 } catch (IOException e) { +376 LOG.error("Exception while closing the scanner " + scanner, e); +377 } +378 } +379 } +380 } +381 +382 /** +383 * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together. +384 */ +385 private static final class RegionScannerHolder { +386 +387 private final AtomicLong nextCallSeq = new AtomicLong(0); +388 private final String scannerName; +389 private final RegionScanner s; +390 private final Region r; +391 private final RpcCallback closeCallBack; +392 private final RpcCallback shippedCallback; +393 private byte[] rowOfLastPartialResult; +394 private boolean needCursor; +395 +396 public RegionScannerHolder(String scannerName, RegionScanner s, Region r, +397 RpcCallback closeCallBack, RpcCal