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.master;
20  
21  import java.io.IOException;
22  import java.util.List;
23  
24  import org.apache.hadoop.classification.InterfaceAudience;
25  import org.apache.hadoop.hbase.TableName;
26  import org.apache.hadoop.hbase.HColumnDescriptor;
27  import org.apache.hadoop.hbase.HRegionInfo;
28  import org.apache.hadoop.hbase.HTableDescriptor;
29  import org.apache.hadoop.hbase.NamespaceDescriptor;
30  import org.apache.hadoop.hbase.Server;
31  import org.apache.hadoop.hbase.TableDescriptors;
32  import org.apache.hadoop.hbase.TableNotDisabledException;
33  import org.apache.hadoop.hbase.TableNotFoundException;
34  import org.apache.hadoop.hbase.executor.ExecutorService;
35  
36  import com.google.protobuf.Service;
37  
38  /**
39   * Services Master supplies
40   */
41  @InterfaceAudience.Private
42  public interface MasterServices extends Server {
43    /**
44     * @return Master's instance of the {@link AssignmentManager}
45     */
46    AssignmentManager getAssignmentManager();
47  
48    /**
49     * @return Master's filesystem {@link MasterFileSystem} utility class.
50     */
51    MasterFileSystem getMasterFileSystem();
52  
53    /**
54     * @return Master's {@link ServerManager} instance.
55     */
56    ServerManager getServerManager();
57  
58    /**
59     * @return Master's instance of {@link ExecutorService}
60     */
61    ExecutorService getExecutorService();
62  
63    /**
64     * @return Master's instance of {@link TableLockManager}
65     */
66    TableLockManager getTableLockManager();
67  
68    /**
69     * @return Master's instance of {@link MasterCoprocessorHost}
70     */
71    MasterCoprocessorHost getCoprocessorHost();
72  
73    /**
74     * Check table is modifiable; i.e. exists and is offline.
75     * @param tableName Name of table to check.
76     * @throws TableNotDisabledException
77     * @throws TableNotFoundException
78     * @throws IOException
79     */
80    // We actually throw the exceptions mentioned in the
81    void checkTableModifiable(final TableName tableName)
82        throws IOException, TableNotFoundException, TableNotDisabledException;
83  
84    /**
85     * Create a table using the given table definition.
86     * @param desc The table definition
87     * @param splitKeys Starting row keys for the initial table regions.  If null
88     *     a single region is created.
89     */
90    void createTable(HTableDescriptor desc, byte[][] splitKeys)
91        throws IOException;
92  
93    /**
94     * Delete a table
95     * @param tableName The table name
96     * @throws IOException
97     */
98    void deleteTable(final TableName tableName) throws IOException;
99  
100   /**
101    * Modify the descriptor of an existing table
102    * @param tableName The table name
103    * @param descriptor The updated table descriptor
104    * @throws IOException
105    */
106   void modifyTable(final TableName tableName, final HTableDescriptor descriptor)
107       throws IOException;
108 
109   /**
110    * Enable an existing table
111    * @param tableName The table name
112    * @throws IOException
113    */
114   void enableTable(final TableName tableName) throws IOException;
115 
116   /**
117    * Disable an existing table
118    * @param tableName The table name
119    * @throws IOException
120    */
121   void disableTable(final TableName tableName) throws IOException;
122 
123 
124   /**
125    * Add a new column to an existing table
126    * @param tableName The table name
127    * @param column The column definition
128    * @throws IOException
129    */
130   void addColumn(final TableName tableName, final HColumnDescriptor column)
131       throws IOException;
132 
133   /**
134    * Modify the column descriptor of an existing column in an existing table
135    * @param tableName The table name
136    * @param descriptor The updated column definition
137    * @throws IOException
138    */
139   void modifyColumn(TableName tableName, HColumnDescriptor descriptor)
140       throws IOException;
141 
142   /**
143    * Delete a column from an existing table
144    * @param tableName The table name
145    * @param columnName The column name
146    * @throws IOException
147    */
148   void deleteColumn(final TableName tableName, final byte[] columnName)
149       throws IOException;
150 
151   /**
152    * @return Return table descriptors implementation.
153    */
154   TableDescriptors getTableDescriptors();
155 
156   /**
157    * @return true if master enables ServerShutdownHandler;
158    */
159   boolean isServerShutdownHandlerEnabled();
160 
161   /**
162    * Registers a new protocol buffer {@link Service} subclass as a master coprocessor endpoint.
163    *
164    * <p>
165    * Only a single instance may be registered for a given {@link Service} subclass (the
166    * instances are keyed on {@link com.google.protobuf.Descriptors.ServiceDescriptor#getFullName()}.
167    * After the first registration, subsequent calls with the same service name will fail with
168    * a return value of {@code false}.
169    * </p>
170    * @param instance the {@code Service} subclass instance to expose as a coprocessor endpoint
171    * @return {@code true} if the registration was successful, {@code false}
172    * otherwise
173    */
174   boolean registerService(Service instance);
175 
176   /**
177    * Merge two regions. The real implementation is on the regionserver, master
178    * just move the regions together and send MERGE RPC to regionserver
179    * @param region_a region to merge
180    * @param region_b region to merge
181    * @param forcible true if do a compulsory merge, otherwise we will only merge
182    *          two adjacent regions
183    * @throws IOException
184    */
185   void dispatchMergingRegions(
186     final HRegionInfo region_a, final HRegionInfo region_b, final boolean forcible
187   ) throws IOException;
188 
189   /**
190    * @return true if master is initialized
191    */
192   boolean isInitialized();
193 
194   /**
195    * Create a new namespace
196    * @param descriptor descriptor which describes the new namespace
197    * @throws IOException
198    */
199   public void createNamespace(NamespaceDescriptor descriptor) throws IOException;
200 
201   /**
202    * Modify an existing namespace
203    * @param descriptor descriptor which updates the existing namespace
204    * @throws IOException
205    */
206   public void modifyNamespace(NamespaceDescriptor descriptor) throws IOException;
207 
208   /**
209    * Delete an existing namespace. Only empty namespaces (no tables) can be removed.
210    * @param name namespace name
211    * @throws IOException
212    */
213   public void deleteNamespace(String name) throws IOException;
214 
215   /**
216    * Get a namespace descriptor by name
217    * @param name name of namespace descriptor
218    * @return A descriptor
219    * @throws IOException
220    */
221   public NamespaceDescriptor getNamespaceDescriptor(String name) throws IOException;
222 
223   /**
224    * List available namespace descriptors
225    * @return A descriptor
226    * @throws IOException
227    */
228   public List<NamespaceDescriptor> listNamespaceDescriptors() throws IOException;
229 
230   /**
231    * Get list of table descriptors by namespace
232    * @param name namespace name
233    * @return descriptors
234    * @throws IOException
235    */
236   public List<HTableDescriptor> listTableDescriptorsByNamespace(String name) throws IOException;
237 
238   /**
239    * Get list of table names by namespace
240    * @param name namespace name
241    * @return table names
242    * @throws IOException
243    */
244   public List<TableName> listTableNamesByNamespace(String name) throws IOException;
245 }