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.replication;
20
21 import java.util.List;
22 import java.util.Map;
23 import java.util.Set;
24
25 import org.apache.hadoop.hbase.classification.InterfaceAudience;
26 import org.apache.hadoop.conf.Configuration;
27 import org.apache.hadoop.hbase.TableName;
28 import org.apache.hadoop.hbase.util.Pair;
29
30 /**
31 * This provides an interface for maintaining a set of peer clusters. These peers are remote slave
32 * clusters that data is replicated to. A peer cluster can be in three different states:
33 *
34 * 1. Not-Registered - There is no notion of the peer cluster.
35 * 2. Registered - The peer has an id and is being tracked but there is no connection.
36 * 3. Connected - There is an active connection to the remote peer.
37 *
38 * In the registered or connected state, a peer cluster can either be enabled or disabled.
39 */
40 @InterfaceAudience.Private
41 public interface ReplicationPeers {
42
43 /**
44 * Initialize the ReplicationPeers interface.
45 */
46 void init() throws ReplicationException;
47
48 /**
49 * Add a new remote slave cluster for replication.
50 * @param peerId a short that identifies the cluster
51 * @param peerConfig configuration for the replication slave cluster
52 * @param tableCFs the table and column-family list which will be replicated for this peer or null
53 * for all table and column families
54 */
55 void addPeer(String peerId, ReplicationPeerConfig peerConfig, String tableCFs)
56 throws ReplicationException;
57
58 /**
59 * Removes a remote slave cluster and stops the replication to it.
60 * @param peerId a short that identifies the cluster
61 */
62 void removePeer(String peerId) throws ReplicationException;
63
64 boolean peerAdded(String peerId) throws ReplicationException;
65
66 void peerRemoved(String peerId);
67
68 /**
69 * Restart the replication to the specified remote slave cluster.
70 * @param peerId a short that identifies the cluster
71 */
72 void enablePeer(String peerId) throws ReplicationException;
73
74 /**
75 * Stop the replication to the specified remote slave cluster.
76 * @param peerId a short that identifies the cluster
77 */
78 void disablePeer(String peerId) throws ReplicationException;
79
80 /**
81 * Get the table and column-family list string of the peer from ZK.
82 * @param peerId a short that identifies the cluster
83 */
84 public String getPeerTableCFsConfig(String peerId) throws ReplicationException;
85
86 /**
87 * Set the table and column-family list string of the peer to ZK.
88 * @param peerId a short that identifies the cluster
89 * @param tableCFs the table and column-family list which will be replicated for this peer
90 */
91 public void setPeerTableCFsConfig(String peerId, String tableCFs) throws ReplicationException;
92
93 /**
94 * Get the table and column-family-list map of the peer.
95 * @param peerId a short that identifies the cluster
96 * @return the table and column-family list which will be replicated for this peer
97 */
98 public Map<TableName, List<String>> getTableCFs(String peerId);
99
100 /**
101 * Returns the ReplicationPeer
102 * @param peerId id for the peer
103 * @return ReplicationPeer object
104 */
105 ReplicationPeer getPeer(String peerId);
106
107 /**
108 * Returns the set of peerIds defined
109 * @return a Set of Strings for peerIds
110 */
111 public Set<String> getPeerIds();
112
113 /**
114 * Get the replication status for the specified connected remote slave cluster.
115 * The value might be read from cache, so it is recommended to
116 * use {@link #getStatusOfPeerFromBackingStore(String)}
117 * if reading the state after enabling or disabling it.
118 * @param peerId a short that identifies the cluster
119 * @return true if replication is enabled, false otherwise.
120 */
121 boolean getStatusOfPeer(String peerId);
122
123 /**
124 * Get the replication status for the specified remote slave cluster, which doesn't
125 * have to be connected. The state is read directly from the backing store.
126 * @param peerId a short that identifies the cluster
127 * @return true if replication is enabled, false otherwise.
128 * @throws ReplicationException thrown if there's an error contacting the store
129 */
130 boolean getStatusOfPeerFromBackingStore(String peerId) throws ReplicationException;
131
132 /**
133 * List the cluster replication configs of all remote slave clusters (whether they are
134 * enabled/disabled or connected/disconnected).
135 * @return A map of peer ids to peer cluster keys
136 */
137 Map<String, ReplicationPeerConfig> getAllPeerConfigs();
138
139 /**
140 * List the peer ids of all remote slave clusters (whether they are enabled/disabled or
141 * connected/disconnected).
142 * @return A list of peer ids
143 */
144 List<String> getAllPeerIds();
145
146 /**
147 * Returns the configured ReplicationPeerConfig for this peerId
148 * @param peerId a short name that identifies the cluster
149 * @return ReplicationPeerConfig for the peer
150 */
151 ReplicationPeerConfig getReplicationPeerConfig(String peerId) throws ReplicationException;
152
153 /**
154 * Returns the configuration needed to talk to the remote slave cluster.
155 * @param peerId a short that identifies the cluster
156 * @return the configuration for the peer cluster, null if it was unable to get the configuration
157 */
158 Pair<ReplicationPeerConfig, Configuration> getPeerConf(String peerId) throws ReplicationException;
159 }