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