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 8D8B8200D43 for ; Tue, 21 Nov 2017 16:17:50 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 8C1D0160C16; Tue, 21 Nov 2017 15:17:50 +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 AF3A4160C14 for ; Tue, 21 Nov 2017 16:17:47 +0100 (CET) Received: (qmail 2650 invoked by uid 500); 21 Nov 2017 15:17:45 -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 2421 invoked by uid 99); 21 Nov 2017 15:17:45 -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; Tue, 21 Nov 2017 15:17:45 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id F0D3BF5F85; Tue, 21 Nov 2017 15:17:44 +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: Tue, 21 Nov 2017 15:17:52 -0000 Message-Id: <8b2673fdc6f54a8ab6c6aa058f551621@git.apache.org> In-Reply-To: <153749d07a534b219beb9437a521d2b4@git.apache.org> References: <153749d07a534b219beb9437a521d2b4@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [09/51] [partial] hbase-site git commit: Published site at . archived-at: Tue, 21 Nov 2017 15:17:50 -0000 http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1a616706/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.CreateTableFuture.html ---------------------------------------------------------------------- diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.CreateTableFuture.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.CreateTableFuture.html index 02e4554..d438f22 100644 --- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.CreateTableFuture.html +++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.CreateTableFuture.html @@ -111,4067 +111,4061 @@ 103import org.apache.hadoop.util.StringUtils; 104import org.apache.yetus.audience.InterfaceAudience; 105import org.apache.yetus.audience.InterfaceStability; -106 -107import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting; -108import org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException; -109import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; -110import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter; -111import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos; -112import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService; -113import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest; -114import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheRequest; -115import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest; -116import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest; -117import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest; -118import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse; -119import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest; -120import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse; -121import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest; -122import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest; -123import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos; -124import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest; -125import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse; -126import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos; -127import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ProcedureDescription; -128import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType; -129import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.TableSchema; -130import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos; -131import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.AbortProcedureRequest; -132import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.AbortProcedureResponse; -133import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.AddColumnRequest; -134import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.AddColumnResponse; -135import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.AssignRegionRequest; -136import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ClearDeadServersRequest; -137import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.CreateNamespaceRequest; -138import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.CreateNamespaceResponse; -139import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.CreateTableRequest; -140import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.CreateTableResponse; -141import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteColumnRequest; -142import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteColumnResponse; -143import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteNamespaceRequest; -144import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteNamespaceResponse; -145import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteSnapshotRequest; -146import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteTableRequest; -147import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DeleteTableResponse; -148import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DisableTableRequest; -149import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DisableTableResponse; -150import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.EnableTableRequest; -151import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.EnableTableResponse; -152import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ExecProcedureRequest; -153import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ExecProcedureResponse; -154import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetClusterStatusRequest; -155import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetCompletedSnapshotsRequest; -156import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetLocksRequest; -157import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetLocksResponse; -158import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetNamespaceDescriptorRequest; -159import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProcedureResultRequest; -160import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProcedureResultResponse; -161import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProceduresRequest; -162import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProceduresResponse; -163import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetSchemaAlterStatusRequest; -164import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetSchemaAlterStatusResponse; -165import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableDescriptorsRequest; -166import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableDescriptorsResponse; -167import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableNamesRequest; -168import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsInMaintenanceModeRequest; -169import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsInMaintenanceModeResponse; -170import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsProcedureDoneRequest; -171import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsProcedureDoneResponse; -172import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsSnapshotDoneRequest; -173import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsSnapshotDoneResponse; -174import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersRequest; -175import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListNamespaceDescriptorsRequest; -176import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListTableDescriptorsByNamespaceRequest; -177import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListTableNamesByNamespaceRequest; -178import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MajorCompactionTimestampForRegionRequest; -179import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MajorCompactionTimestampRequest; -180import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MergeTableRegionsRequest; -181import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MergeTableRegionsResponse; -182import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyColumnRequest; -183import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyColumnResponse; -184import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyNamespaceRequest; -185import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyNamespaceResponse; -186import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyTableRequest; -187import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyTableResponse; -188import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MoveRegionRequest; -189import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RestoreSnapshotRequest; -190import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RestoreSnapshotResponse; -191import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesRequest; -192import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetBalancerRunningRequest; -193import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningRequest; -194import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ShutdownRequest; -195import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SnapshotRequest; -196import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SnapshotResponse; -197import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SplitTableRegionRequest; -198import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SplitTableRegionResponse; -199import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.StopMasterRequest; -200import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.TruncateTableRequest; -201import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.TruncateTableResponse; -202import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.UnassignRegionRequest; -203import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos; -204import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigResponse; -205import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos; -206 -207/** -208 * HBaseAdmin is no longer a client API. It is marked InterfaceAudience.Private indicating that -209 * this is an HBase-internal class as defined in -210 * https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/InterfaceClassification.html -211 * There are no guarantees for backwards source / binary compatibility and methods or class can -212 * change or go away without deprecation. -213 * Use {@link Connection#getAdmin()} to obtain an instance of {@link Admin} instead of constructing -214 * an HBaseAdmin directly. -215 * -216 * <p>Connection should be an <i>unmanaged</i> connection obtained via -217 * {@link ConnectionFactory#createConnection(Configuration)} -218 * -219 * @see ConnectionFactory -220 * @see Connection -221 * @see Admin -222 */ -223@InterfaceAudience.Private -224@InterfaceStability.Evolving -225public class HBaseAdmin implements Admin { -226 private static final Log LOG = LogFactory.getLog(HBaseAdmin.class); -227 -228 private ClusterConnection connection; -229 -230 private volatile Configuration conf; -231 private final long pause; -232 private final int numRetries; -233 private final int syncWaitTimeout; -234 private boolean aborted; -235 private int operationTimeout; -236 private int rpcTimeout; -237 -238 private RpcRetryingCallerFactory rpcCallerFactory; -239 private RpcControllerFactory rpcControllerFactory; -240 -241 private NonceGenerator ng; -242 -243 @Override -244 public int getOperationTimeout() { -245 return operationTimeout; -246 } -247 -248 HBaseAdmin(ClusterConnection connection) throws IOException { -249 this.conf = connection.getConfiguration(); -250 this.connection = connection; -251 -252 // TODO: receive ConnectionConfiguration here rather than re-parsing these configs every time. -253 this.pause = this.conf.getLong(HConstants.HBASE_CLIENT_PAUSE, -254 HConstants.DEFAULT_HBASE_CLIENT_PAUSE); -255 this.numRetries = this.conf.getInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER, -256 HConstants.DEFAULT_HBASE_CLIENT_RETRIES_NUMBER); -257 this.operationTimeout = this.conf.getInt(HConstants.HBASE_CLIENT_OPERATION_TIMEOUT, -258 HConstants.DEFAULT_HBASE_CLIENT_OPERATION_TIMEOUT); -259 this.rpcTimeout = this.conf.getInt(HConstants.HBASE_RPC_TIMEOUT_KEY, -260 HConstants.DEFAULT_HBASE_RPC_TIMEOUT); -261 this.syncWaitTimeout = this.conf.getInt( -262 "hbase.client.sync.wait.timeout.msec", 10 * 60000); // 10min -263 -264 this.rpcCallerFactory = connection.getRpcRetryingCallerFactory(); -265 this.rpcControllerFactory = connection.getRpcControllerFactory(); -266 -267 this.ng = this.connection.getNonceGenerator(); -268 } -269 -270 @Override -271 public void abort(String why, Throwable e) { -272 // Currently does nothing but throw the passed message and exception -273 this.aborted = true; -274 throw new RuntimeException(why, e); -275 } -276 -277 @Override -278 public boolean isAborted() { -279 return this.aborted; -280 } -281 -282 @Override -283 public boolean abortProcedure(final long procId, final boolean mayInterruptIfRunning) -284 throws IOException { -285 return get(abortProcedureAsync(procId, mayInterruptIfRunning), this.syncWaitTimeout, -286 TimeUnit.MILLISECONDS); -287 } -288 -289 @Override -290 public Future<Boolean> abortProcedureAsync(final long procId, final boolean mayInterruptIfRunning) -291 throws IOException { -292 Boolean abortProcResponse = -293 executeCallable(new MasterCallable<AbortProcedureResponse>(getConnection(), -294 getRpcControllerFactory()) { -295 @Override -296 protected AbortProcedureResponse rpcCall() throws Exception { -297 AbortProcedureRequest abortProcRequest = -298 AbortProcedureRequest.newBuilder().setProcId(procId).build(); -299 return master.abortProcedure(getRpcController(), abortProcRequest); -300 } -301 }).getIsProcedureAborted(); -302 return new AbortProcedureFuture(this, procId, abortProcResponse); -303 } -304 -305 @Override -306 public List<TableDescriptor> listTableDescriptors() throws IOException { -307 return listTableDescriptors((Pattern)null, false); -308 } -309 -310 @Override -311 public List<TableDescriptor> listTableDescriptors(Pattern pattern) throws IOException { -312 return listTableDescriptors(pattern, false); -313 } -314 -315 @Override -316 public List<TableDescriptor> listTableDescriptors(Pattern pattern, boolean includeSysTables) throws IOException { -317 return executeCallable(new MasterCallable<List<TableDescriptor>>(getConnection(), -318 getRpcControllerFactory()) { -319 @Override -320 protected List<TableDescriptor> rpcCall() throws Exception { -321 GetTableDescriptorsRequest req = -322 RequestConverter.buildGetTableDescriptorsRequest(pattern, includeSysTables); -323 return ProtobufUtil.toTableDescriptorList(master.getTableDescriptors(getRpcController(), -324 req)); -325 } -326 }); -327 } -328 -329 @Override -330 public TableDescriptor getDescriptor(TableName tableName) throws TableNotFoundException, IOException { -331 return getTableDescriptor(tableName, getConnection(), rpcCallerFactory, rpcControllerFactory, -332 operationTimeout, rpcTimeout); -333 } -334 -335 @Override -336 public void modifyTable(TableDescriptor td) throws IOException { -337 get(modifyTableAsync(td), syncWaitTimeout, TimeUnit.MILLISECONDS); -338 } -339 -340 @Override -341 public Future<Void> modifyTableAsync(TableDescriptor td) throws IOException { -342 ModifyTableResponse response = executeCallable( -343 new MasterCallable<ModifyTableResponse>(getConnection(), getRpcControllerFactory()) { -344 @Override -345 protected ModifyTableResponse rpcCall() throws Exception { -346 setPriority(td.getTableName()); -347 ModifyTableRequest request = RequestConverter.buildModifyTableRequest( -348 td.getTableName(), td, ng.getNonceGroup(), ng.newNonce()); -349 return master.modifyTable(getRpcController(), request); -350 } -351 }); -352 return new ModifyTableFuture(this, td.getTableName(), response); -353 } -354 -355 @Override -356 public List<TableDescriptor> listTableDescriptorsByNamespace(byte[] name) throws IOException { -357 return executeCallable(new MasterCallable<List<TableDescriptor>>(getConnection(), -358 getRpcControllerFactory()) { -359 @Override -360 protected List<TableDescriptor> rpcCall() throws Exception { -361 return master.listTableDescriptorsByNamespace(getRpcController(), -362 ListTableDescriptorsByNamespaceRequest.newBuilder() -363 .setNamespaceName(Bytes.toString(name)).build()) -364 .getTableSchemaList() -365 .stream() -366 .map(ProtobufUtil::toTableDescriptor) -367 .collect(Collectors.toList()); -368 } -369 }); -370 } -371 -372 @Override -373 public List<TableDescriptor> listTableDescriptors(List<TableName> tableNames) throws IOException { -374 return executeCallable(new MasterCallable<List<TableDescriptor>>(getConnection(), -375 getRpcControllerFactory()) { -376 @Override -377 protected List<TableDescriptor> rpcCall() throws Exception { -378 GetTableDescriptorsRequest req = -379 RequestConverter.buildGetTableDescriptorsRequest(tableNames); -380 return ProtobufUtil.toTableDescriptorList(master.getTableDescriptors(getRpcController(), req)); -381 } -382 }); -383 } -384 -385 @Override -386 public List<RegionInfo> getRegions(final ServerName sn) throws IOException { -387 AdminService.BlockingInterface admin = this.connection.getAdmin(sn); -388 // TODO: There is no timeout on this controller. Set one! -389 HBaseRpcController controller = rpcControllerFactory.newController(); -390 return ProtobufUtil.getOnlineRegions(controller, admin); -391 } -392 -393 @Override -394 public List<RegionInfo> getRegions(TableName tableName) throws IOException { -395 if (TableName.isMetaTableName(tableName)) { -396 return Arrays.asList(RegionInfoBuilder.FIRST_META_REGIONINFO); -397 } else { -398 return MetaTableAccessor.getTableRegions(connection, tableName, true); -399 } -400 } -401 -402 private static class AbortProcedureFuture extends ProcedureFuture<Boolean> { -403 private boolean isAbortInProgress; -404 -405 public AbortProcedureFuture( -406 final HBaseAdmin admin, -407 final Long procId, -408 final Boolean abortProcResponse) { -409 super(admin, procId); -410 this.isAbortInProgress = abortProcResponse; -411 } -412 -413 @Override -414 public Boolean get(long timeout, TimeUnit unit) -415 throws InterruptedException, ExecutionException, TimeoutException { -416 if (!this.isAbortInProgress) { -417 return false; -418 } -419 super.get(timeout, unit); -420 return true; -421 } -422 } -423 -424 /** @return Connection used by this object. */ -425 @Override -426 public Connection getConnection() { -427 return connection; -428 } -429 -430 @Override -431 public boolean tableExists(final TableName tableName) throws IOException { -432 return executeCallable(new RpcRetryingCallable<Boolean>() { -433 @Override -434 protected Boolean rpcCall(int callTimeout) throws Exception { -435 return MetaTableAccessor.tableExists(connection, tableName); -436 } -437 }); -438 } -439 -440 @Override -441 public HTableDescriptor[] listTables() throws IOException { -442 return listTables((Pattern)null, false); -443 } -444 -445 @Override -446 public HTableDescriptor[] listTables(Pattern pattern) throws IOException { -447 return listTables(pattern, false); -448 } -449 -450 @Override -451 public HTableDescriptor[] listTables(String regex) throws IOException { -452 return listTables(Pattern.compile(regex), false); -453 } -454 -455 @Override -456 public HTableDescriptor[] listTables(final Pattern pattern, final boolean includeSysTables) -457 throws IOException { -458 return executeCallable(new MasterCallable<HTableDescriptor[]>(getConnection(), -459 getRpcControllerFactory()) { -460 @Override -461 protected HTableDescriptor[] rpcCall() throws Exception { -462 GetTableDescriptorsRequest req = -463 RequestConverter.buildGetTableDescriptorsRequest(pattern, includeSysTables); -464 return ProtobufUtil.toTableDescriptorList(master.getTableDescriptors(getRpcController(), -465 req)).stream().map(ImmutableHTableDescriptor::new).toArray(HTableDescriptor[]::new); -466 } -467 }); -468 } -469 -470 @Override -471 public HTableDescriptor[] listTables(String regex, boolean includeSysTables) -472 throws IOException { -473 return listTables(Pattern.compile(regex), includeSysTables); -474 } -475 -476 @Override -477 public TableName[] listTableNames() throws IOException { -478 return listTableNames((Pattern)null, false); -479 } -480 -481 @Override -482 public TableName[] listTableNames(Pattern pattern) throws IOException { -483 return listTableNames(pattern, false); -484 } -485 -486 @Override -487 public TableName[] listTableNames(String regex) throws IOException { -488 return listTableNames(Pattern.compile(regex), false); -489 } -490 -491 @Override -492 public TableName[] listTableNames(final Pattern pattern, final boolean includeSysTables) -493 throws IOException { -494 return executeCallable(new MasterCallable<TableName[]>(getConnection(), -495 getRpcControllerFactory()) { -496 @Override -497 protected TableName[] rpcCall() throws Exception { -498 GetTableNamesRequest req = -499 RequestConverter.buildGetTableNamesRequest(pattern, includeSysTables); -500 return ProtobufUtil.getTableNameArray(master.getTableNames(getRpcController(), req) -501 .getTableNamesList()); -502 } -503 }); -504 } -505 -506 @Override -507 public TableName[] listTableNames(final String regex, final boolean includeSysTables) -508 throws IOException { -509 return listTableNames(Pattern.compile(regex), includeSysTables); -510 } -511 -512 @Override -513 public HTableDescriptor getTableDescriptor(final TableName tableName) throws IOException { -514 return getHTableDescriptor(tableName, getConnection(), rpcCallerFactory, rpcControllerFactory, -515 operationTimeout, rpcTimeout); -516 } -517 -518 static TableDescriptor getTableDescriptor(final TableName tableName, Connection connection, -519 RpcRetryingCallerFactory rpcCallerFactory, final RpcControllerFactory rpcControllerFactory, -520 int operationTimeout, int rpcTimeout) throws IOException { -521 if (tableName == null) return null; -522 TableDescriptor td = -523 executeCallable(new MasterCallable<TableDescriptor>(connection, rpcControllerFactory) { -524 @Override -525 protected TableDescriptor rpcCall() throws Exception { -526 GetTableDescriptorsRequest req = -527 RequestConverter.buildGetTableDescriptorsRequest(tableName); -528 GetTableDescriptorsResponse htds = master.getTableDescriptors(getRpcController(), req); -529 if (!htds.getTableSchemaList().isEmpty()) { -530 return ProtobufUtil.toTableDescriptor(htds.getTableSchemaList().get(0)); -531 } -532 return null; -533 } -534 }, rpcCallerFactory, operationTimeout, rpcTimeout); -535 if (td != null) { -536 return td; -537 } -538 throw new TableNotFoundException(tableName.getNameAsString()); -539 } -540 -541 /** -542 * @deprecated since 2.0 version and will be removed in 3.0 version. -543 * use {@link #getTableDescriptor(TableName, -544 * Connection, RpcRetryingCallerFactory,RpcControllerFactory,int,int)} -545 */ -546 @Deprecated -547 static HTableDescriptor getHTableDescriptor(final TableName tableName, Connection connection, -548 RpcRetryingCallerFactory rpcCallerFactory, final RpcControllerFactory rpcControllerFactory, -549 int operationTimeout, int rpcTimeout) throws IOException { -550 if (tableName == null) return null; -551 HTableDescriptor htd = -552 executeCallable(new MasterCallable<HTableDescriptor>(connection, rpcControllerFactory) { -553 @Override -554 protected HTableDescriptor rpcCall() throws Exception { -555 GetTableDescriptorsRequest req = -556 RequestConverter.buildGetTableDescriptorsRequest(tableName); -557 GetTableDescriptorsResponse htds = master.getTableDescriptors(getRpcController(), req); -558 if (!htds.getTableSchemaList().isEmpty()) { -559 return new ImmutableHTableDescriptor(ProtobufUtil.toTableDescriptor(htds.getTableSchemaList().get(0))); -560 } -561 return null; -562 } -563 }, rpcCallerFactory, operationTimeout, rpcTimeout); -564 if (htd != null) { -565 return new ImmutableHTableDescriptor(htd); -566 } -567 throw new TableNotFoundException(tableName.getNameAsString()); -568 } -569 -570 private long getPauseTime(int tries) { -571 int triesCount = tries; -572 if (triesCount >= HConstants.RETRY_BACKOFF.length) { -573 triesCount = HConstants.RETRY_BACKOFF.length - 1; -574 } -575 return this.pause * HConstants.RETRY_BACKOFF[triesCount]; -576 } -577 -578 @Override -579 public void createTable(TableDescriptor desc) -580 throws IOException { -581 createTable(desc, null); -582 } -583 -584 @Override -585 public void createTable(TableDescriptor desc, byte [] startKey, -586 byte [] endKey, int numRegions) -587 throws IOException { -588 if(numRegions < 3) { -589 throw new IllegalArgumentException("Must create at least three regions"); -590 } else if(Bytes.compareTo(startKey, endKey) >= 0) { -591 throw new IllegalArgumentException("Start key must be smaller than end key"); -592 } -593 if (numRegions == 3) { -594 createTable(desc, new byte[][]{startKey, endKey}); -595 return; -596 } -597 byte [][] splitKeys = Bytes.split(startKey, endKey, numRegions - 3); -598 if(splitKeys == null || splitKeys.length != numRegions - 1) { -599 throw new IllegalArgumentException("Unable to split key range into enough regions"); -600 } -601 createTable(desc, splitKeys); -602 } -603 -604 @Override -605 public void createTable(final TableDescriptor desc, byte [][] splitKeys) -606 throws IOException { -607 get(createTableAsync(desc, splitKeys), syncWaitTimeout, TimeUnit.MILLISECONDS); -608 } -609 -610 @Override -611 public Future<Void> createTableAsync(final TableDescriptor desc, final byte[][] splitKeys) -612 throws IOException { -613 if (desc.getTableName() == null) { -614 throw new IllegalArgumentException("TableName cannot be null"); -615 } -616 if (splitKeys != null && splitKeys.length > 0) { -617 Arrays.sort(splitKeys, Bytes.BYTES_COMPARATOR); -618 // Verify there are no duplicate split keys -619 byte[] lastKey = null; -620 for (byte[] splitKey : splitKeys) { -621 if (Bytes.compareTo(splitKey, HConstants.EMPTY_BYTE_ARRAY) == 0) { -622 throw new IllegalArgumentException( -623 "Empty split key must not be passed in the split keys."); -624 } -625 if (lastKey != null && Bytes.equals(splitKey, lastKey)) { -626 throw new IllegalArgumentException("All split keys must be unique, " + -627 "found duplicate: " + Bytes.toStringBinary(splitKey) + -628 ", " + Bytes.toStringBinary(lastKey)); -629 } -630 lastKey = splitKey; -631 } -632 } -633 -634 CreateTableResponse response = executeCallable( -635 new MasterCallable<CreateTableResponse>(getConnection(), getRpcControllerFactory()) { -636 @Override -637 protected CreateTableResponse rpcCall() throws Exception { -638 setPriority(desc.getTableName()); -639 CreateTableRequest request = RequestConverter.buildCreateTableRequest( -640 desc, splitKeys, ng.getNonceGroup(), ng.newNonce()); -641 return master.createTable(getRpcController(), request); -642 } -643 }); -644 return new CreateTableFuture(this, desc, splitKeys, response); -645 } -646 -647 private static class CreateTableFuture extends TableFuture<Void> { -648 private final TableDescriptor desc; -649 private final byte[][] splitKeys; -650 -651 public CreateTableFuture(final HBaseAdmin admin, final TableDescriptor desc, -652 final byte[][] splitKeys, final CreateTableResponse response) { -653 super(admin, desc.getTableName(), -654 (response != null && response.hasProcId()) ? response.getProcId() : null); -655 this.splitKeys = splitKeys; -656 this.desc = desc; -657 } -658 -659 @Override -660 protected TableDescriptor getTableDescriptor() { -661 return desc; -662 } -663 -664 @Override -665 public String getOperationType() { -666 return "CREATE"; -667 } -668 -669 @Override -670 protected Void waitOperationResult(final long deadlineTs) throws IOException, TimeoutException { -671 waitForTableEnabled(deadlineTs); -672 waitForAllRegionsOnline(deadlineTs, splitKeys); -673 return null; -674 } -675 } -676 -677 @Override -678 public void deleteTable(final TableName tableName) throws IOException { -679 get(deleteTableAsync(tableName), syncWaitTimeout, TimeUnit.MILLISECONDS); -680 } -681 -682 @Override -683 public Future<Void> deleteTableAsync(final TableName tableName) throws IOException { -684 DeleteTableResponse response = executeCallable( -685 new MasterCallable<DeleteTableResponse>(getConnection(), getRpcControllerFactory()) { -686 @Override -687 protected DeleteTableResponse rpcCall() throws Exception { -688 setPriority(tableName); -689 DeleteTableRequest req = -690 RequestConverter.buildDeleteTableRequest(tableName, ng.getNonceGroup(),ng.newNonce()); -691 return master.deleteTable(getRpcController(), req); -692 } -693 }); -694 return new DeleteTableFuture(this, tableName, response); -695 } -696 -697 private static class DeleteTableFuture extends TableFuture<Void> { -698 public DeleteTableFuture(final HBaseAdmin admin, final TableName tableName, -699 final DeleteTableResponse response) { -700 super(admin, tableName, -701 (response != null && response.hasProcId()) ? response.getProcId() : null); -702 } -703 -704 @Override -705 public String getOperationType() { -706 return "DELETE"; -707 } -708 -709 @Override -710 protected Void waitOperationResult(final long deadlineTs) -711 throws IOException, TimeoutException { -712 waitTableNotFound(deadlineTs); -713 return null; -714 } -715 -716 @Override -717 protected Void postOperationResult(final Void result, final long deadlineTs) -718 throws IOException, TimeoutException { -719 // Delete cached information to prevent clients from using old locations -720 ((ClusterConnection) getAdmin().getConnection()).clearRegionCache(getTableName()); -721 return super.postOperationResult(result, deadlineTs); -722 } -723 } -724 -725 @Override -726 public HTableDescriptor[] deleteTables(String regex) throws IOException { -727 return deleteTables(Pattern.compile(regex)); -728 } -729 -730 /** -731 * Delete tables matching the passed in pattern and wait on completion. -732 * -733 * Warning: Use this method carefully, there is no prompting and the effect is -734 * immediate. Consider using {@link #listTables(java.util.regex.Pattern) } and -735 * {@link #deleteTable(TableName)} -736 * -737 * @param pattern The pattern to match table names against -738 * @return Table descriptors for tables that couldn't be deleted -739 * @throws IOException -740 */ -741 @Override -742 public HTableDescriptor[] deleteTables(Pattern pattern) throws IOException { -743 List<HTableDescriptor> failed = new LinkedList<>(); -744 for (HTableDescriptor table : listTables(pattern)) { -745 try { -746 deleteTable(table.getTableName()); -747 } catch (IOException ex) { -748 LOG.info("Failed to delete table " + table.getTableName(), ex); -749 failed.add(table); -750 } -751 } -752 return failed.toArray(new HTableDescriptor[failed.size()]); -753 } -754 -755 @Override -756 public void truncateTable(final TableName tableName, final boolean preserveSplits) -757 throws IOException { -758 get(truncateTableAsync(tableName, preserveSplits), syncWaitTimeout, TimeUnit.MILLISECONDS); -759 } -760 -761 @Override -762 public Future<Void> truncateTableAsync(final TableName tableName, final boolean preserveSplits) -763 throws IOException { -764 TruncateTableResponse response = -765 executeCallable(new MasterCallable<TruncateTableResponse>(getConnection(), -766 getRpcControllerFactory()) { -767 @Override -768 protected TruncateTableResponse rpcCall() throws Exception { -769 setPriority(tableName); -770 LOG.info("Started truncating " + tableName); -771 TruncateTableRequest req = RequestConverter.buildTruncateTableRequest( -772 tableName, preserveSplits, ng.getNonceGroup(), ng.newNonce()); -773 return master.truncateTable(getRpcController(), req); -774 } -775 }); -776 return new TruncateTableFuture(this, tableName, preserveSplits, response); -777 } -778 -779 private static class TruncateTableFuture extends TableFuture<Void> { -780 private final boolean preserveSplits; -781 -782 public TruncateTableFuture(final HBaseAdmin admin, final TableName tableName, -783 final boolean preserveSplits, final TruncateTableResponse response) { -784 super(admin, tableName, -785 (response != null && response.hasProcId()) ? response.getProcId() : null); -786 this.preserveSplits = preserveSplits; -787 } -788 -789 @Override -790 public String getOperationType() { -791 return "TRUNCATE"; -792 } -793 -794 @Override -795 protected Void waitOperationResult(final long deadlineTs) throws IOException, TimeoutException { -796 waitForTableEnabled(deadlineTs); -797 // once the table is enabled, we know the operation is done. so we can fetch the splitKeys -798 byte[][] splitKeys = preserveSplits ? getAdmin().getTableSplits(getTableName()) : null; -799 waitForAllRegionsOnline(deadlineTs, splitKeys); -800 return null; -801 } -802 } -803 -804 private byte[][] getTableSplits(final TableName tableName) throws IOException { -805 byte[][] splits = null; -806 try (RegionLocator locator = getConnection().getRegionLocator(tableName)) { -807 byte[][] startKeys = locator.getStartKeys(); -808 if (startKeys.length == 1) { -809 return splits; -810 } -811 splits = new byte[startKeys.length - 1][]; -812 for (int i = 1; i < startKeys.length; i++) { -813 splits[i - 1] = startKeys[i]; -814 } -815 } -816 return splits; -817 } -818 -819 @Override -820 public void enableTable(final TableName tableName) -821 throws IOException { -822 get(enableTableAsync(tableName), syncWaitTimeout, TimeUnit.MILLISECONDS); -823 } -824 -825 @Override -826 public Future<Void> enableTableAsync(final TableName tableName) throws IOException { -827 TableName.isLegalFullyQualifiedTableName(tableName.getName()); -828 EnableTableResponse response = executeCallable( -829 new MasterCallable<EnableTableResponse>(getConnection(), getRpcControllerFactory()) { -830 @Override -831 protected EnableTableResponse rpcCall() throws Exception { -832 setPriority(tableName); -833 LOG.info("Started enable of " + tableName); -834 EnableTableRequest req = -835 RequestConverter.buildEnableTableRequest(tableName, ng.getNonceGroup(),ng.newNonce()); -836 return master.enableTable(getRpcController(),req); -837 } -838 }); -839 return new EnableTableFuture(this, tableName, response); -840 } -841 -842 private static class EnableTableFuture extends TableFuture<Void> { -843 public EnableTableFuture(final HBaseAdmin admin, final TableName tableName, -844 final EnableTableResponse response) { -845 super(admin, tableName, -846 (response != null && response.hasProcId()) ? response.getProcId() : null); -847 } -848 -849 @Override -850 public String getOperationType() { -851 return "ENABLE"; -852 } -853 -854 @Override -855 protected Void waitOperationResult(final long deadlineTs) throws IOException, TimeoutException { -856 waitForTableEnabled(deadlineTs); -857 return null; -858 } -859 } -860 -861 @Override -862 public HTableDescriptor[] enableTables(String regex) throws IOException { -863 return enableTables(Pattern.compile(regex)); -864 } -865 -866 @Override -867 public HTableDescriptor[] enableTables(Pattern pattern) throws IOException { -868 List<HTableDescriptor> failed = new LinkedList<>(); -869 for (HTableDescriptor table : listTables(pattern)) { -870 if (isTableDisabled(table.getTableName())) { -871 try { -872 enableTable(table.getTableName()); -873 } catch (IOException ex) { -874 LOG.info("Failed to enable table " + table.getTableName(), ex); -875 failed.add(table); -876 } -877 } -878 } -879 return failed.toArray(new HTableDescriptor[failed.size()]); -880 } -881 -882 @Override -883 public void disableTable(final TableName tableName) -884 throws IOException { -885 get(disableTableAsync(tableName), syncWaitTimeout, TimeUnit.MILLISECONDS); -886 } -887 -888 @Override -889 public Future<Void> disableTableAsync(final TableName tableName) throws IOException { -890 TableName.isLegalFullyQualifiedTableName(tableName.getName()); -891 DisableTableResponse response = executeCallable( -892 new MasterCallable<DisableTableResponse>(getConnection(), getRpcControllerFactory()) { -893 @Override -894 protected DisableTableResponse rpcCall() throws Exception { -895 setPriority(tableName); -896 LOG.info("Started disable of " + tableName); -897 DisableTableRequest req = -898 RequestConverter.buildDisableTableRequest( -899 tableName, ng.getNonceGroup(), ng.newNonce()); -900 return master.disableTable(getRpcController(), req); -901 } -902 }); -903 return new DisableTableFuture(this, tableName, response); -904 } -905 -906 private static class DisableTableFuture extends TableFuture<Void> { -907 public DisableTableFuture(final HBaseAdmin admin, final TableName tableName, -908 final DisableTableResponse response) { -909 super(admin, tableName, -910 (response != null && response.hasProcId()) ? response.getProcId() : null); -911 } -912 -913 @Override -914 public String getOperationType() { -915 return "DISABLE"; -916 } -917 -918 @Override -919 protected Void waitOperationResult(long deadlineTs) throws IOException, TimeoutException { -920 waitForTableDisabled(deadlineTs); -921 return null; -922 } -923 } -924 -925 @Override -926 public HTableDescriptor[] disableTables(String regex) throws IOException { -927 return disableTables(Pattern.compile(regex)); -928 } -929 -930 @Override -931 public HTableDescriptor[] disableTables(Pattern pattern) throws IOException { -932 List<HTableDescriptor> failed = new LinkedList<>(); -933 for (HTableDescriptor table : listTables(pattern)) { -934 if (isTableEnabled(table.getTableName())) { -935 try { -936 disableTable(table.getTableName()); -937 } catch (IOException ex) { -938 LOG.info("Failed to disable table " + table.getTableName(), ex); -939 failed.add(table); -940 } -941 } -942 } -943 return failed.toArray(new HTableDescriptor[failed.size()]); -944 } -945 -946 @Override -947 public boolean isTableEnabled(final TableName tableName) throws IOException { -948 checkTableExists(tableName); -949 return executeCallabl