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 E3DB8200C76 for ; Fri, 28 Apr 2017 16:59:06 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id E2A08160BB9; Fri, 28 Apr 2017 14:59:06 +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 6A801160B8C for ; Fri, 28 Apr 2017 16:59:04 +0200 (CEST) Received: (qmail 29034 invoked by uid 500); 28 Apr 2017 14:59:01 -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 27871 invoked by uid 99); 28 Apr 2017 14:59:00 -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, 28 Apr 2017 14:59:00 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 44D8AE965E; Fri, 28 Apr 2017 14:59:00 +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: Fri, 28 Apr 2017 14:59:10 -0000 Message-Id: In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [11/51] [partial] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd. archived-at: Fri, 28 Apr 2017 14:59:07 -0000 http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6f2e75f2/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html ---------------------------------------------------------------------- diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html index 6c52543..f3f7a46 100644 --- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html +++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.html @@ -31,1797 +31,2040 @@ 023import java.util.ArrayList; 024import java.util.Arrays; 025import java.util.Collection; -026import java.util.HashMap; -027import java.util.LinkedList; -028import java.util.List; -029import java.util.Map; -030import java.util.Optional; -031import java.util.concurrent.CompletableFuture; -032import java.util.concurrent.TimeUnit; -033import java.util.concurrent.atomic.AtomicReference; -034import java.util.function.BiConsumer; -035import java.util.regex.Pattern; -036import java.util.stream.Collectors; -037 -038import com.google.common.annotations.VisibleForTesting; -039 -040import io.netty.util.Timeout; -041import io.netty.util.TimerTask; -042import org.apache.commons.logging.Log; -043import org.apache.commons.logging.LogFactory; -044import org.apache.hadoop.hbase.HColumnDescriptor; -045import org.apache.hadoop.hbase.HRegionInfo; -046import org.apache.hadoop.hbase.HRegionLocation; -047import org.apache.hadoop.hbase.MetaTableAccessor; -048import org.apache.hadoop.hbase.MetaTableAccessor.QueryType; -049import org.apache.hadoop.hbase.NotServingRegionException; -050import org.apache.hadoop.hbase.RegionLocations; -051import org.apache.hadoop.hbase.ServerName; -052import org.apache.hadoop.hbase.NamespaceDescriptor; -053import org.apache.hadoop.hbase.HConstants; -054import org.apache.hadoop.hbase.TableExistsException; -055import org.apache.hadoop.hbase.TableName; -056import org.apache.hadoop.hbase.AsyncMetaTableAccessor; -057import org.apache.hadoop.hbase.TableNotFoundException; -058import org.apache.hadoop.hbase.UnknownRegionException; -059import org.apache.hadoop.hbase.classification.InterfaceAudience; -060import org.apache.hadoop.hbase.classification.InterfaceStability; -061import org.apache.hadoop.hbase.client.AsyncRpcRetryingCallerFactory.AdminRequestCallerBuilder; -062import org.apache.hadoop.hbase.client.AsyncRpcRetryingCallerFactory.MasterRequestCallerBuilder; -063import org.apache.hadoop.hbase.client.Scan.ReadType; -064import org.apache.hadoop.hbase.client.replication.ReplicationSerDeHelper; -065import org.apache.hadoop.hbase.client.replication.TableCFs; -066import org.apache.hadoop.hbase.exceptions.DeserializationException; -067import org.apache.hadoop.hbase.ipc.HBaseRpcController; -068import org.apache.hadoop.hbase.quotas.QuotaFilter; -069import org.apache.hadoop.hbase.quotas.QuotaSettings; -070import org.apache.hadoop.hbase.quotas.QuotaTableUtil; -071import org.apache.hadoop.hbase.replication.ReplicationException; -072import org.apache.hadoop.hbase.replication.ReplicationPeerConfig; -073import org.apache.hadoop.hbase.replication.ReplicationPeerDescription; -074import org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcCallback; -075import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; -076import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter; -077import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService; -078import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest; -079import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse; -080import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.SplitRegionRequest; -081import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.SplitRegionResponse; -082import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos; -083import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.TableSchema; -084import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.AddColumnRequest; -085import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.AddColumnResponse; -086import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.AssignRegionRequest; -087import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.AssignRegionResponse; -088import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.BalanceRequest; -089import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.BalanceResponse; -090import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.CreateNamespaceRequest; -091import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.CreateNamespaceResponse; -092import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteNamespaceRequest; -093import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteNamespaceResponse; -094import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DisableTableRequest; -095import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DisableTableResponse; -096import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.EnableTableRequest; -097import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.EnableTableResponse; -098import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteColumnRequest; -099import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteColumnResponse; -100import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetNamespaceDescriptorRequest; -101import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetNamespaceDescriptorResponse; -102import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProcedureResultRequest; -103import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProcedureResultResponse; -104import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetSchemaAlterStatusRequest; -105import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetSchemaAlterStatusResponse; -106import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableDescriptorsRequest; -107import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableDescriptorsResponse; -108import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableNamesRequest; -109import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableNamesResponse; -110import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.CreateTableRequest; -111import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.CreateTableResponse; -112import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteTableRequest; -113import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteTableResponse; -114import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledRequest; -115import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledResponse; -116import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsSnapshotDoneRequest; -117import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsSnapshotDoneResponse; -118import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListNamespaceDescriptorsRequest; -119import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListNamespaceDescriptorsResponse; -120import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService; -121import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MergeTableRegionsRequest; -122import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MergeTableRegionsResponse; -123import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyColumnRequest; -124import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyColumnResponse; -125import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyNamespaceRequest; -126import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyNamespaceResponse; -127import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MoveRegionRequest; -128import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MoveRegionResponse; -129import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.OfflineRegionRequest; -130import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.OfflineRegionResponse; -131import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RestoreSnapshotRequest; -132import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RestoreSnapshotResponse; -133import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetBalancerRunningRequest; -134import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetBalancerRunningResponse; -135import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetQuotaRequest; -136import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetQuotaResponse; -137import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SnapshotRequest; -138import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SnapshotResponse; -139import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.TruncateTableRequest; -140import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.TruncateTableResponse; -141import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.UnassignRegionRequest; -142import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.UnassignRegionResponse; -143import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerRequest; -144import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerResponse; -145import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerRequest; -146import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerResponse; -147import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerRequest; -148import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerResponse; -149import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigRequest; -150import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigResponse; -151import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersRequest; -152import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersResponse; -153import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerRequest; -154import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerResponse; -155import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigRequest; -156import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigResponse; -157import org.apache.hadoop.hbase.snapshot.ClientSnapshotDescriptionUtils; -158import org.apache.hadoop.hbase.snapshot.SnapshotCreationException; -159import org.apache.hadoop.hbase.util.Bytes; -160import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; -161import org.apache.hadoop.hbase.util.ForeignExceptionUtil; -162import org.apache.hadoop.hbase.util.Pair; -163 -164/** -165 * The implementation of AsyncAdmin. -166 */ -167@InterfaceAudience.Private -168@InterfaceStability.Evolving -169public class AsyncHBaseAdmin implements AsyncAdmin { +026import java.util.Collections; +027import java.util.HashMap; +028import java.util.LinkedList; +029import java.util.List; +030import java.util.Map; +031import java.util.Optional; +032import java.util.concurrent.CompletableFuture; +033import java.util.concurrent.TimeUnit; +034import java.util.concurrent.atomic.AtomicReference; +035import java.util.function.BiConsumer; +036import java.util.regex.Pattern; +037import java.util.stream.Collectors; +038 +039import com.google.common.annotations.VisibleForTesting; +040 +041import io.netty.util.Timeout; +042import io.netty.util.TimerTask; +043import org.apache.commons.logging.Log; +044import org.apache.commons.logging.LogFactory; +045import org.apache.hadoop.hbase.HColumnDescriptor; +046import org.apache.hadoop.hbase.HRegionInfo; +047import org.apache.hadoop.hbase.HRegionLocation; +048import org.apache.hadoop.hbase.MetaTableAccessor; +049import org.apache.hadoop.hbase.MetaTableAccessor.QueryType; +050import org.apache.hadoop.hbase.NotServingRegionException; +051import org.apache.hadoop.hbase.RegionLocations; +052import org.apache.hadoop.hbase.ServerName; +053import org.apache.hadoop.hbase.NamespaceDescriptor; +054import org.apache.hadoop.hbase.HConstants; +055import org.apache.hadoop.hbase.TableExistsException; +056import org.apache.hadoop.hbase.TableName; +057import org.apache.hadoop.hbase.AsyncMetaTableAccessor; +058import org.apache.hadoop.hbase.TableNotDisabledException; +059import org.apache.hadoop.hbase.TableNotFoundException; +060import org.apache.hadoop.hbase.UnknownRegionException; +061import org.apache.hadoop.hbase.classification.InterfaceAudience; +062import org.apache.hadoop.hbase.classification.InterfaceStability; +063import org.apache.hadoop.hbase.client.AsyncRpcRetryingCallerFactory.AdminRequestCallerBuilder; +064import org.apache.hadoop.hbase.client.AsyncRpcRetryingCallerFactory.MasterRequestCallerBuilder; +065import org.apache.hadoop.hbase.client.Scan.ReadType; +066import org.apache.hadoop.hbase.client.replication.ReplicationSerDeHelper; +067import org.apache.hadoop.hbase.client.replication.TableCFs; +068import org.apache.hadoop.hbase.exceptions.DeserializationException; +069import org.apache.hadoop.hbase.ipc.HBaseRpcController; +070import org.apache.hadoop.hbase.quotas.QuotaFilter; +071import org.apache.hadoop.hbase.quotas.QuotaSettings; +072import org.apache.hadoop.hbase.quotas.QuotaTableUtil; +073import org.apache.hadoop.hbase.replication.ReplicationException; +074import org.apache.hadoop.hbase.replication.ReplicationPeerConfig; +075import org.apache.hadoop.hbase.replication.ReplicationPeerDescription; +076import org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcCallback; +077import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; +078import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter; +079import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService; +080import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest; +081import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse; +082import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.SplitRegionRequest; +083import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.SplitRegionResponse; +084import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos; +085import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.TableSchema; +086import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.AddColumnRequest; +087import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.AddColumnResponse; +088import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.AssignRegionRequest; +089import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.AssignRegionResponse; +090import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.BalanceRequest; +091import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.BalanceResponse; +092import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.CreateNamespaceRequest; +093import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.CreateNamespaceResponse; +094import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteNamespaceRequest; +095import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteNamespaceResponse; +096import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteSnapshotRequest; +097import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteSnapshotResponse; +098import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DisableTableRequest; +099import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DisableTableResponse; +100import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.EnableTableRequest; +101import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.EnableTableResponse; +102import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteColumnRequest; +103import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteColumnResponse; +104import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetCompletedSnapshotsRequest; +105import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetCompletedSnapshotsResponse; +106import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetNamespaceDescriptorRequest; +107import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetNamespaceDescriptorResponse; +108import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProcedureResultRequest; +109import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProcedureResultResponse; +110import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetSchemaAlterStatusRequest; +111import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetSchemaAlterStatusResponse; +112import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableDescriptorsRequest; +113import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableDescriptorsResponse; +114import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableNamesRequest; +115import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableNamesResponse; +116import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.CreateTableRequest; +117import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.CreateTableResponse; +118import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteTableRequest; +119import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteTableResponse; +120import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledRequest; +121import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledResponse; +122import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsSnapshotDoneRequest; +123import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsSnapshotDoneResponse; +124import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListNamespaceDescriptorsRequest; +125import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListNamespaceDescriptorsResponse; +126import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService; +127import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MergeTableRegionsRequest; +128import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MergeTableRegionsResponse; +129import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyColumnRequest; +130import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyColumnResponse; +131import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyNamespaceRequest; +132import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyNamespaceResponse; +133import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MoveRegionRequest; +134import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MoveRegionResponse; +135import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.OfflineRegionRequest; +136import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.OfflineRegionResponse; +137import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RestoreSnapshotRequest; +138import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RestoreSnapshotResponse; +139import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetBalancerRunningRequest; +140import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetBalancerRunningResponse; +141import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetQuotaRequest; +142import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetQuotaResponse; +143import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SnapshotRequest; +144import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SnapshotResponse; +145import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.TruncateTableRequest; +146import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.TruncateTableResponse; +147import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.UnassignRegionRequest; +148import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.UnassignRegionResponse; +149import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerRequest; +150import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerResponse; +151import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerRequest; +152import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerResponse; +153import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerRequest; +154import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerResponse; +155import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigRequest; +156import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigResponse; +157import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersRequest; +158import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersResponse; +159import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerRequest; +160import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerResponse; +161import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigRequest; +162import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigResponse; +163import org.apache.hadoop.hbase.snapshot.ClientSnapshotDescriptionUtils; +164import org.apache.hadoop.hbase.snapshot.RestoreSnapshotException; +165import org.apache.hadoop.hbase.snapshot.SnapshotCreationException; +166import org.apache.hadoop.hbase.util.Bytes; +167import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; +168import org.apache.hadoop.hbase.util.ForeignExceptionUtil; +169import org.apache.hadoop.hbase.util.Pair; 170 -171 private static final Log LOG = LogFactory.getLog(AsyncHBaseAdmin.class); -172 -173 private final AsyncConnectionImpl connection; -174 -175 private final RawAsyncTable metaTable; -176 -177 private final long rpcTimeoutNs; -178 -179 private final long operationTimeoutNs; -180 -181 private final long pauseNs; -182 -183 private final int maxAttempts; -184 -185 private final int startLogErrorsCnt; -186 -187 private final NonceGenerator ng; -188 -189 AsyncHBaseAdmin(AsyncConnectionImpl connection) { -190 this.connection = connection; -191 this.metaTable = connection.getRawTable(META_TABLE_NAME); -192 this.rpcTimeoutNs = connection.connConf.getRpcTimeoutNs(); -193 this.operationTimeoutNs = connection.connConf.getOperationTimeoutNs(); -194 this.pauseNs = connection.connConf.getPauseNs(); -195 this.maxAttempts = connection.connConf.getMaxRetries(); -196 this.startLogErrorsCnt = connection.connConf.getStartLogErrorsCnt(); -197 this.ng = connection.getNonceGenerator(); -198 } -199 -200 private <T> MasterRequestCallerBuilder<T> newMasterCaller() { -201 return this.connection.callerFactory.<T> masterRequest() -202 .rpcTimeout(rpcTimeoutNs, TimeUnit.NANOSECONDS) -203 .operationTimeout(operationTimeoutNs, TimeUnit.NANOSECONDS) -204 .pause(pauseNs, TimeUnit.NANOSECONDS).maxAttempts(maxAttempts) -205 .startLogErrorsCnt(startLogErrorsCnt); -206 } -207 -208 private <T> AdminRequestCallerBuilder<T> newAdminCaller() { -209 return this.connection.callerFactory.<T> adminRequest() -210 .rpcTimeout(rpcTimeoutNs, TimeUnit.NANOSECONDS) -211 .operationTimeout(operationTimeoutNs, TimeUnit.NANOSECONDS) -212 .pause(pauseNs, TimeUnit.NANOSECONDS).maxAttempts(maxAttempts) -213 .startLogErrorsCnt(startLogErrorsCnt); -214 } -215 -216 @FunctionalInterface -217 private interface MasterRpcCall<RESP, REQ> { -218 void call(MasterService.Interface stub, HBaseRpcController controller, REQ req, -219 RpcCallback<RESP> done); -220 } -221 -222 @FunctionalInterface -223 private interface AdminRpcCall<RESP, REQ> { -224 void call(AdminService.Interface stub, HBaseRpcController controller, REQ req, -225 RpcCallback<RESP> done); -226 } -227 -228 @FunctionalInterface -229 private interface Converter<D, S> { -230 D convert(S src) throws IOException; -231 } -232 -233 private <PREQ, PRESP, RESP> CompletableFuture<RESP> call(HBaseRpcController controller, -234 MasterService.Interface stub, PREQ preq, MasterRpcCall<PRESP, PREQ> rpcCall, -235 Converter<RESP, PRESP> respConverter) { -236 CompletableFuture<RESP> future = new CompletableFuture<>(); -237 rpcCall.call(stub, controller, preq, new RpcCallback<PRESP>() { -238 -239 @Override -240 public void run(PRESP resp) { -241 if (controller.failed()) { -242 future.completeExceptionally(controller.getFailed()); -243 } else { -244 try { -245 future.complete(respConverter.convert(resp)); -246 } catch (IOException e) { -247 future.completeExceptionally(e); -248 } -249 } -250 } -251 }); -252 return future; -253 } -254 -255 //TODO abstract call and adminCall into a single method. -256 private <PREQ, PRESP, RESP> CompletableFuture<RESP> adminCall(HBaseRpcController controller, -257 AdminService.Interface stub, PREQ preq, AdminRpcCall<PRESP, PREQ> rpcCall, -258 Converter<RESP, PRESP> respConverter) { -259 -260 CompletableFuture<RESP> future = new CompletableFuture<>(); -261 rpcCall.call(stub, controller, preq, new RpcCallback<PRESP>() { -262 -263 @Override -264 public void run(PRESP resp) { -265 if (controller.failed()) { -266 future.completeExceptionally(new IOException(controller.errorText())); -267 } else { -268 try { -269 future.complete(respConverter.convert(resp)); -270 } catch (IOException e) { -271 future.completeExceptionally(e); -272 } -273 } -274 } -275 }); -276 return future; -277 } -278 -279 private <PREQ, PRESP> CompletableFuture<Void> procedureCall(PREQ preq, -280 MasterRpcCall<PRESP, PREQ> rpcCall, Converter<Long, PRESP> respConverter, -281 ProcedureBiConsumer consumer) { -282 CompletableFuture<Long> procFuture = this -283 .<Long> newMasterCaller() -284 .action( -285 (controller, stub) -> this.<PREQ, PRESP, Long> call(controller, stub, preq, rpcCall, -286 respConverter)).call(); -287 return waitProcedureResult(procFuture).whenComplete(consumer); -288 } -289 -290 @FunctionalInterface -291 private interface TableOperator { -292 CompletableFuture<Void> operate(TableName table); -293 } -294 -295 private CompletableFuture<TableDescriptor[]> batchTableOperations(Pattern pattern, -296 TableOperator operator, String operationType) { -297 CompletableFuture<TableDescriptor[]> future = new CompletableFuture<>(); -298 List<TableDescriptor> failed = new LinkedList<>(); -299 listTables(pattern, false).whenComplete( -300 (tables, error) -> { -301 if (error != null) { -302 future.completeExceptionally(error); -303 return; -304 } -305 CompletableFuture[] futures = Arrays.stream(tables) -306 .map((table) -> operator.operate(table.getTableName()).whenComplete((v, ex) -> { -307 if (ex != null) { -308 LOG.info("Failed to " + operationType + " table " + table.getTableName(), ex); -309 failed.add(table); -310 } -311 })).<CompletableFuture> toArray(size -> new CompletableFuture[size]); -312 CompletableFuture.allOf(futures).thenAccept((v) -> { -313 future.complete(failed.toArray(new TableDescriptor[failed.size()])); -314 }); -315 }); -316 return future; -317 } -318 -319 @Override -320 public AsyncConnectionImpl getConnection() { -321 return this.connection; -322 } -323 -324 @Override -325 public CompletableFuture<Boolean> tableExists(TableName tableName) { -326 return AsyncMetaTableAccessor.tableExists(metaTable, tableName); -327 } -328 -329 @Override -330 public CompletableFuture<TableDescriptor[]> listTables() { -331 return listTables((Pattern) null, false); -332 } -333 -334 @Override -335 public CompletableFuture<TableDescriptor[]> listTables(String regex, boolean includeSysTables) { -336 return listTables(Pattern.compile(regex), false); -337 } -338 -339 @Override -340 public CompletableFuture<TableDescriptor[]> listTables(Pattern pattern, boolean includeSysTables) { -341 return this -342 .<TableDescriptor[]>newMasterCaller() -343 .action( -344 (controller, stub) -> this -345 .<GetTableDescriptorsRequest, GetTableDescriptorsResponse, TableDescriptor[]> call( -346 controller, stub, RequestConverter.buildGetTableDescriptorsRequest(pattern, -347 includeSysTables), (s, c, req, done) -> s.getTableDescriptors(c, req, done), ( -348 resp) -> ProtobufUtil.getTableDescriptorArray(resp))).call(); -349 } -350 -351 @Override -352 public CompletableFuture<TableName[]> listTableNames() { -353 return listTableNames((Pattern) null, false); -354 } -355 -356 @Override -357 public CompletableFuture<TableName[]> listTableNames(String regex, boolean includeSysTables) { -358 return listTableNames(Pattern.compile(regex), false); -359 } -360 -361 @Override -362 public CompletableFuture<TableName[]> listTableNames(Pattern pattern, boolean includeSysTables) { -363 return this -364 .<TableName[]>newMasterCaller() -365 .action( -366 (controller, stub) -> this -367 .<GetTableNamesRequest, GetTableNamesResponse, TableName[]> call(controller, stub, -368 RequestConverter.buildGetTableNamesRequest(pattern, includeSysTables), (s, c, req, -369 done) -> s.getTableNames(c, req, done), (resp) -> ProtobufUtil -370 .getTableNameArray(resp.getTableNamesList()))).call(); -371 } -372 -373 @Override -374 public CompletableFuture<TableDescriptor> getTableDescriptor(TableName tableName) { -375 CompletableFuture<TableDescriptor> future = new CompletableFuture<>(); -376 this.<List<TableSchema>> newMasterCaller() -377 .action( -378 (controller, stub) -> this -379 .<GetTableDescriptorsRequest, GetTableDescriptorsResponse, List<TableSchema>> call( -380 controller, stub, RequestConverter.buildGetTableDescriptorsRequest(tableName), (s, -381 c, req, done) -> s.getTableDescriptors(c, req, done), (resp) -> resp -382 .getTableSchemaList())).call().whenComplete((tableSchemas, error) -> { -383 if (error != null) { -384 future.completeExceptionally(error); -385 return; -386 } -387 if (!tableSchemas.isEmpty()) { -388 future.complete(ProtobufUtil.convertToTableDesc(tableSchemas.get(0))); -389 } else { -390 future.completeExceptionally(new TableNotFoundException(tableName.getNameAsString())); -391 } -392 }); -393 return future; -394 } -395 -396 @Override -397 public CompletableFuture<Void> createTable(TableDescriptor desc) { -398 return createTable(desc, null); -399 } -400 -401 @Override -402 public CompletableFuture<Void> createTable(TableDescriptor desc, byte[] startKey, byte[] endKey, -403 int numRegions) { -404 try { -405 return createTable(desc, getSplitKeys(startKey, endKey, numRegions)); -406 } catch (IllegalArgumentException e) { -407 return failedFuture(e); -408 } -409 } -410 -411 @Override -412 public CompletableFuture<Void> createTable(TableDescriptor desc, byte[][] splitKeys) { -413 if (desc.getTableName() == null) { -414 return failedFuture(new IllegalArgumentException("TableName cannot be null")); +171/** +172 * The implementation of AsyncAdmin. +173 */ +174@InterfaceAudience.Private +175@InterfaceStability.Evolving +176public class AsyncHBaseAdmin implements AsyncAdmin { +177 +178 private static final Log LOG = LogFactory.getLog(AsyncHBaseAdmin.class); +179 +180 private final AsyncConnectionImpl connection; +181 +182 private final RawAsyncTable metaTable; +183 +184 private final long rpcTimeoutNs; +185 +186 private final long operationTimeoutNs; +187 +188 private final long pauseNs; +189 +190 private final int maxAttempts; +191 +192 private final int startLogErrorsCnt; +193 +194 private final NonceGenerator ng; +195 +196 AsyncHBaseAdmin(AsyncConnectionImpl connection) { +197 this.connection = connection; +198 this.metaTable = connection.getRawTable(META_TABLE_NAME); +199 this.rpcTimeoutNs = connection.connConf.getRpcTimeoutNs(); +200 this.operationTimeoutNs = connection.connConf.getOperationTimeoutNs(); +201 this.pauseNs = connection.connConf.getPauseNs(); +202 this.maxAttempts = connection.connConf.getMaxRetries(); +203 this.startLogErrorsCnt = connection.connConf.getStartLogErrorsCnt(); +204 this.ng = connection.getNonceGenerator(); +205 } +206 +207 private <T> MasterRequestCallerBuilder<T> newMasterCaller() { +208 return this.connection.callerFactory.<T> masterRequest() +209 .rpcTimeout(rpcTimeoutNs, TimeUnit.NANOSECONDS) +210 .operationTimeout(operationTimeoutNs, TimeUnit.NANOSECONDS) +211 .pause(pauseNs, TimeUnit.NANOSECONDS).maxAttempts(maxAttempts) +212 .startLogErrorsCnt(startLogErrorsCnt); +213 } +214 +215 private <T> AdminRequestCallerBuilder<T> newAdminCaller() { +216 return this.connection.callerFactory.<T> adminRequest() +217 .rpcTimeout(rpcTimeoutNs, TimeUnit.NANOSECONDS) +218 .operationTimeout(operationTimeoutNs, TimeUnit.NANOSECONDS) +219 .pause(pauseNs, TimeUnit.NANOSECONDS).maxAttempts(maxAttempts) +220 .startLogErrorsCnt(startLogErrorsCnt); +221 } +222 +223 @FunctionalInterface +224 private interface MasterRpcCall<RESP, REQ> { +225 void call(MasterService.Interface stub, HBaseRpcController controller, REQ req, +226 RpcCallback<RESP> done); +227 } +228 +229 @FunctionalInterface +230 private interface AdminRpcCall<RESP, REQ> { +231 void call(AdminService.Interface stub, HBaseRpcController controller, REQ req, +232 RpcCallback<RESP> done); +233 } +234 +235 @FunctionalInterface +236 private interface Converter<D, S> { +237 D convert(S src) throws IOException; +238 } +239 +240 private <PREQ, PRESP, RESP> CompletableFuture<RESP> call(HBaseRpcController controller, +241 MasterService.Interface stub, PREQ preq, MasterRpcCall<PRESP, PREQ> rpcCall, +242 Converter<RESP, PRESP> respConverter) { +243 CompletableFuture<RESP> future = new CompletableFuture<>(); +244 rpcCall.call(stub, controller, preq, new RpcCallback<PRESP>() { +245 +246 @Override +247 public void run(PRESP resp) { +248 if (controller.failed()) { +249 future.completeExceptionally(controller.getFailed()); +250 } else { +251 try { +252 future.complete(respConverter.convert(resp)); +253 } catch (IOException e) { +254 future.completeExceptionally(e); +255 } +256 } +257 } +258 }); +259 return future; +260 } +261 +262 //TODO abstract call and adminCall into a single method. +263 private <PREQ, PRESP, RESP> CompletableFuture<RESP> adminCall(HBaseRpcController controller, +264 AdminService.Interface stub, PREQ preq, AdminRpcCall<PRESP, PREQ> rpcCall, +265 Converter<RESP, PRESP> respConverter) { +266 +267 CompletableFuture<RESP> future = new CompletableFuture<>(); +268 rpcCall.call(stub, controller, preq, new RpcCallback<PRESP>() { +269 +270 @Override +271 public void run(PRESP resp) { +272 if (controller.failed()) { +273 future.completeExceptionally(new IOException(controller.errorText())); +274 } else { +275 try { +276 future.complete(respConverter.convert(resp)); +277 } catch (IOException e) { +278 future.completeExceptionally(e); +279 } +280 } +281 } +282 }); +283 return future; +284 } +285 +286 private <PREQ, PRESP> CompletableFuture<Void> procedureCall(PREQ preq, +287 MasterRpcCall<PRESP, PREQ> rpcCall, Converter<Long, PRESP> respConverter, +288 ProcedureBiConsumer consumer) { +289 CompletableFuture<Long> procFuture = this +290 .<Long> newMasterCaller() +291 .action( +292 (controller, stub) -> this.<PREQ, PRESP, Long> call(controller, stub, preq, rpcCall, +293 respConverter)).call(); +294 return waitProcedureResult(procFuture).whenComplete(consumer); +295 } +296 +297 @FunctionalInterface +298 private interface TableOperator { +299 CompletableFuture<Void> operate(TableName table); +300 } +301 +302 private CompletableFuture<TableDescriptor[]> batchTableOperations(Pattern pattern, +303 TableOperator operator, String operationType) { +304 CompletableFuture<TableDescriptor[]> future = new CompletableFuture<>(); +305 List<TableDescriptor> failed = new LinkedList<>(); +306 listTables(pattern, false).whenComplete( +307 (tables, error) -> { +308 if (error != null) { +309 future.completeExceptionally(error); +310 return; +311 } +312 CompletableFuture[] futures = Arrays.stream(tables) +313 .map((table) -> operator.operate(table.getTableName()).whenComplete((v, ex) -> { +314 if (ex != null) { +315 LOG.info("Failed to " + operationType + " table " + table.getTableName(), ex); +316 failed.add(table); +317 } +318 })).<CompletableFuture> toArray(size -> new CompletableFuture[size]); +319 CompletableFuture.allOf(futures).thenAccept((v) -> { +320 future.complete(failed.toArray(new TableDescriptor[failed.size()])); +321 }); +322 }); +323 return future; +324 } +325 +326 @Override +327 public AsyncConnectionImpl getConnection() { +328 return this.connection; +329 } +330 +331 @Override +332 public CompletableFuture<Boolean> tableExists(TableName tableName) { +333 return AsyncMetaTableAccessor.tableExists(metaTable, tableName); +334 } +335 +336 @Override +337 public CompletableFuture<TableDescriptor[]> listTables() { +338 return listTables((Pattern) null, false); +339 } +340 +341 @Override +342 public CompletableFuture<TableDescriptor[]> listTables(String regex, boolean includeSysTables) { +343 return listTables(Pattern.compile(regex), false); +344 } +345 +346 @Override +347 public CompletableFuture<TableDescriptor[]> listTables(Pattern pattern, boolean includeSysTables) { +348 return this +349 .<TableDescriptor[]>newMasterCaller() +350 .action( +351 (controller, stub) -> this +352 .<GetTableDescriptorsRequest, GetTableDescriptorsResponse, TableDescriptor[]> call( +353 controller, stub, RequestConverter.buildGetTableDescriptorsRequest(pattern, +354 includeSysTables), (s, c, req, done) -> s.getTableDescriptors(c, req, done), ( +355 resp) -> ProtobufUtil.getTableDescriptorArray(resp))).call(); +356 } +357 +358 @Override +359 public CompletableFuture<TableName[]> listTableNames() { +360 return listTableNames((Pattern) null, false); +361 } +362 +363 @Override +364 public CompletableFuture<TableName[]> listTableNames(String regex, boolean includeSysTables) { +365 return listTableNames(Pattern.compile(regex), false); +366 } +367 +368 @Override +369 public CompletableFuture<TableName[]> listTableNames(Pattern pattern, boolean includeSysTables) { +370 return this +371 .<TableName[]>newMasterCaller() +372 .action( +373 (controller, stub) -> this +374 .<GetTableNamesRequest, GetTableNamesResponse, TableName[]> call(controller, stub, +375 RequestConverter.buildGetTableNamesRequest(pattern, includeSysTables), (s, c, req, +376 done) -> s.getTableNames(c, req, done), (resp) -> ProtobufUtil +377 .getTableNameArray(resp.getTableNamesList()))).call(); +378 } +379 +380 @Override +381 public CompletableFuture<TableDescriptor> getTableDescriptor(TableName tableName) { +382 CompletableFuture<TableDescriptor> future = new CompletableFuture<>(); +383 this.<List<TableSchema>> newMasterCaller() +384 .action( +385 (controller, stub) -> this +386 .<GetTableDescriptorsRequest, GetTableDescriptorsResponse, List<TableSchema>> call( +387 controller, stub, RequestConverter.buildGetTableDescriptorsRequest(tableName), (s, +388 c, req, done) -> s.getTableDescriptors(c, req, done), (resp) -> resp +389 .getTableSchemaList())).call().whenComplete((tableSchemas, error) -> { +390 if (error != null) { +391 future.completeExceptionally(error); +392 return; +393 } +394 if (!tableSchemas.isEmpty()) { +395 future.complete(ProtobufUtil.convertToTableDesc(tableSchemas.get(0))); +396 } else { +397 future.completeExceptionally(new TableNotFoundException(tableName.getNameAsString())); +398 } +399 }); +400 return future; +401 } +402 +403 @Override +404 public CompletableFuture<Void> createTable(TableDescriptor desc) { +405 return createTable(desc, null); +406 } +407 +408 @Override +409 public CompletableFuture<Void> createTable(TableDescriptor desc, byte[] startKey, byte[] endKey, +410 int numRegions) { +411 try { +412 return createTable(desc, getSplitKeys(startKey, endKey, numRegions)); +413 } catch (IllegalArgumentException e) { +414 return failedFuture(e); 415 } -416 if (splitKeys != null && splitKeys.length > 0) { -417 Arrays.sort(splitKeys, Bytes.BYTES_COMPARATOR); -418 // Verify there are no duplicate split keys -419 byte[] lastKey = null; -420 for (byte[] splitKey : splitKeys) { -421 if (Bytes.compareTo(splitKey, HConstants.EMPTY_BYTE_ARRAY) == 0) { -422 return failedFuture(new IllegalArgumentException( -423