1 /** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 */ 19 package org.apache.hadoop.hbase.client; 20 21 import java.io.Closeable; 22 import java.io.IOException; 23 import java.util.List; 24 import java.util.Map; 25 import java.util.concurrent.Future; 26 import java.util.regex.Pattern; 27 28 import org.apache.hadoop.conf.Configuration; 29 import org.apache.hadoop.hbase.Abortable; 30 import org.apache.hadoop.hbase.ClusterStatus; 31 import org.apache.hadoop.hbase.HColumnDescriptor; 32 import org.apache.hadoop.hbase.HRegionInfo; 33 import org.apache.hadoop.hbase.HTableDescriptor; 34 import org.apache.hadoop.hbase.NamespaceDescriptor; 35 import org.apache.hadoop.hbase.ProcedureInfo; 36 import org.apache.hadoop.hbase.ServerName; 37 import org.apache.hadoop.hbase.TableExistsException; 38 import org.apache.hadoop.hbase.TableName; 39 import org.apache.hadoop.hbase.TableNotFoundException; 40 import org.apache.hadoop.hbase.classification.InterfaceAudience; 41 import org.apache.hadoop.hbase.classification.InterfaceStability; 42 import org.apache.hadoop.hbase.client.security.SecurityCapability; 43 import org.apache.hadoop.hbase.ipc.CoprocessorRpcChannel; 44 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos; 45 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos; 46 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos; 47 import org.apache.hadoop.hbase.quotas.QuotaFilter; 48 import org.apache.hadoop.hbase.quotas.QuotaRetriever; 49 import org.apache.hadoop.hbase.quotas.QuotaSettings; 50 import org.apache.hadoop.hbase.regionserver.wal.FailedLogCloseException; 51 import org.apache.hadoop.hbase.snapshot.HBaseSnapshotException; 52 import org.apache.hadoop.hbase.snapshot.RestoreSnapshotException; 53 import org.apache.hadoop.hbase.snapshot.SnapshotCreationException; 54 import org.apache.hadoop.hbase.snapshot.UnknownSnapshotException; 55 import org.apache.hadoop.hbase.util.Pair; 56 57 /** 58 * The administrative API for HBase. Obtain an instance from an {@link Connection#getAdmin()} and 59 * call {@link #close()} afterwards. 60 * <p>Admin can be used to create, drop, list, enable and disable tables, add and drop table 61 * column families and other administrative operations. 62 * 63 * @see ConnectionFactory 64 * @see Connection 65 * @see Table 66 * @since 0.99.0 67 */ 68 @InterfaceAudience.Public 69 @InterfaceStability.Evolving 70 public interface Admin extends Abortable, Closeable { 71 int getOperationTimeout(); 72 73 @Override 74 void abort(String why, Throwable e); 75 76 @Override 77 boolean isAborted(); 78 79 /** 80 * @return Connection used by this object. 81 */ 82 Connection getConnection(); 83 84 /** 85 * @param tableName Table to check. 86 * @return True if table exists already. 87 * @throws IOException 88 */ 89 boolean tableExists(final TableName tableName) throws IOException; 90 91 /** 92 * List all the userspace tables. 93 * 94 * @return - returns an array of HTableDescriptors 95 * @throws IOException if a remote or network exception occurs 96 */ 97 HTableDescriptor[] listTables() throws IOException; 98 99 /** 100 * List all the userspace tables matching the given pattern. 101 * 102 * @param pattern The compiled regular expression to match against 103 * @return - returns an array of HTableDescriptors 104 * @throws IOException if a remote or network exception occurs 105 * @see #listTables() 106 */ 107 HTableDescriptor[] listTables(Pattern pattern) throws IOException; 108 109 /** 110 * List all the userspace tables matching the given regular expression. 111 * 112 * @param regex The regular expression to match against 113 * @return - returns an array of HTableDescriptors 114 * @throws IOException if a remote or network exception occurs 115 * @see #listTables(java.util.regex.Pattern) 116 */ 117 HTableDescriptor[] listTables(String regex) throws IOException; 118 119 /** 120 * List all the tables matching the given pattern. 121 * 122 * @param pattern The compiled regular expression to match against 123 * @param includeSysTables False to match only against userspace tables 124 * @return - returns an array of HTableDescriptors 125 * @throws IOException if a remote or network exception occurs 126 * @see #listTables() 127 */ 128 HTableDescriptor[] listTables(Pattern pattern, boolean includeSysTables) 129 throws IOException; 130 131 /** 132 * List all the tables matching the given pattern. 133 * 134 * @param regex The regular expression to match against 135 * @param includeSysTables False to match only against userspace tables 136 * @return - returns an array of HTableDescriptors 137 * @throws IOException if a remote or network exception occurs 138 * @see #listTables(java.util.regex.Pattern, boolean) 139 */ 140 HTableDescriptor[] listTables(String regex, boolean includeSysTables) 141 throws IOException; 142 143 /** 144 * List all of the names of userspace tables. 145 * 146 * @return TableName[] table names 147 * @throws IOException if a remote or network exception occurs 148 */ 149 TableName[] listTableNames() throws IOException; 150 151 /** 152 * List all of the names of userspace tables. 153 * @param pattern The regular expression to match against 154 * @return TableName[] table names 155 * @throws IOException if a remote or network exception occurs 156 */ 157 TableName[] listTableNames(Pattern pattern) throws IOException; 158 159 /** 160 * List all of the names of userspace tables. 161 * @param regex The regular expression to match against 162 * @return TableName[] table names 163 * @throws IOException if a remote or network exception occurs 164 */ 165 TableName[] listTableNames(String regex) throws IOException; 166 167 /** 168 * List all of the names of userspace tables. 169 * @param pattern The regular expression to match against 170 * @param includeSysTables False to match only against userspace tables 171 * @return TableName[] table names 172 * @throws IOException if a remote or network exception occurs 173 */ 174 TableName[] listTableNames(final Pattern pattern, final boolean includeSysTables) 175 throws IOException; 176 177 /** 178 * List all of the names of userspace tables. 179 * @param regex The regular expression to match against 180 * @param includeSysTables False to match only against userspace tables 181 * @return TableName[] table names 182 * @throws IOException if a remote or network exception occurs 183 */ 184 TableName[] listTableNames(final String regex, final boolean includeSysTables) 185 throws IOException; 186 187 /** 188 * Method for getting the tableDescriptor 189 * 190 * @param tableName as a {@link TableName} 191 * @return the tableDescriptor 192 * @throws org.apache.hadoop.hbase.TableNotFoundException 193 * @throws IOException if a remote or network exception occurs 194 */ 195 HTableDescriptor getTableDescriptor(final TableName tableName) 196 throws TableNotFoundException, IOException; 197 198 /** 199 * Creates a new table. Synchronous operation. 200 * 201 * @param desc table descriptor for table 202 * @throws IllegalArgumentException if the table name is reserved 203 * @throws org.apache.hadoop.hbase.MasterNotRunningException if master is not running 204 * @throws org.apache.hadoop.hbase.TableExistsException if table already exists (If concurrent 205 * threads, the table may have been created between test-for-existence and attempt-at-creation). 206 * @throws IOException if a remote or network exception occurs 207 */ 208 void createTable(HTableDescriptor desc) throws IOException; 209 210 /** 211 * Creates a new table with the specified number of regions. The start key specified will become 212 * the end key of the first region of the table, and the end key specified will become the start 213 * key of the last region of the table (the first region has a null start key and the last region 214 * has a null end key). BigInteger math will be used to divide the key range specified into enough 215 * segments to make the required number of total regions. Synchronous operation. 216 * 217 * @param desc table descriptor for table 218 * @param startKey beginning of key range 219 * @param endKey end of key range 220 * @param numRegions the total number of regions to create 221 * @throws IllegalArgumentException if the table name is reserved 222 * @throws org.apache.hadoop.hbase.MasterNotRunningException if master is not running 223 * @throws org.apache.hadoop.hbase.TableExistsException if table already exists (If concurrent 224 * threads, the table may have been created between test-for-existence and attempt-at-creation). 225 * @throws IOException 226 */ 227 void createTable(HTableDescriptor desc, byte[] startKey, byte[] endKey, int numRegions) 228 throws IOException; 229 230 /** 231 * Creates a new table with an initial set of empty regions defined by the specified split keys. 232 * The total number of regions created will be the number of split keys plus one. Synchronous 233 * operation. Note : Avoid passing empty split key. 234 * 235 * @param desc table descriptor for table 236 * @param splitKeys array of split keys for the initial regions of the table 237 * @throws IllegalArgumentException if the table name is reserved, if the split keys are repeated 238 * and if the split key has empty byte array. 239 * @throws org.apache.hadoop.hbase.MasterNotRunningException if master is not running 240 * @throws org.apache.hadoop.hbase.TableExistsException if table already exists (If concurrent 241 * threads, the table may have been created between test-for-existence and attempt-at-creation). 242 * @throws IOException 243 */ 244 void createTable(final HTableDescriptor desc, byte[][] splitKeys) throws IOException; 245 246 /** 247 * Creates a new table but does not block and wait for it to come online. Asynchronous operation. 248 * To check if the table exists, use {@link #isTableAvailable} -- it is not safe to create an 249 * HTable instance to this table before it is available. Note : Avoid passing empty split key. 250 * 251 * Throws IllegalArgumentException Bad table name, if the split keys 252 * are repeated and if the split key has empty byte array. 253 * 254 * @param desc table descriptor for table 255 * @throws org.apache.hadoop.hbase.MasterNotRunningException if master is not running 256 * @throws org.apache.hadoop.hbase.TableExistsException if table already exists (If concurrent 257 * threads, the table may have been created between test-for-existence and attempt-at-creation). 258 * @throws IOException if a remote or network exception occurs 259 */ 260 void createTableAsync(final HTableDescriptor desc, final byte[][] splitKeys) throws IOException; 261 262 /** 263 * Deletes a table. Synchronous operation. 264 * 265 * @param tableName name of table to delete 266 * @throws IOException if a remote or network exception occurs 267 */ 268 void deleteTable(final TableName tableName) throws IOException; 269 270 /** 271 * Deletes tables matching the passed in pattern and wait on completion. Warning: Use this method 272 * carefully, there is no prompting and the effect is immediate. Consider using {@link 273 * #listTables(java.lang.String)} and {@link #deleteTable(org.apache.hadoop.hbase.TableName)} 274 * 275 * @param regex The regular expression to match table names against 276 * @return Table descriptors for tables that couldn't be deleted 277 * @throws IOException 278 * @see #deleteTables(java.util.regex.Pattern) 279 * @see #deleteTable(org.apache.hadoop.hbase.TableName) 280 */ 281 HTableDescriptor[] deleteTables(String regex) throws IOException; 282 283 /** 284 * Delete tables matching the passed in pattern and wait on completion. Warning: Use this method 285 * carefully, there is no prompting and the effect is immediate. Consider using {@link 286 * #listTables(java.util.regex.Pattern) } and 287 * {@link #deleteTable(org.apache.hadoop.hbase.TableName)} 288 * 289 * @param pattern The pattern to match table names against 290 * @return Table descriptors for tables that couldn't be deleted 291 * @throws IOException 292 */ 293 HTableDescriptor[] deleteTables(Pattern pattern) throws IOException; 294 295 /** 296 * Truncate a table. 297 * Synchronous operation. 298 * 299 * @param tableName name of table to truncate 300 * @param preserveSplits True if the splits should be preserved 301 * @throws IOException if a remote or network exception occurs 302 */ 303 public void truncateTable(final TableName tableName, final boolean preserveSplits) 304 throws IOException; 305 306 /** 307 * Enable a table. May timeout. Use {@link #enableTableAsync(org.apache.hadoop.hbase.TableName)} 308 * and {@link #isTableEnabled(org.apache.hadoop.hbase.TableName)} instead. The table has to be in 309 * disabled state for it to be enabled. 310 * 311 * @param tableName name of the table 312 * @throws IOException if a remote or network exception occurs There could be couple types of 313 * IOException TableNotFoundException means the table doesn't exist. TableNotDisabledException 314 * means the table isn't in disabled state. 315 * @see #isTableEnabled(org.apache.hadoop.hbase.TableName) 316 * @see #disableTable(org.apache.hadoop.hbase.TableName) 317 * @see #enableTableAsync(org.apache.hadoop.hbase.TableName) 318 */ 319 void enableTable(final TableName tableName) throws IOException; 320 321 /** 322 * Brings a table on-line (enables it). Method returns immediately though enable of table may 323 * take some time to complete, especially if the table is large (All regions are opened as part of 324 * enabling process). Check {@link #isTableEnabled(org.apache.hadoop.hbase.TableName)} to learn 325 * when table is fully online. If table is taking too long to online, check server logs. 326 * 327 * @param tableName 328 * @throws IOException 329 * @since 0.90.0 330 */ 331 void enableTableAsync(final TableName tableName) throws IOException; 332 333 /** 334 * Enable tables matching the passed in pattern and wait on completion. Warning: Use this method 335 * carefully, there is no prompting and the effect is immediate. Consider using {@link 336 * #listTables(java.lang.String)} and {@link #enableTable(org.apache.hadoop.hbase.TableName)} 337 * 338 * @param regex The regular expression to match table names against 339 * @throws IOException 340 * @see #enableTables(java.util.regex.Pattern) 341 * @see #enableTable(org.apache.hadoop.hbase.TableName) 342 */ 343 HTableDescriptor[] enableTables(String regex) throws IOException; 344 345 /** 346 * Enable tables matching the passed in pattern and wait on completion. Warning: Use this method 347 * carefully, there is no prompting and the effect is immediate. Consider using {@link 348 * #listTables(java.util.regex.Pattern) } and 349 * {@link #enableTable(org.apache.hadoop.hbase.TableName)} 350 * 351 * @param pattern The pattern to match table names against 352 * @throws IOException 353 */ 354 HTableDescriptor[] enableTables(Pattern pattern) throws IOException; 355 356 /** 357 * Starts the disable of a table. If it is being served, the master will tell the servers to stop 358 * serving it. This method returns immediately. The disable of a table can take some time if the 359 * table is large (all regions are closed as part of table disable operation). Call {@link 360 * #isTableDisabled(org.apache.hadoop.hbase.TableName)} to check for when disable completes. If 361 * table is taking too long to online, check server logs. 362 * 363 * @param tableName name of table 364 * @throws IOException if a remote or network exception occurs 365 * @see #isTableDisabled(org.apache.hadoop.hbase.TableName) 366 * @see #isTableEnabled(org.apache.hadoop.hbase.TableName) 367 * @since 0.90.0 368 */ 369 void disableTableAsync(final TableName tableName) throws IOException; 370 371 /** 372 * Disable table and wait on completion. May timeout eventually. Use {@link 373 * #disableTableAsync(org.apache.hadoop.hbase.TableName)} and 374 * {@link #isTableDisabled(org.apache.hadoop.hbase.TableName)} instead. The table has to be in 375 * enabled state for it to be disabled. 376 * 377 * @param tableName 378 * @throws IOException There could be couple types of IOException TableNotFoundException means the 379 * table doesn't exist. TableNotEnabledException means the table isn't in enabled state. 380 */ 381 void disableTable(final TableName tableName) throws IOException; 382 383 /** 384 * Disable tables matching the passed in pattern and wait on completion. Warning: Use this method 385 * carefully, there is no prompting and the effect is immediate. Consider using {@link 386 * #listTables(java.lang.String)} and {@link #disableTable(org.apache.hadoop.hbase.TableName)} 387 * 388 * @param regex The regular expression to match table names against 389 * @return Table descriptors for tables that couldn't be disabled 390 * @throws IOException 391 * @see #disableTables(java.util.regex.Pattern) 392 * @see #disableTable(org.apache.hadoop.hbase.TableName) 393 */ 394 HTableDescriptor[] disableTables(String regex) throws IOException; 395 396 /** 397 * Disable tables matching the passed in pattern and wait on completion. Warning: Use this method 398 * carefully, there is no prompting and the effect is immediate. Consider using {@link 399 * #listTables(java.util.regex.Pattern) } and 400 * {@link #disableTable(org.apache.hadoop.hbase.TableName)} 401 * 402 * @param pattern The pattern to match table names against 403 * @return Table descriptors for tables that couldn't be disabled 404 * @throws IOException 405 */ 406 HTableDescriptor[] disableTables(Pattern pattern) throws IOException; 407 408 /** 409 * @param tableName name of table to check 410 * @return true if table is on-line 411 * @throws IOException if a remote or network exception occurs 412 */ 413 boolean isTableEnabled(TableName tableName) throws IOException; 414 415 /** 416 * @param tableName name of table to check 417 * @return true if table is off-line 418 * @throws IOException if a remote or network exception occurs 419 */ 420 boolean isTableDisabled(TableName tableName) throws IOException; 421 422 /** 423 * @param tableName name of table to check 424 * @return true if all regions of the table are available 425 * @throws IOException if a remote or network exception occurs 426 */ 427 boolean isTableAvailable(TableName tableName) throws IOException; 428 429 /** 430 * Use this api to check if the table has been created with the specified number of splitkeys 431 * which was used while creating the given table. Note : If this api is used after a table's 432 * region gets splitted, the api may return false. 433 * 434 * @param tableName name of table to check 435 * @param splitKeys keys to check if the table has been created with all split keys 436 * @throws IOException if a remote or network excpetion occurs 437 */ 438 boolean isTableAvailable(TableName tableName, byte[][] splitKeys) throws IOException; 439 440 /** 441 * Get the status of alter command - indicates how many regions have received the updated schema 442 * Asynchronous operation. 443 * 444 * @param tableName TableName instance 445 * @return Pair indicating the number of regions updated Pair.getFirst() is the regions that are 446 * yet to be updated Pair.getSecond() is the total number of regions of the table 447 * @throws IOException if a remote or network exception occurs 448 */ 449 Pair<Integer, Integer> getAlterStatus(final TableName tableName) throws IOException; 450 451 /** 452 * Get the status of alter command - indicates how many regions have received the updated schema 453 * Asynchronous operation. 454 * 455 * @param tableName name of the table to get the status of 456 * @return Pair indicating the number of regions updated Pair.getFirst() is the regions that are 457 * yet to be updated Pair.getSecond() is the total number of regions of the table 458 * @throws IOException if a remote or network exception occurs 459 */ 460 Pair<Integer, Integer> getAlterStatus(final byte[] tableName) throws IOException; 461 462 /** 463 * Add a column to an existing table. Asynchronous operation. 464 * 465 * @param tableName name of the table to add column to 466 * @param column column descriptor of column to be added 467 * @throws IOException if a remote or network exception occurs 468 */ 469 void addColumn(final TableName tableName, final HColumnDescriptor column) throws IOException; 470 471 /** 472 * Delete a column from a table. Asynchronous operation. 473 * 474 * @param tableName name of table 475 * @param columnName name of column to be deleted 476 * @throws IOException if a remote or network exception occurs 477 */ 478 void deleteColumn(final TableName tableName, final byte[] columnName) throws IOException; 479 480 /** 481 * Modify an existing column family on a table. Asynchronous operation. 482 * 483 * @param tableName name of table 484 * @param descriptor new column descriptor to use 485 * @throws IOException if a remote or network exception occurs 486 */ 487 void modifyColumn(final TableName tableName, final HColumnDescriptor descriptor) 488 throws IOException; 489 490 /** 491 * Close a region. For expert-admins. Runs close on the regionserver. The master will not be 492 * informed of the close. 493 * 494 * @param regionname region name to close 495 * @param serverName If supplied, we'll use this location rather than the one currently in 496 * <code>hbase:meta</code> 497 * @throws IOException if a remote or network exception occurs 498 */ 499 void closeRegion(final String regionname, final String serverName) throws IOException; 500 501 /** 502 * Close a region. For expert-admins Runs close on the regionserver. The master will not be 503 * informed of the close. 504 * 505 * @param regionname region name to close 506 * @param serverName The servername of the regionserver. If passed null we will use servername 507 * found in the hbase:meta table. A server name is made of host, port and startcode. Here is an 508 * example: <code> host187.example.com,60020,1289493121758</code> 509 * @throws IOException if a remote or network exception occurs 510 */ 511 void closeRegion(final byte[] regionname, final String serverName) throws IOException; 512 513 /** 514 * For expert-admins. Runs close on the regionserver. Closes a region based on the encoded region 515 * name. The region server name is mandatory. If the servername is provided then based on the 516 * online regions in the specified regionserver the specified region will be closed. The master 517 * will not be informed of the close. Note that the regionname is the encoded regionname. 518 * 519 * @param encodedRegionName The encoded region name; i.e. the hash that makes up the region name 520 * suffix: e.g. if regionname is 521 * <code>TestTable,0094429456,1289497600452.527db22f95c8a9e0116f0cc13c680396.</code>, 522 * then the encoded region name is: <code>527db22f95c8a9e0116f0cc13c680396</code>. 523 * @param serverName The servername of the regionserver. A server name is made of host, port and 524 * startcode. This is mandatory. Here is an example: 525 * <code> host187.example.com,60020,1289493121758</code> 526 * @return true if the region was closed, false if not. 527 * @throws IOException if a remote or network exception occurs 528 */ 529 boolean closeRegionWithEncodedRegionName(final String encodedRegionName, final String serverName) 530 throws IOException; 531 532 /** 533 * Close a region. For expert-admins Runs close on the regionserver. The master will not be 534 * informed of the close. 535 * 536 * @param sn 537 * @param hri 538 * @throws IOException 539 */ 540 void closeRegion(final ServerName sn, final HRegionInfo hri) throws IOException; 541 542 /** 543 * Get all the online regions on a region server. 544 */ 545 List<HRegionInfo> getOnlineRegions(final ServerName sn) throws IOException; 546 547 /** 548 * Flush a table. Synchronous operation. 549 * 550 * @param tableName table to flush 551 * @throws IOException if a remote or network exception occurs 552 */ 553 void flush(final TableName tableName) throws IOException; 554 555 /** 556 * Flush an individual region. Synchronous operation. 557 * 558 * @param regionName region to flush 559 * @throws IOException if a remote or network exception occurs 560 */ 561 void flushRegion(final byte[] regionName) throws IOException; 562 563 /** 564 * Compact a table. Asynchronous operation. 565 * 566 * @param tableName table to compact 567 * @throws IOException if a remote or network exception occurs 568 */ 569 void compact(final TableName tableName) throws IOException; 570 571 /** 572 * Compact an individual region. Asynchronous operation. 573 * 574 * @param regionName region to compact 575 * @throws IOException if a remote or network exception occurs 576 */ 577 void compactRegion(final byte[] regionName) throws IOException; 578 579 /** 580 * Compact a column family within a table. Asynchronous operation. 581 * 582 * @param tableName table to compact 583 * @param columnFamily column family within a table 584 * @throws IOException if a remote or network exception occurs 585 */ 586 void compact(final TableName tableName, final byte[] columnFamily) 587 throws IOException; 588 589 /** 590 * Compact a column family within a region. Asynchronous operation. 591 * 592 * @param regionName region to compact 593 * @param columnFamily column family within a region 594 * @throws IOException if a remote or network exception occurs 595 */ 596 void compactRegion(final byte[] regionName, final byte[] columnFamily) 597 throws IOException; 598 599 /** 600 * Major compact a table. Asynchronous operation. 601 * 602 * @param tableName table to major compact 603 * @throws IOException if a remote or network exception occurs 604 */ 605 void majorCompact(TableName tableName) throws IOException; 606 607 /** 608 * Major compact a table or an individual region. Asynchronous operation. 609 * 610 * @param regionName region to major compact 611 * @throws IOException if a remote or network exception occurs 612 */ 613 void majorCompactRegion(final byte[] regionName) throws IOException; 614 615 /** 616 * Major compact a column family within a table. Asynchronous operation. 617 * 618 * @param tableName table to major compact 619 * @param columnFamily column family within a table 620 * @throws IOException if a remote or network exception occurs 621 */ 622 void majorCompact(TableName tableName, final byte[] columnFamily) 623 throws IOException; 624 625 /** 626 * Major compact a column family within region. Asynchronous operation. 627 * 628 * @param regionName egion to major compact 629 * @param columnFamily column family within a region 630 * @throws IOException if a remote or network exception occurs 631 */ 632 void majorCompactRegion(final byte[] regionName, final byte[] columnFamily) 633 throws IOException; 634 635 /** 636 * Compact all regions on the region server 637 * @param sn the region server name 638 * @param major if it's major compaction 639 * @throws IOException 640 * @throws InterruptedException 641 */ 642 public void compactRegionServer(final ServerName sn, boolean major) 643 throws IOException, InterruptedException; 644 645 /** 646 * Move the region <code>r</code> to <code>dest</code>. 647 * 648 * @param encodedRegionName The encoded region name; i.e. the hash that makes up the region name 649 * suffix: e.g. if regionname is 650 * <code>TestTable,0094429456,1289497600452.527db22f95c8a9e0116f0cc13c680396.</code>, 651 * then the encoded region name is: <code>527db22f95c8a9e0116f0cc13c680396</code>. 652 * @param destServerName The servername of the destination regionserver. If passed the empty byte 653 * array we'll assign to a random server. A server name is made of host, port and startcode. 654 * Here is an example: <code> host187.example.com,60020,1289493121758</code> 655 * @throws IOException if we can't find a region named 656 * <code>encodedRegionName</code> 657 */ 658 void move(final byte[] encodedRegionName, final byte[] destServerName) 659 throws IOException; 660 661 /** 662 * @param regionName Region name to assign. 663 */ 664 void assign(final byte[] regionName) 665 throws IOException; 666 667 /** 668 * Unassign a region from current hosting regionserver. Region will then be assigned to a 669 * regionserver chosen at random. Region could be reassigned back to the same server. Use {@link 670 * #move(byte[], byte[])} if you want to control the region movement. 671 * 672 * @param regionName Region to unassign. Will clear any existing RegionPlan if one found. 673 * @param force If true, force unassign (Will remove region from regions-in-transition too if 674 * present. If results in double assignment use hbck -fix to resolve. To be used by experts). 675 */ 676 void unassign(final byte[] regionName, final boolean force) 677 throws IOException; 678 679 /** 680 * Offline specified region from master's in-memory state. It will not attempt to reassign the 681 * region as in unassign. This API can be used when a region not served by any region server and 682 * still online as per Master's in memory state. If this API is incorrectly used on active region 683 * then master will loose track of that region. This is a special method that should be used by 684 * experts or hbck. 685 * 686 * @param regionName Region to offline. 687 * @throws IOException 688 */ 689 void offline(final byte[] regionName) throws IOException; 690 691 /** 692 * Turn the load balancer on or off. 693 * 694 * @param synchronous If true, it waits until current balance() call, if outstanding, to return. 695 * @return Previous balancer value 696 */ 697 boolean setBalancerRunning(final boolean on, final boolean synchronous) 698 throws IOException; 699 700 /** 701 * Invoke the balancer. Will run the balancer and if regions to move, it will go ahead and do the 702 * reassignments. Can NOT run for various reasons. Check logs. 703 * 704 * @return True if balancer ran, false otherwise. 705 */ 706 boolean balancer() throws IOException; 707 708 /** 709 * Query the current state of the balancer 710 * 711 * @return true if the balancer is enabled, false otherwise. 712 */ 713 boolean isBalancerEnabled() throws IOException; 714 715 /** 716 * Invoke region normalizer. Can NOT run for various reasons. Check logs. 717 * 718 * @return True if region normalizer ran, false otherwise. 719 */ 720 boolean normalize() throws IOException; 721 722 /** 723 * Query the current state of the region normalizer 724 * 725 * @return true if region normalizer is enabled, false otherwise. 726 */ 727 boolean isNormalizerEnabled() throws IOException; 728 729 /** 730 * Turn region normalizer on or off. 731 * 732 * @return Previous normalizer value 733 */ 734 boolean setNormalizerRunning(final boolean on) 735 throws IOException; 736 737 /** 738 * Enable/Disable the catalog janitor 739 * 740 * @param enable if true enables the catalog janitor 741 * @return the previous state 742 */ 743 boolean enableCatalogJanitor(boolean enable) throws IOException; 744 745 /** 746 * Ask for a scan of the catalog table 747 * 748 * @return the number of entries cleaned 749 */ 750 int runCatalogScan() throws IOException; 751 752 /** 753 * Query on the catalog janitor state (Enabled/Disabled?) 754 * 755 */ 756 boolean isCatalogJanitorEnabled() throws IOException; 757 758 /** 759 * Merge two regions. Asynchronous operation. 760 * 761 * @param nameOfRegionA encoded or full name of region a 762 * @param nameOfRegionB encoded or full name of region b 763 * @param forcible true if do a compulsory merge, otherwise we will only merge two adjacent 764 * regions 765 * @throws IOException 766 */ 767 void mergeRegions(final byte[] nameOfRegionA, final byte[] nameOfRegionB, 768 final boolean forcible) throws IOException; 769 770 /** 771 * Split a table. Asynchronous operation. 772 * 773 * @param tableName table to split 774 * @throws IOException if a remote or network exception occurs 775 */ 776 void split(final TableName tableName) throws IOException; 777 778 /** 779 * Split an individual region. Asynchronous operation. 780 * 781 * @param regionName region to split 782 * @throws IOException if a remote or network exception occurs 783 */ 784 void splitRegion(final byte[] regionName) throws IOException; 785 786 /** 787 * Split a table. Asynchronous operation. 788 * 789 * @param tableName table to split 790 * @param splitPoint the explicit position to split on 791 * @throws IOException if a remote or network exception occurs 792 */ 793 void split(final TableName tableName, final byte[] splitPoint) 794 throws IOException; 795 796 /** 797 * Split an individual region. Asynchronous operation. 798 * 799 * @param regionName region to split 800 * @param splitPoint the explicit position to split on 801 * @throws IOException if a remote or network exception occurs 802 */ 803 void splitRegion(final byte[] regionName, final byte[] splitPoint) 804 throws IOException; 805 806 /** 807 * Modify an existing table, more IRB friendly version. Asynchronous operation. This means that 808 * it may be a while before your schema change is updated across all of the table. 809 * 810 * @param tableName name of table. 811 * @param htd modified description of the table 812 * @throws IOException if a remote or network exception occurs 813 */ 814 void modifyTable(final TableName tableName, final HTableDescriptor htd) 815 throws IOException; 816 817 /** 818 * Shuts down the HBase cluster 819 * 820 * @throws IOException if a remote or network exception occurs 821 */ 822 void shutdown() throws IOException; 823 824 /** 825 * Shuts down the current HBase master only. Does not shutdown the cluster. 826 * 827 * @throws IOException if a remote or network exception occurs 828 * @see #shutdown() 829 */ 830 void stopMaster() throws IOException; 831 832 /** 833 * Stop the designated regionserver 834 * 835 * @param hostnamePort Hostname and port delimited by a <code>:</code> as in 836 * <code>example.org:1234</code> 837 * @throws IOException if a remote or network exception occurs 838 */ 839 void stopRegionServer(final String hostnamePort) throws IOException; 840 841 /** 842 * @return cluster status 843 * @throws IOException if a remote or network exception occurs 844 */ 845 ClusterStatus getClusterStatus() throws IOException; 846 847 /** 848 * @return Configuration used by the instance. 849 */ 850 Configuration getConfiguration(); 851 852 /** 853 * Create a new namespace 854 * 855 * @param descriptor descriptor which describes the new namespace 856 * @throws IOException 857 */ 858 void createNamespace(final NamespaceDescriptor descriptor) 859 throws IOException; 860 861 /** 862 * Modify an existing namespace 863 * 864 * @param descriptor descriptor which describes the new namespace 865 * @throws IOException 866 */ 867 void modifyNamespace(final NamespaceDescriptor descriptor) 868 throws IOException; 869 870 /** 871 * Delete an existing namespace. Only empty namespaces (no tables) can be removed. 872 * 873 * @param name namespace name 874 * @throws IOException 875 */ 876 void deleteNamespace(final String name) throws IOException; 877 878 /** 879 * Get a namespace descriptor by name 880 * 881 * @param name name of namespace descriptor 882 * @return A descriptor 883 * @throws IOException 884 */ 885 NamespaceDescriptor getNamespaceDescriptor(final String name) 886 throws IOException; 887 888 /** 889 * List available namespace descriptors 890 * 891 * @return List of descriptors 892 * @throws IOException 893 */ 894 NamespaceDescriptor[] listNamespaceDescriptors() 895 throws IOException; 896 897 /** 898 * Get list of table descriptors by namespace 899 * 900 * @param name namespace name 901 * @return A descriptor 902 * @throws IOException 903 */ 904 HTableDescriptor[] listTableDescriptorsByNamespace(final String name) 905 throws IOException; 906 907 /** 908 * Get list of table names by namespace 909 * 910 * @param name namespace name 911 * @return The list of table names in the namespace 912 * @throws IOException 913 */ 914 TableName[] listTableNamesByNamespace(final String name) 915 throws IOException; 916 917 /** 918 * Get the regions of a given table. 919 * 920 * @param tableName the name of the table 921 * @return List of {@link HRegionInfo}. 922 * @throws IOException 923 */ 924 List<HRegionInfo> getTableRegions(final TableName tableName) 925 throws IOException; 926 927 @Override 928 void close() throws IOException; 929 930 /** 931 * Get tableDescriptors 932 * 933 * @param tableNames List of table names 934 * @return HTD[] the tableDescriptor 935 * @throws IOException if a remote or network exception occurs 936 */ 937 HTableDescriptor[] getTableDescriptorsByTableName(List<TableName> tableNames) 938 throws IOException; 939 940 /** 941 * Get tableDescriptors 942 * 943 * @param names List of table names 944 * @return HTD[] the tableDescriptor 945 * @throws IOException if a remote or network exception occurs 946 */ 947 HTableDescriptor[] getTableDescriptors(List<String> names) 948 throws IOException; 949 950 /** 951 * abort a procedure 952 * @param procId ID of the procedure to abort 953 * @param mayInterruptIfRunning if the proc completed at least one step, should it be aborted? 954 * @return true if aborted, false if procedure already completed or does not exist 955 * @throws IOException 956 */ 957 boolean abortProcedure( 958 final long procId, 959 final boolean mayInterruptIfRunning) throws IOException; 960 961 /** 962 * List procedures 963 * @return procedure list 964 * @throws IOException 965 */ 966 ProcedureInfo[] listProcedures() throws IOException; 967 968 /** 969 * Abort a procedure but does not block and wait for it be completely removed. 970 * You can use Future.get(long, TimeUnit) to wait on the operation to complete. 971 * It may throw ExecutionException if there was an error while executing the operation 972 * or TimeoutException in case the wait timeout was not long enough to allow the 973 * operation to complete. 974 * 975 * @param procId ID of the procedure to abort 976 * @param mayInterruptIfRunning if the proc completed at least one step, should it be aborted? 977 * @return true if aborted, false if procedure already completed or does not exist 978 * @throws IOException 979 */ 980 Future<Boolean> abortProcedureAsync( 981 final long procId, 982 final boolean mayInterruptIfRunning) throws IOException; 983 984 /** 985 * Roll the log writer. I.e. for filesystem based write ahead logs, start writing to a new file. 986 * 987 * Note that the actual rolling of the log writer is asynchronous and may not be complete when 988 * this method returns. As a side effect of this call, the named region server may schedule 989 * store flushes at the request of the wal. 990 * 991 * @param serverName The servername of the regionserver. 992 * @throws IOException if a remote or network exception occurs 993 * @throws org.apache.hadoop.hbase.regionserver.wal.FailedLogCloseException 994 */ 995 void rollWALWriter(ServerName serverName) throws IOException, FailedLogCloseException; 996 997 /** 998 * Helper delegage to getClusterStatus().getMasterCoprocessors(). 999 * @return an array of master coprocessors 1000 * @see org.apache.hadoop.hbase.ClusterStatus#getMasterCoprocessors() 1001 */ 1002 String[] getMasterCoprocessors() throws IOException; 1003 1004 /** 1005 * Get the current compaction state of a table. It could be in a major compaction, a minor 1006 * compaction, both, or none. 1007 * 1008 * @param tableName table to examine 1009 * @return the current compaction state 1010 * @throws IOException if a remote or network exception occurs 1011 */ 1012 AdminProtos.GetRegionInfoResponse.CompactionState getCompactionState(final TableName tableName) 1013 throws IOException; 1014 1015 /** 1016 * Get the current compaction state of region. It could be in a major compaction, a minor 1017 * compaction, both, or none. 1018 * 1019 * @param regionName region to examine 1020 * @return the current compaction state 1021 * @throws IOException if a remote or network exception occurs 1022 */ 1023 AdminProtos.GetRegionInfoResponse.CompactionState getCompactionStateForRegion( 1024 final byte[] regionName) throws IOException; 1025 1026 /** 1027 * Get the timestamp of the last major compaction for the passed table 1028 * 1029 * The timestamp of the oldest HFile resulting from a major compaction of that table, 1030 * or 0 if no such HFile could be found. 1031 * 1032 * @param tableName table to examine 1033 * @return the last major compaction timestamp or 0 1034 * @throws IOException if a remote or network exception occurs 1035 */ 1036 long getLastMajorCompactionTimestamp(final TableName tableName) 1037 throws IOException; 1038 1039 /** 1040 * Get the timestamp of the last major compaction for the passed region. 1041 * 1042 * The timestamp of the oldest HFile resulting from a major compaction of that region, 1043 * or 0 if no such HFile could be found. 1044 * 1045 * @param regionName region to examine 1046 * @return the last major compaction timestamp or 0 1047 * @throws IOException if a remote or network exception occurs 1048 */ 1049 long getLastMajorCompactionTimestampForRegion(final byte[] regionName) 1050 throws IOException; 1051 1052 /** 1053 * Take a snapshot for the given table. If the table is enabled, a FLUSH-type snapshot will be 1054 * taken. If the table is disabled, an offline snapshot is taken. Snapshots are considered unique 1055 * based on <b>the name of the snapshot</b>. Attempts to take a snapshot with the same name (even 1056 * a different type or with different parameters) will fail with a {@link 1057 * org.apache.hadoop.hbase.snapshot.SnapshotCreationException} indicating the duplicate naming. 1058 * Snapshot names follow the same naming constraints as tables in HBase. See {@link 1059 * org.apache.hadoop.hbase.TableName#isLegalFullyQualifiedTableName(byte[])}. 1060 * 1061 * @param snapshotName name of the snapshot to be created 1062 * @param tableName name of the table for which snapshot is created 1063 * @throws IOException if a remote or network exception occurs 1064 * @throws org.apache.hadoop.hbase.snapshot.SnapshotCreationException if snapshot creation failed 1065 * @throws IllegalArgumentException if the snapshot request is formatted incorrectly 1066 */ 1067 void snapshot(final String snapshotName, final TableName tableName) 1068 throws IOException, SnapshotCreationException, IllegalArgumentException; 1069 1070 /** 1071 * public void snapshot(final String snapshotName, Create a timestamp consistent snapshot for the 1072 * given table. final byte[] tableName) throws IOException, Snapshots are considered unique based 1073 * on <b>the name of the snapshot</b>. Attempts to take a snapshot with the same name (even a 1074 * different type or with different parameters) will fail with a {@link SnapshotCreationException} 1075 * indicating the duplicate naming. Snapshot names follow the same naming constraints as tables in 1076 * HBase. 1077 * 1078 * @param snapshotName name of the snapshot to be created 1079 * @param tableName name of the table for which snapshot is created 1080 * @throws IOException if a remote or network exception occurs 1081 * @throws SnapshotCreationException if snapshot creation failed 1082 * @throws IllegalArgumentException if the snapshot request is formatted incorrectly 1083 */ 1084 void snapshot(final byte[] snapshotName, final TableName tableName) 1085 throws IOException, SnapshotCreationException, IllegalArgumentException; 1086 1087 /** 1088 * Create typed snapshot of the table. Snapshots are considered unique based on <b>the name of the 1089 * snapshot</b>. Attempts to take a snapshot with the same name (even a different type or with 1090 * different parameters) will fail with a {@link SnapshotCreationException} indicating the 1091 * duplicate naming. Snapshot names follow the same naming constraints as tables in HBase. See 1092 * {@link org.apache.hadoop.hbase.TableName#isLegalFullyQualifiedTableName(byte[])}. 1093 * 1094 * @param snapshotName name to give the snapshot on the filesystem. Must be unique from all other 1095 * snapshots stored on the cluster 1096 * @param tableName name of the table to snapshot 1097 * @param type type of snapshot to take 1098 * @throws IOException we fail to reach the master 1099 * @throws SnapshotCreationException if snapshot creation failed 1100 * @throws IllegalArgumentException if the snapshot request is formatted incorrectly 1101 */ 1102 void snapshot(final String snapshotName, 1103 final TableName tableName, 1104 HBaseProtos.SnapshotDescription.Type type) throws IOException, SnapshotCreationException, 1105 IllegalArgumentException; 1106 1107 /** 1108 * Take a snapshot and wait for the server to complete that snapshot (blocking). Only a single 1109 * snapshot should be taken at a time for an instance of HBase, or results may be undefined (you 1110 * can tell multiple HBase clusters to snapshot at the same time, but only one at a time for a 1111 * single cluster). Snapshots are considered unique based on <b>the name of the snapshot</b>. 1112 * Attempts to take a snapshot with the same name (even a different type or with different 1113 * parameters) will fail with a {@link SnapshotCreationException} indicating the duplicate naming. 1114 * Snapshot names follow the same naming constraints as tables in HBase. See {@link 1115 * org.apache.hadoop.hbase.TableName#isLegalFullyQualifiedTableName(byte[])}. You should probably 1116 * use {@link #snapshot(String, org.apache.hadoop.hbase.TableName)} or 1117 * {@link #snapshot(byte[], org.apache.hadoop.hbase.TableName)} unless you are sure about the type 1118 * of snapshot that you want to take. 1119 * 1120 * @param snapshot snapshot to take 1121 * @throws IOException or we lose contact with the master. 1122 * @throws SnapshotCreationException if snapshot failed to be taken 1123 * @throws IllegalArgumentException if the snapshot request is formatted incorrectly 1124 */ 1125 void snapshot(HBaseProtos.SnapshotDescription snapshot) 1126 throws IOException, SnapshotCreationException, IllegalArgumentException; 1127 1128 /** 1129 * Take a snapshot without waiting for the server to complete that snapshot (asynchronous) Only a 1130 * single snapshot should be taken at a time, or results may be undefined. 1131 * 1132 * @param snapshot snapshot to take 1133 * @return response from the server indicating the max time to wait for the snapshot 1134 * @throws IOException if the snapshot did not succeed or we lose contact with the master. 1135 * @throws SnapshotCreationException if snapshot creation failed 1136 * @throws IllegalArgumentException if the snapshot request is formatted incorrectly 1137 */ 1138 MasterProtos.SnapshotResponse takeSnapshotAsync(HBaseProtos.SnapshotDescription snapshot) 1139 throws IOException, SnapshotCreationException; 1140 1141 /** 1142 * Check the current state of the passed snapshot. There are three possible states: <ol> 1143 * <li>running - returns <tt>false</tt></li> <li>finished - returns <tt>true</tt></li> 1144 * <li>finished with error - throws the exception that caused the snapshot to fail</li> </ol> The 1145 * cluster only knows about the most recent snapshot. Therefore, if another snapshot has been 1146 * run/started since the snapshot your are checking, you will recieve an {@link 1147 * org.apache.hadoop.hbase.snapshot.UnknownSnapshotException}. 1148 * 1149 * @param snapshot description of the snapshot to check 1150 * @return <tt>true</tt> if the snapshot is completed, <tt>false</tt> if the snapshot is still 1151 * running 1152 * @throws IOException if we have a network issue 1153 * @throws org.apache.hadoop.hbase.snapshot.HBaseSnapshotException if the snapshot failed 1154 * @throws org.apache.hadoop.hbase.snapshot.UnknownSnapshotException if the requested snapshot is 1155 * unknown 1156 */ 1157 boolean isSnapshotFinished(final HBaseProtos.SnapshotDescription snapshot) 1158 throws IOException, HBaseSnapshotException, UnknownSnapshotException; 1159 1160 /** 1161 * Restore the specified snapshot on the original table. (The table must be disabled) If the 1162 * "hbase.snapshot.restore.take.failsafe.snapshot" configuration property is set to true, a 1163 * snapshot of the current table is taken before executing the restore operation. In case of 1164 * restore failure, the failsafe snapshot will be restored. If the restore completes without 1165 * problem the failsafe snapshot is deleted. 1166 * 1167 * @param snapshotName name of the snapshot to restore 1168 * @throws IOException if a remote or network exception occurs 1169 * @throws org.apache.hadoop.hbase.snapshot.RestoreSnapshotException if snapshot failed to be 1170 * restored 1171 * @throws IllegalArgumentException if the restore request is formatted incorrectly 1172 */ 1173 void restoreSnapshot(final byte[] snapshotName) throws IOException, RestoreSnapshotException; 1174 1175 /** 1176 * Restore the specified snapshot on the original table. (The table must be disabled) If the 1177 * "hbase.snapshot.restore.take.failsafe.snapshot" configuration property is set to true, a 1178 * snapshot of the current table is taken before executing the restore operation. In case of 1179 * restore failure, the failsafe snapshot will be restored. If the restore completes without 1180 * problem the failsafe snapshot is deleted. 1181 * 1182 * @param snapshotName name of the snapshot to restore 1183 * @throws IOException if a remote or network exception occurs 1184 * @throws RestoreSnapshotException if snapshot failed to be restored 1185 * @throws IllegalArgumentException if the restore request is formatted incorrectly 1186 */ 1187 void restoreSnapshot(final String snapshotName) throws IOException, RestoreSnapshotException; 1188 1189 /** 1190 * Restore the specified snapshot on the original table. (The table must be disabled) If 1191 * 'takeFailSafeSnapshot' is set to true, a snapshot of the current table is taken before 1192 * executing the restore operation. In case of restore failure, the failsafe snapshot will be 1193 * restored. If the restore completes without problem the failsafe snapshot is deleted. The 1194 * failsafe snapshot name is configurable by using the property 1195 * "hbase.snapshot.restore.failsafe.name". 1196 * 1197 * @param snapshotName name of the snapshot to restore 1198 * @param takeFailSafeSnapshot true if the failsafe snapshot should be taken 1199 * @throws IOException if a remote or network exception occurs 1200 * @throws RestoreSnapshotException if snapshot failed to be restored 1201 * @throws IllegalArgumentException if the restore request is formatted incorrectly 1202 */ 1203 void restoreSnapshot(final byte[] snapshotName, final boolean takeFailSafeSnapshot) 1204 throws IOException, RestoreSnapshotException; 1205 1206 /** 1207 * Restore the specified snapshot on the original table. (The table must be disabled) If 1208 * 'takeFailSafeSnapshot' is set to true, a snapshot of the current table is taken before 1209 * executing the restore operation. In case of restore failure, the failsafe snapshot will be 1210 * restored. If the restore completes without problem the failsafe snapshot is deleted. The 1211 * failsafe snapshot name is configurable by using the property 1212 * "hbase.snapshot.restore.failsafe.name". 1213 * 1214 * @param snapshotName name of the snapshot to restore 1215 * @param takeFailSafeSnapshot true if the failsafe snapshot should be taken 1216 * @throws IOException if a remote or network exception occurs 1217 * @throws RestoreSnapshotException if snapshot failed to be restored 1218 * @throws IllegalArgumentException if the restore request is formatted incorrectly 1219 */ 1220 void restoreSnapshot(final String snapshotName, boolean takeFailSafeSnapshot) 1221 throws IOException, RestoreSnapshotException; 1222 1223 /** 1224 * Create a new table by cloning the snapshot content. 1225 * 1226 * @param snapshotName name of the snapshot to be cloned 1227 * @param tableName name of the table where the snapshot will be restored 1228 * @throws IOException if a remote or network exception occurs 1229 * @throws TableExistsException if table to be created already exists 1230 * @throws RestoreSnapshotException if snapshot failed to be cloned 1231 * @throws IllegalArgumentException if the specified table has not a valid name 1232 */ 1233 void cloneSnapshot(final byte[] snapshotName, final TableName tableName) 1234 throws IOException, TableExistsException, RestoreSnapshotException; 1235 1236 /** 1237 * Create a new table by cloning the snapshot content. 1238 * 1239 * @param snapshotName name of the snapshot to be cloned 1240 * @param tableName name of the table where the snapshot will be restored 1241 * @throws IOException if a remote or network exception occurs 1242 * @throws TableExistsException if table to be created already exists 1243 * @throws RestoreSnapshotException if snapshot failed to be cloned 1244 * @throws IllegalArgumentException if the specified table has not a valid name 1245 */ 1246 void cloneSnapshot(final String snapshotName, final TableName tableName) 1247 throws IOException, TableExistsException, RestoreSnapshotException; 1248 1249 /** 1250 * Execute a distributed procedure on a cluster. 1251 * 1252 * @param signature A distributed procedure is uniquely identified by its signature (default the 1253 * root ZK node name of the procedure). 1254 * @param instance The instance name of the procedure. For some procedures, this parameter is 1255 * optional. 1256 * @param props Property/Value pairs of properties passing to the procedure 1257 * @throws IOException 1258 */ 1259 void execProcedure(String signature, String instance, Map<String, String> props) 1260 throws IOException; 1261 1262 /** 1263 * Execute a distributed procedure on a cluster. 1264 * 1265 * @param signature A distributed procedure is uniquely identified by its signature (default the 1266 * root ZK node name of the procedure). 1267 * @param instance The instance name of the procedure. For some procedures, this parameter is 1268 * optional. 1269 * @param props Property/Value pairs of properties passing to the procedure 1270 * @return data returned after procedure execution. null if no return data. 1271 * @throws IOException 1272 */ 1273 byte[] execProcedureWithRet(String signature, String instance, Map<String, String> props) 1274 throws IOException; 1275 1276 /** 1277 * Check the current state of the specified procedure. There are three possible states: <ol> 1278 * <li>running - returns <tt>false</tt></li> <li>finished - returns <tt>true</tt></li> 1279 * <li>finished with error - throws the exception that caused the procedure to fail</li> </ol> 1280 * 1281 * @param signature The signature that uniquely identifies a procedure 1282 * @param instance The instance name of the procedure 1283 * @param props Property/Value pairs of properties passing to the procedure 1284 * @return true if the specified procedure is finished successfully, false if it is still running 1285 * @throws IOException if the specified procedure finished with error 1286 */ 1287 boolean isProcedureFinished(String signature, String instance, Map<String, String> props) 1288 throws IOException; 1289 1290 /** 1291 * List completed snapshots. 1292 * 1293 * @return a list of snapshot descriptors for completed snapshots 1294 * @throws IOException if a network error occurs 1295 */ 1296 List<HBaseProtos.SnapshotDescription> listSnapshots() throws IOException; 1297 1298 /** 1299 * List all the completed snapshots matching the given regular expression. 1300 * 1301 * @param regex The regular expression to match against 1302 * @return - returns a List of SnapshotDescription 1303 * @throws IOException if a remote or network exception occurs 1304 */ 1305 List<HBaseProtos.SnapshotDescription> listSnapshots(String regex) throws IOException; 1306 1307 /** 1308 * List all the completed snapshots matching the given pattern. 1309 * 1310 * @param pattern The compiled regular expression to match against 1311 * @return - returns a List of SnapshotDescription 1312 * @throws IOException if a remote or network exception occurs 1313 */ 1314 List<HBaseProtos.SnapshotDescription> listSnapshots(Pattern pattern) throws IOException; 1315 1316 /** 1317 * Delete an existing snapshot. 1318 * 1319 * @param snapshotName name of the snapshot 1320 * @throws IOException if a remote or network exception occurs 1321 */ 1322 void deleteSnapshot(final byte[] snapshotName) throws IOException; 1323 1324 /** 1325 * Delete an existing snapshot. 1326 * 1327 * @param snapshotName name of the snapshot 1328 * @throws IOException if a remote or network exception occurs 1329 */ 1330 void deleteSnapshot(final String snapshotName) throws IOException; 1331 1332 /** 1333 * Delete existing snapshots whose names match the pattern passed. 1334 * 1335 * @param regex The regular expression to match against 1336 * @throws IOException if a remote or network exception occurs 1337 */ 1338 void deleteSnapshots(final String regex) throws IOException; 1339 1340 /** 1341 * Delete existing snapshots whose names match the pattern passed. 1342 * 1343 * @param pattern pattern for names of the snapshot to match 1344 * @throws IOException if a remote or network exception occurs 1345 */ 1346 void deleteSnapshots(final Pattern pattern) throws IOException; 1347 1348 /** 1349 * Apply the new quota settings. 1350 * @param quota the quota settings 1351 * @throws IOException if a remote or network exception occurs 1352 */ 1353 void setQuota(final QuotaSettings quota) throws IOException; 1354 1355 /** 1356 * Return a QuotaRetriever to list the quotas based on the filter. 1357 * @param filter the quota settings filter 1358 * @return the quota retriever 1359 * @throws IOException if a remote or network exception occurs 1360 */ 1361 QuotaRetriever getQuotaRetriever(final QuotaFilter filter) throws IOException; 1362 1363 /** 1364 * Creates and returns a {@link com.google.protobuf.RpcChannel} instance connected to the active 1365 * master. <p> The obtained {@link com.google.protobuf.RpcChannel} instance can be used to access 1366 * a published coprocessor {@link com.google.protobuf.Service} using standard protobuf service 1367 * invocations: </p> <div style="background-color: #cccccc; padding: 2px"> 1368 * <blockquote><pre> 1369 * CoprocessorRpcChannel channel = myAdmin.coprocessorService(); 1370 * MyService.BlockingInterface service = MyService.newBlockingStub(channel); 1371 * MyCallRequest request = MyCallRequest.newBuilder() 1372 * ... 1373 * .build(); 1374 * MyCallResponse response = service.myCall(null, request); 1375 * </pre></blockquote></div> 1376 * 1377 * @return A MasterCoprocessorRpcChannel instance 1378 */ 1379 CoprocessorRpcChannel coprocessorService(); 1380 1381 1382 /** 1383 * Creates and returns a {@link com.google.protobuf.RpcChannel} instance 1384 * connected to the passed region server. 1385 * 1386 * <p> 1387 * The obtained {@link com.google.protobuf.RpcChannel} instance can be used to access a published 1388 * coprocessor {@link com.google.protobuf.Service} using standard protobuf service invocations: 1389 * </p> 1390 * 1391 * <div style="background-color: #cccccc; padding: 2px"> 1392 * <blockquote><pre> 1393 * CoprocessorRpcChannel channel = myAdmin.coprocessorService(serverName); 1394 * MyService.BlockingInterface service = MyService.newBlockingStub(channel); 1395 * MyCallRequest request = MyCallRequest.newBuilder() 1396 * ... 1397 * .build(); 1398 * MyCallResponse response = service.myCall(null, request); 1399 * </pre></blockquote></div> 1400 * 1401 * @param sn the server name to which the endpoint call is made 1402 * @return A RegionServerCoprocessorRpcChannel instance 1403 */ 1404 CoprocessorRpcChannel coprocessorService(ServerName sn); 1405 1406 1407 /** 1408 * Update the configuration and trigger an online config change 1409 * on the regionserver 1410 * @param server : The server whose config needs to be updated. 1411 * @throws IOException 1412 */ 1413 void updateConfiguration(ServerName server) throws IOException; 1414 1415 1416 /** 1417 * Update the configuration and trigger an online config change 1418 * on all the regionservers 1419 * @throws IOException 1420 */ 1421 void updateConfiguration() throws IOException; 1422 1423 /** 1424 * Get the info port of the current master if one is available. 1425 * @return master info port 1426 * @throws IOException 1427 */ 1428 public int getMasterInfoPort() throws IOException; 1429 1430 /** 1431 * Return the set of supported security capabilities. 1432 * @throws IOException 1433 * @throws UnsupportedOperationException 1434 */ 1435 List<SecurityCapability> getSecurityCapabilities() throws IOException; 1436 }