View Javadoc

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;
20  
21  import java.io.InterruptedIOException;
22  import java.util.Set;
23  
24  import org.apache.hadoop.hbase.classification.InterfaceAudience;
25  import org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos;
26  
27  /**
28   * Helper class for table state management for operations running inside
29   * RegionServer or HMaster.
30   * Depending on implementation, fetches information from HBase system table,
31   * local data store, ZooKeeper ensemble or somewhere else.
32   * Code running on client side (with no coordinated state context) shall instead use
33   * {@link org.apache.hadoop.hbase.zookeeper.ZKTableStateClientSideReader}
34   */
35  @InterfaceAudience.Private
36  public interface TableStateManager {
37  
38    /**
39     * Sets the table into desired state. Fails silently if the table is already in this state.
40     * @param tableName table to process
41     * @param state new state of this table
42     * @throws CoordinatedStateException if error happened when trying to set table state
43     */
44    void setTableState(TableName tableName, ZooKeeperProtos.Table.State state)
45      throws CoordinatedStateException;
46  
47    /**
48     * Sets the specified table into the newState, but only if the table is already in
49     * one of the possibleCurrentStates (otherwise no operation is performed).
50     * @param tableName table to process
51     * @param newState new state for the table
52     * @param states table should be in one of these states for the operation
53     *                              to be performed
54     * @throws CoordinatedStateException if error happened while performing operation
55     * @return true if operation succeeded, false otherwise
56     */
57    boolean setTableStateIfInStates(TableName tableName, ZooKeeperProtos.Table.State newState,
58                                    ZooKeeperProtos.Table.State... states)
59      throws CoordinatedStateException;
60  
61    /**
62     * Sets the specified table into the newState, but only if the table is NOT in
63     * one of the possibleCurrentStates (otherwise no operation is performed).
64     * @param tableName table to process
65     * @param newState new state for the table
66     * @param states table should NOT be in one of these states for the operation
67     *                              to be performed
68     * @throws CoordinatedStateException if error happened while performing operation
69     * @return true if operation succeeded, false otherwise
70     */
71    boolean setTableStateIfNotInStates(TableName tableName, ZooKeeperProtos.Table.State newState,
72                                       ZooKeeperProtos.Table.State... states)
73      throws CoordinatedStateException;
74  
75    /**
76     * @return true if the table is in any one of the listed states, false otherwise.
77     */
78    boolean isTableState(TableName tableName, ZooKeeperProtos.Table.State... states);
79  
80    /**
81     * @return true if the table is in any one of the listed states, false otherwise.
82     */
83    boolean isTableState(TableName tableName, boolean checkSource,
84        ZooKeeperProtos.Table.State... states);
85  
86    /**
87     * Mark table as deleted. Fails silently if the table is not currently marked as disabled.
88     * @param tableName table to be deleted
89     * @throws CoordinatedStateException if error happened while performing operation
90     */
91    void setDeletedTable(TableName tableName) throws CoordinatedStateException;
92  
93    /**
94     * Checks if table is present.
95     *
96     * @param tableName table we're checking
97     * @return true if the table is present, false otherwise
98     */
99    boolean isTablePresent(TableName tableName);
100 
101   /**
102    * @return set of tables which are in any one of the listed states, empty Set if none
103    */
104   Set<TableName> getTablesInStates(ZooKeeperProtos.Table.State... states)
105     throws InterruptedIOException, CoordinatedStateException;
106 
107   /**
108    * If the table is found in the given state the in-memory state is removed. This
109    * helps in cases where CreateTable is to be retried by the client in case of
110    * failures.  If deletePermanentState is true - the flag kept permanently is
111    * also reset.
112    *
113    * @param tableName table we're working on
114    * @param states if table isn't in any one of these states, operation aborts
115    * @param deletePermanentState if true, reset the permanent flag
116    * @throws CoordinatedStateException if error happened in underlying coordination engine
117    */
118   void checkAndRemoveTableState(TableName tableName, ZooKeeperProtos.Table.State states,
119                             boolean deletePermanentState)
120     throws CoordinatedStateException;
121 }