1 /**
2 * Copyright The Apache Software Foundation
3 *
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements. See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership. The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License. You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 */
20
21 package org.apache.hadoop.hbase.rsgroup;
22
23 import com.google.common.net.HostAndPort;
24
25 import java.io.IOException;
26 import java.util.List;
27 import java.util.Set;
28
29 import org.apache.hadoop.hbase.NamespaceDescriptor;
30 import org.apache.hadoop.hbase.TableName;
31 import org.apache.hadoop.hbase.util.Bytes;
32
33 /**
34 * Interface used to manage RSGroupInfo storage. An implementation
35 * has the option to support offline mode.
36 * See {@link RSGroupBasedLoadBalancer}
37 */
38 public interface RSGroupInfoManager {
39 //Assigned before user tables
40 public static final TableName RSGROUP_TABLE_NAME =
41 TableName.valueOf(NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "rsgroup");
42 public static final byte[] RSGROUP_TABLE_NAME_BYTES = RSGROUP_TABLE_NAME.toBytes();
43 public static final String rsGroupZNode = "rsgroup";
44 public static final byte[] META_FAMILY_BYTES = Bytes.toBytes("m");
45 public static final byte[] META_QUALIFIER_BYTES = Bytes.toBytes("i");
46 public static final byte[] ROW_KEY = {0};
47
48
49 /**
50 * Adds the group.
51 *
52 * @param rsGroupInfo the group name
53 * @throws java.io.IOException Signals that an I/O exception has occurred.
54 */
55 void addRSGroup(RSGroupInfo rsGroupInfo) throws IOException;
56
57 /**
58 * Remove a region server group.
59 *
60 * @param groupName the group name
61 * @throws java.io.IOException Signals that an I/O exception has occurred.
62 */
63 void removeRSGroup(String groupName) throws IOException;
64
65 /**
66 * move servers to a new group.
67 * @param hostPorts list of servers, must be part of the same group
68 * @param srcGroup groupName being moved from
69 * @param dstGroup groupName being moved to
70 * @return true if move was successful
71 * @throws java.io.IOException on move failure
72 */
73 boolean moveServers(Set<HostAndPort> hostPorts,
74 String srcGroup, String dstGroup) throws IOException;
75
76 /**
77 * Gets the group info of server.
78 *
79 * @param hostPort the server
80 * @return An instance of RSGroupInfo
81 */
82 RSGroupInfo getRSGroupOfServer(HostAndPort hostPort) throws IOException;
83
84 /**
85 * Gets the group information.
86 *
87 * @param groupName the group name
88 * @return An instance of RSGroupInfo
89 */
90 RSGroupInfo getRSGroup(String groupName) throws IOException;
91
92 /**
93 * Get the group membership of a table
94 * @param tableName name of table to get group membership
95 * @return Group name of table
96 * @throws java.io.IOException on failure to retrive information
97 */
98 String getRSGroupOfTable(TableName tableName) throws IOException;
99
100 /**
101 * Set the group membership of a set of tables
102 *
103 * @param tableNames set of tables to move
104 * @param groupName name of group of tables to move to
105 * @throws java.io.IOException on failure to move
106 */
107 void moveTables(Set<TableName> tableNames, String groupName) throws IOException;
108
109 /**
110 * List the groups
111 *
112 * @return list of RSGroupInfo
113 * @throws java.io.IOException on failure
114 */
115 List<RSGroupInfo> listRSGroups() throws IOException;
116
117 /**
118 * Refresh/reload the group information from
119 * the persistent store
120 *
121 * @throws java.io.IOException on failure to refresh
122 */
123 void refresh() throws IOException;
124
125 /**
126 * Whether the manager is able to fully
127 * return group metadata
128 *
129 * @return whether the manager is in online mode
130 */
131 boolean isOnline();
132 }