http://git-wip-us.apache.org/repos/asf/hbase-site/blob/fd365a2b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ModifyTableFuture.html
----------------------------------------------------------------------
diff --git
a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ModifyTableFuture.html
b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ModifyTableFuture.html
index d438f22..7c59e27 100644
---
a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ModifyTableFuture.html
+++
b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.ModifyTableFuture.html
@@ -1290,8 +1290,8 @@
<span class="sourceLineNo">1282</span> CompactType
compactType) throws IOException {<a name="line.1282"></a>
<span class="sourceLineNo">1283</span> switch (compactType) {<a
name="line.1283"></a>
<span class="sourceLineNo">1284</span> case MOB:<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>
compact(this.connection.getAdminForMaster(), getMobRegionInfo(tableName),
major,<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span> columnFamily);<a
name="line.1286"></a>
+<span class="sourceLineNo">1285</span>
compact(this.connection.getAdminForMaster(),
RegionInfo.createMobRegionInfo(tableName),<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span> major, columnFamily);<a
name="line.1286"></a>
<span class="sourceLineNo">1287</span> break;<a name="line.1287"></a>
<span class="sourceLineNo">1288</span> case NORMAL:<a
name="line.1288"></a>
<span class="sourceLineNo">1289</span> checkTableExists(tableName);<a
name="line.1289"></a>
@@ -3248,7 +3248,7 @@
<span class="sourceLineNo">3240</span> new
Callable<AdminProtos.GetRegionInfoResponse.CompactionState>() {<a
name="line.3240"></a>
<span class="sourceLineNo">3241</span> @Override<a
name="line.3241"></a>
<span class="sourceLineNo">3242</span> public
AdminProtos.GetRegionInfoResponse.CompactionState call() throws Exception {<a
name="line.3242"></a>
-<span class="sourceLineNo">3243</span> RegionInfo info =
getMobRegionInfo(tableName);<a name="line.3243"></a>
+<span class="sourceLineNo">3243</span> RegionInfo info =
RegionInfo.createMobRegionInfo(tableName);<a name="line.3243"></a>
<span class="sourceLineNo">3244</span> GetRegionInfoRequest
request =<a name="line.3244"></a>
<span class="sourceLineNo">3245</span>
RequestConverter.buildGetRegionInfoRequest(info.getRegionName(), true);<a
name="line.3245"></a>
<span class="sourceLineNo">3246</span> GetRegionInfoResponse
response = masterAdmin.getRegionInfo(rpcController, request);<a
name="line.3246"></a>
@@ -3312,7 +3312,7 @@
<span class="sourceLineNo">3304</span> }<a name="line.3304"></a>
<span class="sourceLineNo">3305</span> break;<a name="line.3305"></a>
<span class="sourceLineNo">3306</span> default:<a name="line.3306"></a>
-<span class="sourceLineNo">3307</span> throw new
IllegalArgumentException("Unknowne compactType: " + compactType);<a
name="line.3307"></a>
+<span class="sourceLineNo">3307</span> throw new
IllegalArgumentException("Unknown compactType: " + compactType);<a
name="line.3307"></a>
<span class="sourceLineNo">3308</span> }<a name="line.3308"></a>
<span class="sourceLineNo">3309</span> if (state != null) {<a
name="line.3309"></a>
<span class="sourceLineNo">3310</span> return
ProtobufUtil.createCompactionState(state);<a name="line.3310"></a>
@@ -3847,325 +3847,320 @@
<span class="sourceLineNo">3839</span> });<a name="line.3839"></a>
<span class="sourceLineNo">3840</span> }<a name="line.3840"></a>
<span class="sourceLineNo">3841</span><a name="line.3841"></a>
-<span class="sourceLineNo">3842</span> private RegionInfo
getMobRegionInfo(TableName tableName) {<a name="line.3842"></a>
-<span class="sourceLineNo">3843</span> return
RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(".mob")).setRegionId(0)<a
name="line.3843"></a>
-<span class="sourceLineNo">3844</span> .build();<a name="line.3844"></a>
-<span class="sourceLineNo">3845</span> }<a name="line.3845"></a>
-<span class="sourceLineNo">3846</span><a name="line.3846"></a>
-<span class="sourceLineNo">3847</span> private RpcControllerFactory
getRpcControllerFactory() {<a name="line.3847"></a>
-<span class="sourceLineNo">3848</span> return this.rpcControllerFactory;<a
name="line.3848"></a>
-<span class="sourceLineNo">3849</span> }<a name="line.3849"></a>
-<span class="sourceLineNo">3850</span><a name="line.3850"></a>
-<span class="sourceLineNo">3851</span> @Override<a name="line.3851"></a>
-<span class="sourceLineNo">3852</span> public void addReplicationPeer(String
peerId, ReplicationPeerConfig peerConfig, boolean enabled)<a
name="line.3852"></a>
-<span class="sourceLineNo">3853</span> throws IOException {<a
name="line.3853"></a>
-<span class="sourceLineNo">3854</span> executeCallable(new
MasterCallable<Void>(getConnection(), getRpcControllerFactory()) {<a
name="line.3854"></a>
-<span class="sourceLineNo">3855</span> @Override<a name="line.3855"></a>
-<span class="sourceLineNo">3856</span> protected Void rpcCall() throws
Exception {<a name="line.3856"></a>
-<span class="sourceLineNo">3857</span>
master.addReplicationPeer(getRpcController(),<a name="line.3857"></a>
-<span class="sourceLineNo">3858</span>
RequestConverter.buildAddReplicationPeerRequest(peerId, peerConfig,
enabled));<a name="line.3858"></a>
-<span class="sourceLineNo">3859</span> return null;<a
name="line.3859"></a>
-<span class="sourceLineNo">3860</span> }<a name="line.3860"></a>
-<span class="sourceLineNo">3861</span> });<a name="line.3861"></a>
-<span class="sourceLineNo">3862</span> }<a name="line.3862"></a>
-<span class="sourceLineNo">3863</span><a name="line.3863"></a>
-<span class="sourceLineNo">3864</span> @Override<a name="line.3864"></a>
-<span class="sourceLineNo">3865</span> public void
removeReplicationPeer(String peerId) throws IOException {<a
name="line.3865"></a>
-<span class="sourceLineNo">3866</span> executeCallable(new
MasterCallable<Void>(getConnection(), getRpcControllerFactory()) {<a
name="line.3866"></a>
-<span class="sourceLineNo">3867</span> @Override<a name="line.3867"></a>
-<span class="sourceLineNo">3868</span> protected Void rpcCall() throws
Exception {<a name="line.3868"></a>
-<span class="sourceLineNo">3869</span>
master.removeReplicationPeer(getRpcController(),<a name="line.3869"></a>
-<span class="sourceLineNo">3870</span>
RequestConverter.buildRemoveReplicationPeerRequest(peerId));<a
name="line.3870"></a>
-<span class="sourceLineNo">3871</span> return null;<a
name="line.3871"></a>
-<span class="sourceLineNo">3872</span> }<a name="line.3872"></a>
-<span class="sourceLineNo">3873</span> });<a name="line.3873"></a>
-<span class="sourceLineNo">3874</span> }<a name="line.3874"></a>
-<span class="sourceLineNo">3875</span><a name="line.3875"></a>
-<span class="sourceLineNo">3876</span> @Override<a name="line.3876"></a>
-<span class="sourceLineNo">3877</span> public void
enableReplicationPeer(final String peerId) throws IOException {<a
name="line.3877"></a>
-<span class="sourceLineNo">3878</span> executeCallable(new
MasterCallable<Void>(getConnection(), getRpcControllerFactory()) {<a
name="line.3878"></a>
-<span class="sourceLineNo">3879</span> @Override<a name="line.3879"></a>
-<span class="sourceLineNo">3880</span> protected Void rpcCall() throws
Exception {<a name="line.3880"></a>
-<span class="sourceLineNo">3881</span>
master.enableReplicationPeer(getRpcController(),<a name="line.3881"></a>
-<span class="sourceLineNo">3882</span>
RequestConverter.buildEnableReplicationPeerRequest(peerId));<a
name="line.3882"></a>
-<span class="sourceLineNo">3883</span> return null;<a
name="line.3883"></a>
-<span class="sourceLineNo">3884</span> }<a name="line.3884"></a>
-<span class="sourceLineNo">3885</span> });<a name="line.3885"></a>
-<span class="sourceLineNo">3886</span> }<a name="line.3886"></a>
-<span class="sourceLineNo">3887</span><a name="line.3887"></a>
-<span class="sourceLineNo">3888</span> @Override<a name="line.3888"></a>
-<span class="sourceLineNo">3889</span> public void
disableReplicationPeer(final String peerId) throws IOException {<a
name="line.3889"></a>
-<span class="sourceLineNo">3890</span> executeCallable(new
MasterCallable<Void>(getConnection(), getRpcControllerFactory()) {<a
name="line.3890"></a>
-<span class="sourceLineNo">3891</span> @Override<a name="line.3891"></a>
-<span class="sourceLineNo">3892</span> protected Void rpcCall() throws
Exception {<a name="line.3892"></a>
-<span class="sourceLineNo">3893</span>
master.disableReplicationPeer(getRpcController(),<a name="line.3893"></a>
-<span class="sourceLineNo">3894</span>
RequestConverter.buildDisableReplicationPeerRequest(peerId));<a
name="line.3894"></a>
-<span class="sourceLineNo">3895</span> return null;<a
name="line.3895"></a>
-<span class="sourceLineNo">3896</span> }<a name="line.3896"></a>
-<span class="sourceLineNo">3897</span> });<a name="line.3897"></a>
-<span class="sourceLineNo">3898</span> }<a name="line.3898"></a>
-<span class="sourceLineNo">3899</span><a name="line.3899"></a>
-<span class="sourceLineNo">3900</span> @Override<a name="line.3900"></a>
-<span class="sourceLineNo">3901</span> public ReplicationPeerConfig
getReplicationPeerConfig(final String peerId) throws IOException {<a
name="line.3901"></a>
-<span class="sourceLineNo">3902</span> return executeCallable(new
MasterCallable<ReplicationPeerConfig>(getConnection(),<a
name="line.3902"></a>
-<span class="sourceLineNo">3903</span> getRpcControllerFactory()) {<a
name="line.3903"></a>
-<span class="sourceLineNo">3904</span> @Override<a name="line.3904"></a>
-<span class="sourceLineNo">3905</span> protected ReplicationPeerConfig
rpcCall() throws Exception {<a name="line.3905"></a>
-<span class="sourceLineNo">3906</span> GetReplicationPeerConfigResponse
response = master.getReplicationPeerConfig(<a name="line.3906"></a>
-<span class="sourceLineNo">3907</span> getRpcController(),
RequestConverter.buildGetReplicationPeerConfigRequest(peerId));<a
name="line.3907"></a>
-<span class="sourceLineNo">3908</span> return
ReplicationPeerConfigUtil.convert(response.getPeerConfig());<a
name="line.3908"></a>
-<span class="sourceLineNo">3909</span> }<a name="line.3909"></a>
-<span class="sourceLineNo">3910</span> });<a name="line.3910"></a>
-<span class="sourceLineNo">3911</span> }<a name="line.3911"></a>
-<span class="sourceLineNo">3912</span><a name="line.3912"></a>
-<span class="sourceLineNo">3913</span> @Override<a name="line.3913"></a>
-<span class="sourceLineNo">3914</span> public void
updateReplicationPeerConfig(final String peerId,<a name="line.3914"></a>
-<span class="sourceLineNo">3915</span> final ReplicationPeerConfig
peerConfig) throws IOException {<a name="line.3915"></a>
-<span class="sourceLineNo">3916</span> executeCallable(new
MasterCallable<Void>(getConnection(), getRpcControllerFactory()) {<a
name="line.3916"></a>
-<span class="sourceLineNo">3917</span> @Override<a name="line.3917"></a>
-<span class="sourceLineNo">3918</span> protected Void rpcCall() throws
Exception {<a name="line.3918"></a>
-<span class="sourceLineNo">3919</span>
master.updateReplicationPeerConfig(getRpcController(),<a name="line.3919"></a>
-<span class="sourceLineNo">3920</span>
RequestConverter.buildUpdateReplicationPeerConfigRequest(peerId,
peerConfig));<a name="line.3920"></a>
-<span class="sourceLineNo">3921</span> return null;<a
name="line.3921"></a>
-<span class="sourceLineNo">3922</span> }<a name="line.3922"></a>
-<span class="sourceLineNo">3923</span> });<a name="line.3923"></a>
-<span class="sourceLineNo">3924</span> }<a name="line.3924"></a>
-<span class="sourceLineNo">3925</span><a name="line.3925"></a>
-<span class="sourceLineNo">3926</span> @Override<a name="line.3926"></a>
-<span class="sourceLineNo">3927</span> public void
appendReplicationPeerTableCFs(String id,<a name="line.3927"></a>
-<span class="sourceLineNo">3928</span> Map<TableName, ? extends
Collection<String>> tableCfs) throws ReplicationException,<a
name="line.3928"></a>
-<span class="sourceLineNo">3929</span> IOException {<a
name="line.3929"></a>
-<span class="sourceLineNo">3930</span> if (tableCfs == null) {<a
name="line.3930"></a>
-<span class="sourceLineNo">3931</span> throw new
ReplicationException("tableCfs is null");<a name="line.3931"></a>
-<span class="sourceLineNo">3932</span> }<a name="line.3932"></a>
-<span class="sourceLineNo">3933</span> ReplicationPeerConfig peerConfig =
getReplicationPeerConfig(id);<a name="line.3933"></a>
-<span class="sourceLineNo">3934</span>
ReplicationPeerConfigUtil.appendTableCFsToReplicationPeerConfig(tableCfs,
peerConfig);<a name="line.3934"></a>
-<span class="sourceLineNo">3935</span> updateReplicationPeerConfig(id,
peerConfig);<a name="line.3935"></a>
-<span class="sourceLineNo">3936</span> }<a name="line.3936"></a>
-<span class="sourceLineNo">3937</span><a name="line.3937"></a>
-<span class="sourceLineNo">3938</span> @Override<a name="line.3938"></a>
-<span class="sourceLineNo">3939</span> public void
removeReplicationPeerTableCFs(String id,<a name="line.3939"></a>
-<span class="sourceLineNo">3940</span> Map<TableName, ? extends
Collection<String>> tableCfs) throws ReplicationException,<a
name="line.3940"></a>
-<span class="sourceLineNo">3941</span> IOException {<a
name="line.3941"></a>
-<span class="sourceLineNo">3942</span> if (tableCfs == null) {<a
name="line.3942"></a>
-<span class="sourceLineNo">3943</span> throw new
ReplicationException("tableCfs is null");<a name="line.3943"></a>
-<span class="sourceLineNo">3944</span> }<a name="line.3944"></a>
-<span class="sourceLineNo">3945</span> ReplicationPeerConfig peerConfig =
getReplicationPeerConfig(id);<a name="line.3945"></a>
-<span class="sourceLineNo">3946</span>
ReplicationPeerConfigUtil.removeTableCFsFromReplicationPeerConfig(tableCfs,
peerConfig, id);<a name="line.3946"></a>
-<span class="sourceLineNo">3947</span> updateReplicationPeerConfig(id,
peerConfig);<a name="line.3947"></a>
+<span class="sourceLineNo">3842</span> private RpcControllerFactory
getRpcControllerFactory() {<a name="line.3842"></a>
+<span class="sourceLineNo">3843</span> return this.rpcControllerFactory;<a
name="line.3843"></a>
+<span class="sourceLineNo">3844</span> }<a name="line.3844"></a>
+<span class="sourceLineNo">3845</span><a name="line.3845"></a>
+<span class="sourceLineNo">3846</span> @Override<a name="line.3846"></a>
+<span class="sourceLineNo">3847</span> public void addReplicationPeer(String
peerId, ReplicationPeerConfig peerConfig, boolean enabled)<a
name="line.3847"></a>
+<span class="sourceLineNo">3848</span> throws IOException {<a
name="line.3848"></a>
+<span class="sourceLineNo">3849</span> executeCallable(new
MasterCallable<Void>(getConnection(), getRpcControllerFactory()) {<a
name="line.3849"></a>
+<span class="sourceLineNo">3850</span> @Override<a name="line.3850"></a>
+<span class="sourceLineNo">3851</span> protected Void rpcCall() throws
Exception {<a name="line.3851"></a>
+<span class="sourceLineNo">3852</span>
master.addReplicationPeer(getRpcController(),<a name="line.3852"></a>
+<span class="sourceLineNo">3853</span>
RequestConverter.buildAddReplicationPeerRequest(peerId, peerConfig,
enabled));<a name="line.3853"></a>
+<span class="sourceLineNo">3854</span> return null;<a
name="line.3854"></a>
+<span class="sourceLineNo">3855</span> }<a name="line.3855"></a>
+<span class="sourceLineNo">3856</span> });<a name="line.3856"></a>
+<span class="sourceLineNo">3857</span> }<a name="line.3857"></a>
+<span class="sourceLineNo">3858</span><a name="line.3858"></a>
+<span class="sourceLineNo">3859</span> @Override<a name="line.3859"></a>
+<span class="sourceLineNo">3860</span> public void
removeReplicationPeer(String peerId) throws IOException {<a
name="line.3860"></a>
+<span class="sourceLineNo">3861</span> executeCallable(new
MasterCallable<Void>(getConnection(), getRpcControllerFactory()) {<a
name="line.3861"></a>
+<span class="sourceLineNo">3862</span> @Override<a name="line.3862"></a>
+<span class="sourceLineNo">3863</span> protected Void rpcCall() throws
Exception {<a name="line.3863"></a>
+<span class="sourceLineNo">3864</span>
master.removeReplicationPeer(getRpcController(),<a name="line.3864"></a>
+<span class="sourceLineNo">3865</span>
RequestConverter.buildRemoveReplicationPeerRequest(peerId));<a
name="line.3865"></a>
+<span class="sourceLineNo">3866</span> return null;<a
name="line.3866"></a>
+<span class="sourceLineNo">3867</span> }<a name="line.3867"></a>
+<span class="sourceLineNo">3868</span> });<a name="line.3868"></a>
+<span class="sourceLineNo">3869</span> }<a name="line.3869"></a>
+<span class="sourceLineNo">3870</span><a name="line.3870"></a>
+<span class="sourceLineNo">3871</span> @Override<a name="line.3871"></a>
+<span class="sourceLineNo">3872</span> public void
enableReplicationPeer(final String peerId) throws IOException {<a
name="line.3872"></a>
+<span class="sourceLineNo">3873</span> executeCallable(new
MasterCallable<Void>(getConnection(), getRpcControllerFactory()) {<a
name="line.3873"></a>
+<span class="sourceLineNo">3874</span> @Override<a name="line.3874"></a>
+<span class="sourceLineNo">3875</span> protected Void rpcCall() throws
Exception {<a name="line.3875"></a>
+<span class="sourceLineNo">3876</span>
master.enableReplicationPeer(getRpcController(),<a name="line.3876"></a>
+<span class="sourceLineNo">3877</span>
RequestConverter.buildEnableReplicationPeerRequest(peerId));<a
name="line.3877"></a>
+<span class="sourceLineNo">3878</span> return null;<a
name="line.3878"></a>
+<span class="sourceLineNo">3879</span> }<a name="line.3879"></a>
+<span class="sourceLineNo">3880</span> });<a name="line.3880"></a>
+<span class="sourceLineNo">3881</span> }<a name="line.3881"></a>
+<span class="sourceLineNo">3882</span><a name="line.3882"></a>
+<span class="sourceLineNo">3883</span> @Override<a name="line.3883"></a>
+<span class="sourceLineNo">3884</span> public void
disableReplicationPeer(final String peerId) throws IOException {<a
name="line.3884"></a>
+<span class="sourceLineNo">3885</span> executeCallable(new
MasterCallable<Void>(getConnection(), getRpcControllerFactory()) {<a
name="line.3885"></a>
+<span class="sourceLineNo">3886</span> @Override<a name="line.3886"></a>
+<span class="sourceLineNo">3887</span> protected Void rpcCall() throws
Exception {<a name="line.3887"></a>
+<span class="sourceLineNo">3888</span>
master.disableReplicationPeer(getRpcController(),<a name="line.3888"></a>
+<span class="sourceLineNo">3889</span>
RequestConverter.buildDisableReplicationPeerRequest(peerId));<a
name="line.3889"></a>
+<span class="sourceLineNo">3890</span> return null;<a
name="line.3890"></a>
+<span class="sourceLineNo">3891</span> }<a name="line.3891"></a>
+<span class="sourceLineNo">3892</span> });<a name="line.3892"></a>
+<span class="sourceLineNo">3893</span> }<a name="line.3893"></a>
+<span class="sourceLineNo">3894</span><a name="line.3894"></a>
+<span class="sourceLineNo">3895</span> @Override<a name="line.3895"></a>
+<span class="sourceLineNo">3896</span> public ReplicationPeerConfig
getReplicationPeerConfig(final String peerId) throws IOException {<a
name="line.3896"></a>
+<span class="sourceLineNo">3897</span> return executeCallable(new
MasterCallable<ReplicationPeerConfig>(getConnection(),<a
name="line.3897"></a>
+<span class="sourceLineNo">3898</span> getRpcControllerFactory()) {<a
name="line.3898"></a>
+<span class="sourceLineNo">3899</span> @Override<a name="line.3899"></a>
+<span class="sourceLineNo">3900</span> protected ReplicationPeerConfig
rpcCall() throws Exception {<a name="line.3900"></a>
+<span class="sourceLineNo">3901</span> GetReplicationPeerConfigResponse
response = master.getReplicationPeerConfig(<a name="line.3901"></a>
+<span class="sourceLineNo">3902</span> getRpcController(),
RequestConverter.buildGetReplicationPeerConfigRequest(peerId));<a
name="line.3902"></a>
+<span class="sourceLineNo">3903</span> return
ReplicationPeerConfigUtil.convert(response.getPeerConfig());<a
name="line.3903"></a>
+<span class="sourceLineNo">3904</span> }<a name="line.3904"></a>
+<span class="sourceLineNo">3905</span> });<a name="line.3905"></a>
+<span class="sourceLineNo">3906</span> }<a name="line.3906"></a>
+<span class="sourceLineNo">3907</span><a name="line.3907"></a>
+<span class="sourceLineNo">3908</span> @Override<a name="line.3908"></a>
+<span class="sourceLineNo">3909</span> public void
updateReplicationPeerConfig(final String peerId,<a name="line.3909"></a>
+<span class="sourceLineNo">3910</span> final ReplicationPeerConfig
peerConfig) throws IOException {<a name="line.3910"></a>
+<span class="sourceLineNo">3911</span> executeCallable(new
MasterCallable<Void>(getConnection(), getRpcControllerFactory()) {<a
name="line.3911"></a>
+<span class="sourceLineNo">3912</span> @Override<a name="line.3912"></a>
+<span class="sourceLineNo">3913</span> protected Void rpcCall() throws
Exception {<a name="line.3913"></a>
+<span class="sourceLineNo">3914</span>
master.updateReplicationPeerConfig(getRpcController(),<a name="line.3914"></a>
+<span class="sourceLineNo">3915</span>
RequestConverter.buildUpdateReplicationPeerConfigRequest(peerId,
peerConfig));<a name="line.3915"></a>
+<span class="sourceLineNo">3916</span> return null;<a
name="line.3916"></a>
+<span class="sourceLineNo">3917</span> }<a name="line.3917"></a>
+<span class="sourceLineNo">3918</span> });<a name="line.3918"></a>
+<span class="sourceLineNo">3919</span> }<a name="line.3919"></a>
+<span class="sourceLineNo">3920</span><a name="line.3920"></a>
+<span class="sourceLineNo">3921</span> @Override<a name="line.3921"></a>
+<span class="sourceLineNo">3922</span> public void
appendReplicationPeerTableCFs(String id,<a name="line.3922"></a>
+<span class="sourceLineNo">3923</span> Map<TableName, ? extends
Collection<String>> tableCfs) throws ReplicationException,<a
name="line.3923"></a>
+<span class="sourceLineNo">3924</span> IOException {<a
name="line.3924"></a>
+<span class="sourceLineNo">3925</span> if (tableCfs == null) {<a
name="line.3925"></a>
+<span class="sourceLineNo">3926</span> throw new
ReplicationException("tableCfs is null");<a name="line.3926"></a>
+<span class="sourceLineNo">3927</span> }<a name="line.3927"></a>
+<span class="sourceLineNo">3928</span> ReplicationPeerConfig peerConfig =
getReplicationPeerConfig(id);<a name="line.3928"></a>
+<span class="sourceLineNo">3929</span>
ReplicationPeerConfigUtil.appendTableCFsToReplicationPeerConfig(tableCfs,
peerConfig);<a name="line.3929"></a>
+<span class="sourceLineNo">3930</span> updateReplicationPeerConfig(id,
peerConfig);<a name="line.3930"></a>
+<span class="sourceLineNo">3931</span> }<a name="line.3931"></a>
+<span class="sourceLineNo">3932</span><a name="line.3932"></a>
+<span class="sourceLineNo">3933</span> @Override<a name="line.3933"></a>
+<span class="sourceLineNo">3934</span> public void
removeReplicationPeerTableCFs(String id,<a name="line.3934"></a>
+<span class="sourceLineNo">3935</span> Map<TableName, ? extends
Collection<String>> tableCfs) throws ReplicationException,<a
name="line.3935"></a>
+<span class="sourceLineNo">3936</span> IOException {<a
name="line.3936"></a>
+<span class="sourceLineNo">3937</span> if (tableCfs == null) {<a
name="line.3937"></a>
+<span class="sourceLineNo">3938</span> throw new
ReplicationException("tableCfs is null");<a name="line.3938"></a>
+<span class="sourceLineNo">3939</span> }<a name="line.3939"></a>
+<span class="sourceLineNo">3940</span> ReplicationPeerConfig peerConfig =
getReplicationPeerConfig(id);<a name="line.3940"></a>
+<span class="sourceLineNo">3941</span>
ReplicationPeerConfigUtil.removeTableCFsFromReplicationPeerConfig(tableCfs,
peerConfig, id);<a name="line.3941"></a>
+<span class="sourceLineNo">3942</span> updateReplicationPeerConfig(id,
peerConfig);<a name="line.3942"></a>
+<span class="sourceLineNo">3943</span> }<a name="line.3943"></a>
+<span class="sourceLineNo">3944</span><a name="line.3944"></a>
+<span class="sourceLineNo">3945</span> @Override<a name="line.3945"></a>
+<span class="sourceLineNo">3946</span> public
List<ReplicationPeerDescription> listReplicationPeers() throws
IOException {<a name="line.3946"></a>
+<span class="sourceLineNo">3947</span> return
listReplicationPeers((Pattern)null);<a name="line.3947"></a>
<span class="sourceLineNo">3948</span> }<a name="line.3948"></a>
<span class="sourceLineNo">3949</span><a name="line.3949"></a>
<span class="sourceLineNo">3950</span> @Override<a name="line.3950"></a>
-<span class="sourceLineNo">3951</span> public
List<ReplicationPeerDescription> listReplicationPeers() throws
IOException {<a name="line.3951"></a>
-<span class="sourceLineNo">3952</span> return
listReplicationPeers((Pattern)null);<a name="line.3952"></a>
-<span class="sourceLineNo">3953</span> }<a name="line.3953"></a>
-<span class="sourceLineNo">3954</span><a name="line.3954"></a>
-<span class="sourceLineNo">3955</span> @Override<a name="line.3955"></a>
-<span class="sourceLineNo">3956</span> public
List<ReplicationPeerDescription> listReplicationPeers(Pattern pattern)<a
name="line.3956"></a>
-<span class="sourceLineNo">3957</span> throws IOException {<a
name="line.3957"></a>
-<span class="sourceLineNo">3958</span> return executeCallable(new
MasterCallable<List<ReplicationPeerDescription>>(getConnection(),<a
name="line.3958"></a>
-<span class="sourceLineNo">3959</span> getRpcControllerFactory()) {<a
name="line.3959"></a>
-<span class="sourceLineNo">3960</span> @Override<a name="line.3960"></a>
-<span class="sourceLineNo">3961</span> protected
List<ReplicationPeerDescription> rpcCall() throws Exception {<a
name="line.3961"></a>
-<span class="sourceLineNo">3962</span>
List<ReplicationProtos.ReplicationPeerDescription> peersList =
master.listReplicationPeers(<a name="line.3962"></a>
-<span class="sourceLineNo">3963</span> getRpcController(),
RequestConverter.buildListReplicationPeersRequest(pattern))<a
name="line.3963"></a>
-<span class="sourceLineNo">3964</span> .getPeerDescList();<a
name="line.3964"></a>
-<span class="sourceLineNo">3965</span>
List<ReplicationPeerDescription> result = new
ArrayList<>(peersList.size());<a name="line.3965"></a>
-<span class="sourceLineNo">3966</span> for
(ReplicationProtos.ReplicationPeerDescription peer : peersList) {<a
name="line.3966"></a>
-<span class="sourceLineNo">3967</span>
result.add(ReplicationPeerConfigUtil.toReplicationPeerDescription(peer));<a
name="line.3967"></a>
-<span class="sourceLineNo">3968</span> }<a name="line.3968"></a>
-<span class="sourceLineNo">3969</span> return result;<a
name="line.3969"></a>
-<span class="sourceLineNo">3970</span> }<a name="line.3970"></a>
-<span class="sourceLineNo">3971</span> });<a name="line.3971"></a>
-<span class="sourceLineNo">3972</span> }<a name="line.3972"></a>
-<span class="sourceLineNo">3973</span><a name="line.3973"></a>
-<span class="sourceLineNo">3974</span> @Override<a name="line.3974"></a>
-<span class="sourceLineNo">3975</span> public void
decommissionRegionServers(List<ServerName> servers, boolean offload)<a
name="line.3975"></a>
-<span class="sourceLineNo">3976</span> throws IOException {<a
name="line.3976"></a>
-<span class="sourceLineNo">3977</span> executeCallable(new
MasterCallable<Void>(getConnection(), getRpcControllerFactory()) {<a
name="line.3977"></a>
-<span class="sourceLineNo">3978</span> @Override<a name="line.3978"></a>
-<span class="sourceLineNo">3979</span> public Void rpcCall() throws
ServiceException {<a name="line.3979"></a>
-<span class="sourceLineNo">3980</span>
master.decommissionRegionServers(getRpcController(),<a name="line.3980"></a>
-<span class="sourceLineNo">3981</span>
RequestConverter.buildDecommissionRegionServersRequest(servers, offload));<a
name="line.3981"></a>
-<span class="sourceLineNo">3982</span> return null;<a
name="line.3982"></a>
-<span class="sourceLineNo">3983</span> }<a name="line.3983"></a>
-<span class="sourceLineNo">3984</span> });<a name="line.3984"></a>
-<span class="sourceLineNo">3985</span> }<a name="line.3985"></a>
-<span class="sourceLineNo">3986</span><a name="line.3986"></a>
-<span class="sourceLineNo">3987</span> @Override<a name="line.3987"></a>
-<span class="sourceLineNo">3988</span> public List<ServerName>
listDecommissionedRegionServers() throws IOException {<a name="line.3988"></a>
-<span class="sourceLineNo">3989</span> return executeCallable(new
MasterCallable<List<ServerName>>(getConnection(),<a
name="line.3989"></a>
-<span class="sourceLineNo">3990</span> getRpcControllerFactory())
{<a name="line.3990"></a>
-<span class="sourceLineNo">3991</span> @Override<a name="line.3991"></a>
-<span class="sourceLineNo">3992</span> public List<ServerName>
rpcCall() throws ServiceException {<a name="line.3992"></a>
-<span class="sourceLineNo">3993</span>
ListDecommissionedRegionServersRequest req =
ListDecommissionedRegionServersRequest.newBuilder().build();<a
name="line.3993"></a>
-<span class="sourceLineNo">3994</span> List<ServerName> servers =
new ArrayList<>();<a name="line.3994"></a>
-<span class="sourceLineNo">3995</span> for (HBaseProtos.ServerName
server : master<a name="line.3995"></a>
-<span class="sourceLineNo">3996</span>
.listDecommissionedRegionServers(getRpcController(), req).getServerNameList())
{<a name="line.3996"></a>
-<span class="sourceLineNo">3997</span>
servers.add(ProtobufUtil.toServerName(server));<a name="line.3997"></a>
-<span class="sourceLineNo">3998</span> }<a name="line.3998"></a>
-<span class="sourceLineNo">3999</span> return servers;<a
name="line.3999"></a>
-<span class="sourceLineNo">4000</span> }<a name="line.4000"></a>
-<span class="sourceLineNo">4001</span> });<a name="line.4001"></a>
-<span class="sourceLineNo">4002</span> }<a name="line.4002"></a>
-<span class="sourceLineNo">4003</span><a name="line.4003"></a>
-<span class="sourceLineNo">4004</span> @Override<a name="line.4004"></a>
-<span class="sourceLineNo">4005</span> public void
recommissionRegionServer(ServerName server, List<byte[]>
encodedRegionNames)<a name="line.4005"></a>
-<span class="sourceLineNo">4006</span> throws IOException {<a
name="line.4006"></a>
-<span class="sourceLineNo">4007</span> executeCallable(new
MasterCallable<Void>(getConnection(), getRpcControllerFactory()) {<a
name="line.4007"></a>
-<span class="sourceLineNo">4008</span> @Override<a name="line.4008"></a>
-<span class="sourceLineNo">4009</span> public Void rpcCall() throws
ServiceException {<a name="line.4009"></a>
-<span class="sourceLineNo">4010</span>
master.recommissionRegionServer(getRpcController(),<a name="line.4010"></a>
-<span class="sourceLineNo">4011</span>
RequestConverter.buildRecommissionRegionServerRequest(server,
encodedRegionNames));<a name="line.4011"></a>
-<span class="sourceLineNo">4012</span> return null;<a
name="line.4012"></a>
-<span class="sourceLineNo">4013</span> }<a name="line.4013"></a>
-<span class="sourceLineNo">4014</span> });<a name="line.4014"></a>
-<span class="sourceLineNo">4015</span> }<a name="line.4015"></a>
-<span class="sourceLineNo">4016</span><a name="line.4016"></a>
-<span class="sourceLineNo">4017</span> @Override<a name="line.4017"></a>
-<span class="sourceLineNo">4018</span> public List<TableCFs>
listReplicatedTableCFs() throws IOException {<a name="line.4018"></a>
-<span class="sourceLineNo">4019</span> List<TableCFs>
replicatedTableCFs = new ArrayList<>();<a name="line.4019"></a>
-<span class="sourceLineNo">4020</span> List<TableDescriptor> tables =
listTableDescriptors();<a name="line.4020"></a>
-<span class="sourceLineNo">4021</span> tables.forEach(table -> {<a
name="line.4021"></a>
-<span class="sourceLineNo">4022</span> Map<String, Integer> cfs =
new HashMap<>();<a name="line.4022"></a>
-<span class="sourceLineNo">4023</span>
Stream.of(table.getColumnFamilies())<a name="line.4023"></a>
-<span class="sourceLineNo">4024</span> .filter(column ->
column.getScope() != HConstants.REPLICATION_SCOPE_LOCAL)<a name="line.4024"></a>
-<span class="sourceLineNo">4025</span> .forEach(column -> {<a
name="line.4025"></a>
-<span class="sourceLineNo">4026</span>
cfs.put(column.getNameAsString(), column.getScope());<a name="line.4026"></a>
-<span class="sourceLineNo">4027</span> });<a name="line.4027"></a>
-<span class="sourceLineNo">4028</span> if (!cfs.isEmpty()) {<a
name="line.4028"></a>
-<span class="sourceLineNo">4029</span> replicatedTableCFs.add(new
TableCFs(table.getTableName(), cfs));<a name="line.4029"></a>
-<span class="sourceLineNo">4030</span> }<a name="line.4030"></a>
-<span class="sourceLineNo">4031</span> });<a name="line.4031"></a>
-<span class="sourceLineNo">4032</span> return replicatedTableCFs;<a
name="line.4032"></a>
-<span class="sourceLineNo">4033</span> }<a name="line.4033"></a>
-<span class="sourceLineNo">4034</span><a name="line.4034"></a>
-<span class="sourceLineNo">4035</span> @Override<a name="line.4035"></a>
-<span class="sourceLineNo">4036</span> public void
enableTableReplication(final TableName tableName) throws IOException {<a
name="line.4036"></a>
-<span class="sourceLineNo">4037</span> if (tableName == null) {<a
name="line.4037"></a>
-<span class="sourceLineNo">4038</span> throw new
IllegalArgumentException("Table name cannot be null");<a name="line.4038"></a>
-<span class="sourceLineNo">4039</span> }<a name="line.4039"></a>
-<span class="sourceLineNo">4040</span> if (!tableExists(tableName)) {<a
name="line.4040"></a>
-<span class="sourceLineNo">4041</span> throw new
TableNotFoundException("Table '" + tableName.getNameAsString()<a
name="line.4041"></a>
-<span class="sourceLineNo">4042</span> + "' does not exists.");<a
name="line.4042"></a>
-<span class="sourceLineNo">4043</span> }<a name="line.4043"></a>
-<span class="sourceLineNo">4044</span> byte[][] splits =
getTableSplits(tableName);<a name="line.4044"></a>
-<span class="sourceLineNo">4045</span>
checkAndSyncTableDescToPeers(tableName, splits);<a name="line.4045"></a>
-<span class="sourceLineNo">4046</span> setTableRep(tableName, true);<a
name="line.4046"></a>
-<span class="sourceLineNo">4047</span> }<a name="line.4047"></a>
-<span class="sourceLineNo">4048</span><a name="line.4048"></a>
-<span class="sourceLineNo">4049</span> @Override<a name="line.4049"></a>
-<span class="sourceLineNo">4050</span> public void
disableTableReplication(final TableName tableName) throws IOException {<a
name="line.4050"></a>
-<span class="sourceLineNo">4051</span> if (tableName == null) {<a
name="line.4051"></a>
-<span class="sourceLineNo">4052</span> throw new
IllegalArgumentException("Table name is null");<a name="line.4052"></a>
-<span class="sourceLineNo">4053</span> }<a name="line.4053"></a>
-<span class="sourceLineNo">4054</span> if (!tableExists(tableName)) {<a
name="line.4054"></a>
-<span class="sourceLineNo">4055</span> throw new
TableNotFoundException("Table '" + tableName.getNameAsString()<a
name="line.4055"></a>
-<span class="sourceLineNo">4056</span> + "' does not exists.");<a
name="line.4056"></a>
-<span class="sourceLineNo">4057</span> }<a name="line.4057"></a>
-<span class="sourceLineNo">4058</span> setTableRep(tableName, false);<a
name="line.4058"></a>
-<span class="sourceLineNo">4059</span> }<a name="line.4059"></a>
-<span class="sourceLineNo">4060</span><a name="line.4060"></a>
-<span class="sourceLineNo">4061</span> /**<a name="line.4061"></a>
-<span class="sourceLineNo">4062</span> * Connect to peer and check the table
descriptor on peer:<a name="line.4062"></a>
-<span class="sourceLineNo">4063</span> * <ol><a name="line.4063"></a>
-<span class="sourceLineNo">4064</span> * <li>Create the same table on
peer when not exist.</li><a name="line.4064"></a>
-<span class="sourceLineNo">4065</span> * <li>Throw an exception if the
table already has replication enabled on any of the column<a
name="line.4065"></a>
-<span class="sourceLineNo">4066</span> * families.</li><a
name="line.4066"></a>
-<span class="sourceLineNo">4067</span> * <li>Throw an exception if the
table exists on peer cluster but descriptors are not same.</li><a
name="line.4067"></a>
-<span class="sourceLineNo">4068</span> * </ol><a name="line.4068"></a>
-<span class="sourceLineNo">4069</span> * @param tableName name of the table
to sync to the peer<a name="line.4069"></a>
-<span class="sourceLineNo">4070</span> * @param splits table split keys<a
name="line.4070"></a>
-<span class="sourceLineNo">4071</span> * @throws IOException<a
name="line.4071"></a>
-<span class="sourceLineNo">4072</span> */<a name="line.4072"></a>
-<span class="sourceLineNo">4073</span> private void
checkAndSyncTableDescToPeers(final TableName tableName, final byte[][]
splits)<a name="line.4073"></a>
-<span class="sourceLineNo">4074</span> throws IOException {<a
name="line.4074"></a>
-<span class="sourceLineNo">4075</span>
List<ReplicationPeerDescription> peers = listReplicationPeers();<a
name="line.4075"></a>
-<span class="sourceLineNo">4076</span> if (peers == null || peers.size()
<= 0) {<a name="line.4076"></a>
-<span class="sourceLineNo">4077</span> throw new
IllegalArgumentException("Found no peer cluster for replication.");<a
name="line.4077"></a>
-<span class="sourceLineNo">4078</span> }<a name="line.4078"></a>
-<span class="sourceLineNo">4079</span><a name="line.4079"></a>
-<span class="sourceLineNo">4080</span> for (ReplicationPeerDescription
peerDesc : peers) {<a name="line.4080"></a>
-<span class="sourceLineNo">4081</span> if
(peerDesc.getPeerConfig().needToReplicate(tableName)) {<a name="line.4081"></a>
-<span class="sourceLineNo">4082</span> Configuration peerConf =<a
name="line.4082"></a>
-<span class="sourceLineNo">4083</span>
ReplicationPeerConfigUtil.getPeerClusterConfiguration(this.conf, peerDesc);<a
name="line.4083"></a>
-<span class="sourceLineNo">4084</span> try (Connection conn =
ConnectionFactory.createConnection(peerConf);<a name="line.4084"></a>
-<span class="sourceLineNo">4085</span> Admin repHBaseAdmin =
conn.getAdmin()) {<a name="line.4085"></a>
-<span class="sourceLineNo">4086</span> TableDescriptor tableDesc =
getDescriptor(tableName);<a name="line.4086"></a>
-<span class="sourceLineNo">4087</span> TableDescriptor peerTableDesc
= null;<a name="line.4087"></a>
-<span class="sourceLineNo">4088</span> if
(!repHBaseAdmin.tableExists(tableName)) {<a name="line.4088"></a>
-<span class="sourceLineNo">4089</span>
repHBaseAdmin.createTable(tableDesc, splits);<a name="line.4089"></a>
-<span class="sourceLineNo">4090</span> } else {<a
name="line.4090"></a>
-<span class="sourceLineNo">4091</span> peerTableDesc =
repHBaseAdmin.getDescriptor(tableName);<a name="line.4091"></a>
-<span class="sourceLineNo">4092</span> if (peerTableDesc == null)
{<a name="line.4092"></a>
-<span class="sourceLineNo">4093</span> throw new
IllegalArgumentException("Failed to get table descriptor for table "<a
name="line.4093"></a>
-<span class="sourceLineNo">4094</span> +
tableName.getNameAsString() + " from peer cluster " + peerDesc.getPeerId());<a
name="line.4094"></a>
-<span class="sourceLineNo">4095</span> }<a name="line.4095"></a>
-<span class="sourceLineNo">4096</span> if
(TableDescriptor.COMPARATOR_IGNORE_REPLICATION.compare(peerTableDesc,<a
name="line.4096"></a>
-<span class="sourceLineNo">4097</span> tableDesc) != 0) {<a
name="line.4097"></a>
-<span class="sourceLineNo">4098</span> throw new
IllegalArgumentException("Table " + tableName.getNameAsString()<a
name="line.4098"></a>
-<span class="sourceLineNo">4099</span> + " exists in peer
cluster " + peerDesc.getPeerId()<a name="line.4099"></a>
-<span class="sourceLineNo">4100</span> + ", but the table
descriptors are not same when compared with source cluster."<a
name="line.4100"></a>
-<span class="sourceLineNo">4101</span> + " Thus can not
enable the table's replication switch.");<a name="line.4101"></a>
-<span class="sourceLineNo">4102</span> }<a name="line.4102"></a>
-<span class="sourceLineNo">4103</span> }<a name="line.4103"></a>
-<span class="sourceLineNo">4104</span> }<a name="line.4104"></a>
-<span class="sourceLineNo">4105</span> }<a name="line.4105"></a>
-<span class="sourceLineNo">4106</span> }<a name="line.4106"></a>
-<span class="sourceLineNo">4107</span> }<a name="line.4107"></a>
-<span class="sourceLineNo">4108</span><a name="line.4108"></a>
-<span class="sourceLineNo">4109</span> /**<a name="line.4109"></a>
-<span class="sourceLineNo">4110</span> * Set the table's replication switch
if the table's replication switch is already not set.<a name="line.4110"></a>
-<span class="sourceLineNo">4111</span> * @param tableName name of the
table<a name="line.4111"></a>
-<span class="sourceLineNo">4112</span> * @param enableRep is replication
switch enable or disable<a name="line.4112"></a>
-<span class="sourceLineNo">4113</span> * @throws IOException if a remote or
network exception occurs<a name="line.4113"></a>
-<span class="sourceLineNo">4114</span> */<a name="line.4114"></a>
-<span class="sourceLineNo">4115</span> private void setTableRep(final
TableName tableName, boolean enableRep) throws IOException {<a
name="line.4115"></a>
-<span class="sourceLineNo">4116</span> TableDescriptor tableDesc =
getDescriptor(tableName);<a name="line.4116"></a>
-<span class="sourceLineNo">4117</span> if
(!tableDesc.matchReplicationScope(enableRep)) {<a name="line.4117"></a>
-<span class="sourceLineNo">4118</span> int scope =<a name="line.4118"></a>
-<span class="sourceLineNo">4119</span> enableRep ?
HConstants.REPLICATION_SCOPE_GLOBAL : HConstants.REPLICATION_SCOPE_LOCAL;<a
name="line.4119"></a>
-<span class="sourceLineNo">4120</span>
modifyTable(TableDescriptorBuilder.newBuilder(tableDesc).setReplicationScope(scope).build());<a
name="line.4120"></a>
-<span class="sourceLineNo">4121</span> }<a name="line.4121"></a>
-<span class="sourceLineNo">4122</span> }<a name="line.4122"></a>
-<span class="sourceLineNo">4123</span><a name="line.4123"></a>
-<span class="sourceLineNo">4124</span> @Override<a name="line.4124"></a>
-<span class="sourceLineNo">4125</span> public void
clearCompactionQueues(final ServerName sn, final Set<String> queues)<a
name="line.4125"></a>
-<span class="sourceLineNo">4126</span> throws IOException,
InterruptedException {<a name="line.4126"></a>
-<span class="sourceLineNo">4127</span> if (queues == null || queues.size()
== 0) {<a name="line.4127"></a>
-<span class="sourceLineNo">4128</span> throw new
IllegalArgumentException("queues cannot be null or empty");<a
name="line.4128"></a>
-<span class="sourceLineNo">4129</span> }<a name="line.4129"></a>
-<span class="sourceLineNo">4130</span> final AdminService.BlockingInterface
admin = this.connection.getAdmin(sn);<a name="line.4130"></a>
-<span class="sourceLineNo">4131</span> Callable<Void> callable = new
Callable<Void>() {<a name="line.4131"></a>
-<span class="sourceLineNo">4132</span> @Override<a name="line.4132"></a>
-<span class="sourceLineNo">4133</span> public Void call() throws
Exception {<a name="line.4133"></a>
-<span class="sourceLineNo">4134</span> // TODO: There is no timeout on
this controller. Set one!<a name="line.4134"></a>
-<span class="sourceLineNo">4135</span> HBaseRpcController controller =
rpcControllerFactory.newController();<a name="line.4135"></a>
-<span class="sourceLineNo">4136</span> ClearCompactionQueuesRequest
request =<a name="line.4136"></a>
-<span class="sourceLineNo">4137</span>
RequestConverter.buildClearCompactionQueuesRequest(queues);<a
name="line.4137"></a>
-<span class="sourceLineNo">4138</span>
admin.clearCompactionQueues(controller, request);<a name="line.4138"></a>
-<span class="sourceLineNo">4139</span> return null;<a
name="line.4139"></a>
-<span class="sourceLineNo">4140</span> }<a name="line.4140"></a>
-<span class="sourceLineNo">4141</span> };<a name="line.4141"></a>
-<span class="sourceLineNo">4142</span> ProtobufUtil.call(callable);<a
name="line.4142"></a>
-<span class="sourceLineNo">4143</span> }<a name="line.4143"></a>
-<span class="sourceLineNo">4144</span><a name="line.4144"></a>
-<span class="sourceLineNo">4145</span> @Override<a name="line.4145"></a>
-<span class="sourceLineNo">4146</span> public List<ServerName>
clearDeadServers(final List<ServerName> servers) throws IOException {<a
name="line.4146"></a>
-<span class="sourceLineNo">4147</span> if (servers == null ||
servers.size() == 0) {<a name="line.4147"></a>
-<span class="sourceLineNo">4148</span> throw new
IllegalArgumentException("servers cannot be null or empty");<a
name="line.4148"></a>
-<span class="sourceLineNo">4149</span> }<a name="line.4149"></a>
-<span class="sourceLineNo">4150</span> return executeCallable(new
MasterCallable<List<ServerName>>(getConnection(),<a
name="line.4150"></a>
-<span class="sourceLineNo">4151</span> getRpcControllerFactory())
{<a name="line.4151"></a>
-<span class="sourceLineNo">4152</span> @Override<a name="line.4152"></a>
-<span class="sourceLineNo">4153</span> protected List<ServerName>
rpcCall() throws Exception {<a name="line.4153"></a>
-<span class="sourceLineNo">4154</span> ClearDeadServersRequest req =
RequestConverter.buildClearDeadServersRequest(servers);<a name="line.4154"></a>
-<span class="sourceLineNo">4155</span> return
ProtobufUtil.toServerNameList(<a name="line.4155"></a>
-<span class="sourceLineNo">4156</span>
master.clearDeadServers(getRpcController(), req).getServerNameList());<a
name="line.4156"></a>
-<span class="sourceLineNo">4157</span> }<a name="line.4157"></a>
-<span class="sourceLineNo">4158</span> });<a name="line.4158"></a>
-<span class="sourceLineNo">4159</span> }<a name="line.4159"></a>
-<span class="sourceLineNo">4160</span>}<a name="line.4160"></a>
+<span class="sourceLineNo">3951</span> public
List<ReplicationPeerDescription> listReplicationPeers(Pattern pattern)<a
name="line.3951"></a>
+<span class="sourceLineNo">3952</span> throws IOException {<a
name="line.3952"></a>
+<span class="sourceLineNo">3953</span> return executeCallable(new
MasterCallable<List<ReplicationPeerDescription>>(getConnection(),<a
name="line.3953"></a>
+<span class="sourceLineNo">3954</span> getRpcControllerFactory()) {<a
name="line.3954"></a>
+<span class="sourceLineNo">3955</span> @Override<a name="line.3955"></a>
+<span class="sourceLineNo">3956</span> protected
List<ReplicationPeerDescription> rpcCall() throws Exception {<a
name="line.3956"></a>
+<span class="sourceLineNo">3957</span>
List<ReplicationProtos.ReplicationPeerDescription> peersList =
master.listReplicationPeers(<a name="line.3957"></a>
+<span class="sourceLineNo">3958</span> getRpcController(),
RequestConverter.buildListReplicationPeersRequest(pattern))<a
name="line.3958"></a>
+<span class="sourceLineNo">3959</span> .getPeerDescList();<a
name="line.3959"></a>
+<span class="sourceLineNo">3960</span>
List<ReplicationPeerDescription> result = new
ArrayList<>(peersList.size());<a name="line.3960"></a>
+<span class="sourceLineNo">3961</span> for
(ReplicationProtos.ReplicationPeerDescription peer : peersList) {<a
name="line.3961"></a>
+<span class="sourceLineNo">3962</span>
result.add(ReplicationPeerConfigUtil.toReplicationPeerDescription(peer));<a
name="line.3962"></a>
+<span class="sourceLineNo">3963</span> }<a name="line.3963"></a>
+<span class="sourceLineNo">3964</span> return result;<a
name="line.3964"></a>
+<span class="sourceLineNo">3965</span> }<a name="line.3965"></a>
+<span class="sourceLineNo">3966</span> });<a name="line.3966"></a>
+<span class="sourceLineNo">3967</span> }<a name="line.3967"></a>
+<span class="sourceLineNo">3968</span><a name="line.3968"></a>
+<span class="sourceLineNo">3969</span> @Override<a name="line.3969"></a>
+<span class="sourceLineNo">3970</span> public void
decommissionRegionServers(List<ServerName> servers, boolean offload)<a
name="line.3970"></a>
+<span class="sourceLineNo">3971</span> throws IOException {<a
name="line.3971"></a>
+<span class="sourceLineNo">3972</span> executeCallable(new
MasterCallable<Void>(getConnection(), getRpcControllerFactory()) {<a
name="line.3972"></a>
+<span class="sourceLineNo">3973</span> @Override<a name="line.3973"></a>
+<span class="sourceLineNo">3974</span> public Void rpcCall() throws
ServiceException {<a name="line.3974"></a>
+<span class="sourceLineNo">3975</span>
master.decommissionRegionServers(getRpcController(),<a name="line.3975"></a>
+<span class="sourceLineNo">3976</span>
RequestConverter.buildDecommissionRegionServersRequest(servers, offload));<a
name="line.3976"></a>
+<span class="sourceLineNo">3977</span> return null;<a
name="line.3977"></a>
+<span class="sourceLineNo">3978</span> }<a name="line.3978"></a>
+<span class="sourceLineNo">3979</span> });<a name="line.3979"></a>
+<span class="sourceLineNo">3980</span> }<a name="line.3980"></a>
+<span class="sourceLineNo">3981</span><a name="line.3981"></a>
+<span class="sourceLineNo">3982</span> @Override<a name="line.3982"></a>
+<span class="sourceLineNo">3983</span> public List<ServerName>
listDecommissionedRegionServers() throws IOException {<a name="line.3983"></a>
+<span class="sourceLineNo">3984</span> return executeCallable(new
MasterCallable<List<ServerName>>(getConnection(),<a
name="line.3984"></a>
+<span class="sourceLineNo">3985</span> getRpcControllerFactory())
{<a name="line.3985"></a>
+<span class="sourceLineNo">3986</span> @Override<a name="line.3986"></a>
+<span class="sourceLineNo">3987</span> public List<ServerName>
rpcCall() throws ServiceException {<a name="line.3987"></a>
+<span class="sourceLineNo">3988</span>
ListDecommissionedRegionServersRequest req =
ListDecommissionedRegionServersRequest.newBuilder().build();<a
name="line.3988"></a>
+<span class="sourceLineNo">3989</span> List<ServerName> servers =
new ArrayList<>();<a name="line.3989"></a>
+<span class="sourceLineNo">3990</span> for (HBaseProtos.ServerName
server : master<a name="line.3990"></a>
+<span class="sourceLineNo">3991</span>
.listDecommissionedRegionServers(getRpcController(), req).getServerNameList())
{<a name="line.3991"></a>
+<span class="sourceLineNo">3992</span>
servers.add(ProtobufUtil.toServerName(server));<a name="line.3992"></a>
+<span class="sourceLineNo">3993</span> }<a name="line.3993"></a>
+<span class="sourceLineNo">3994</span> return servers;<a
name="line.3994"></a>
+<span class="sourceLineNo">3995</span> }<a name="line.3995"></a>
+<span class="sourceLineNo">3996</span> });<a name="line.3996"></a>
+<span class="sourceLineNo">3997</span> }<a name="line.3997"></a>
+<span class="sourceLineNo">3998</span><a name="line.3998"></a>
+<span class="sourceLineNo">3999</span> @Override<a name="line.3999"></a>
+<span class="sourceLineNo">4000</span> public void
recommissionRegionServer(ServerName server, List<byte[]>
encodedRegionNames)<a name="line.4000"></a>
+<span class="sourceLineNo">4001</span> throws IOException {<a
name="line.4001"></a>
+<span class="sourceLineNo">4002</span> executeCallable(new
MasterCallable<Void>(getConnection(), getRpcControllerFactory()) {<a
name="line.4002"></a>
+<span class="sourceLineNo">4003</span> @Override<a name="line.4003"></a>
+<span class="sourceLineNo">4004</span> public Void rpcCall() throws
ServiceException {<a name="line.4004"></a>
+<span class="sourceLineNo">4005</span>
master.recommissionRegionServer(getRpcController(),<a name="line.4005"></a>
+<span class="sourceLineNo">4006</span>
RequestConverter.buildRecommissionRegionServerRequest(server,
encodedRegionNames));<a name="line.4006"></a>
+<span class="sourceLineNo">4007</span> return null;<a
name="line.4007"></a>
+<span class="sourceLineNo">4008</span> }<a name="line.4008"></a>
+<span class="sourceLineNo">4009</span> });<a name="line.4009"></a>
+<span class="sourceLineNo">4010</span> }<a name="line.4010"></a>
+<span class="sourceLineNo">4011</span><a name="line.4011"></a>
+<span class="sourceLineNo">4012</span> @Override<a name="line.4012"></a>
+<span class="sourceLineNo">4013</span> public List<TableCFs>
listReplicatedTableCFs() throws IOException {<a name="line.4013"></a>
+<span class="sourceLineNo">4014</span> List<TableCFs>
replicatedTableCFs = new ArrayList<>();<a name="line.4014"></a>
+<span class="sourceLineNo">4015</span> List<TableDescriptor> tables =
listTableDescriptors();<a name="line.4015"></a>
+<span class="sourceLineNo">4016</span> tables.forEach(table -> {<a
name="line.4016"></a>
+<span class="sourceLineNo">4017</span> Map<String, Integer> cfs =
new HashMap<>();<a name="line.4017"></a>
+<span class="sourceLineNo">4018</span>
Stream.of(table.getColumnFamilies())<a name="line.4018"></a>
+<span class="sourceLineNo">4019</span> .filter(column ->
column.getScope() != HConstants.REPLICATION_SCOPE_LOCAL)<a name="line.4019"></a>
+<span class="sourceLineNo">4020</span> .forEach(column -> {<a
name="line.4020"></a>
+<span class="sourceLineNo">4021</span>
cfs.put(column.getNameAsString(), column.getScope());<a name="line.4021"></a>
+<span class="sourceLineNo">4022</span> });<a name="line.4022"></a>
+<span class="sourceLineNo">4023</span> if (!cfs.isEmpty()) {<a
name="line.4023"></a>
+<span class="sourceLineNo">4024</span> replicatedTableCFs.add(new
TableCFs(table.getTableName(), cfs));<a name="line.4024"></a>
+<span class="sourceLineNo">4025</span> }<a name="line.4025"></a>
+<span class="sourceLineNo">4026</span> });<a name="line.4026"></a>
+<span class="sourceLineNo">4027</span> return replicatedTableCFs;<a
name="line.4027"></a>
+<span class="sourceLineNo">4028</span> }<a name="line.4028"></a>
+<span class="sourceLineNo">4029</span><a name="line.4029"></a>
+<span class="sourceLineNo">4030</span> @Override<a name="line.4030"></a>
+<span class="sourceLineNo">4031</span> public void
enableTableReplication(final TableName tableName) throws IOException {<a
name="line.4031"></a>
+<span class="sourceLineNo">4032</span> if (tableName == null) {<a
name="line.4032"></a>
+<span class="sourceLineNo">4033</span> throw new
IllegalArgumentException("Table name cannot be null");<a name="line.4033"></a>
+<span class="sourceLineNo">4034</span> }<a name="line.4034"></a>
+<span class="sourceLineNo">4035</span> if (!tableExists(tableName)) {<a
name="line.4035"></a>
+<span class="sourceLineNo">4036</span> throw new
TableNotFoundException("Table '" + tableName.getNameAsString()<a
name="line.4036"></a>
+<span class="sourceLineNo">4037</span> + "' does not exists.");<a
name="line.4037"></a>
+<span class="sourceLineNo">4038</span> }<a name="line.4038"></a>
+<span class="sourceLineNo">4039</span> byte[][] splits =
getTableSplits(tableName);<a name="line.4039"></a>
+<span class="sourceLineNo">4040</span>
checkAndSyncTableDescToPeers(tableName, splits);<a name="line.4040"></a>
+<span class="sourceLineNo">4041</span> setTableRep(tableName, true);<a
name="line.4041"></a>
+<span class="sourceLineNo">4042</span> }<a name="line.4042"></a>
+<span class="sourceLineNo">4043</span><a name="line.4043"></a>
+<span class="sourceLineNo">4044</span> @Override<a name="line.4044"></a>
+<span class="sourceLineNo">4045</span> public void
disableTableReplication(final TableName tableName) throws IOException {<a
name="line.4045"></a>
+<span class="sourceLineNo">4046</span> if (tableName == null) {<a
name="line.4046"></a>
+<span class="sourceLineNo">4047</span> throw new
IllegalArgumentException("Table name is null");<a name="line.4047"></a>
+<span class="sourceLineNo">4048</span> }<a name="line.4048"></a>
+<span class="sourceLineNo">4049</span> if (!tableExists(tableName)) {<a
name="line.4049"></a>
+<span class="sourceLineNo">4050</span> throw new
TableNotFoundException("Table '" + tableName.getNameAsString()<a
name="line.4050"></a>
+<span class="sourceLineNo">4051</span> + "' does not exists.");<a
name="line.4051"></a>
+<span class="sourceLineNo">4052</span> }<a name="line.4052"></a>
+<span class="sourceLineNo">4053</span> setTableRep(tableName, false);<a
name="line.4053"></a>
+<span class="sourceLineNo">4054</span> }<a name="line.4054"></a>
+<span class="sourceLineNo">4055</span><a name="line.4055"></a>
+<span class="sourceLineNo">4056</span> /**<a name="line.4056"></a>
+<span class="sourceLineNo">4057</span> * Connect to peer and check the table
descriptor on peer:<a name="line.4057"></a>
+<span class="sourceLineNo">4058</span> * <ol><a name="line.4058"></a>
+<span class="sourceLineNo">4059</span> * <li>Create the same table on
peer when not exist.</li><a name="line.4059"></a>
+<span class="sourceLineNo">4060</span> * <li>Throw an exception if the
table already has replication enabled on any of the column<a
name="line.4060"></a>
+<span class="sourceLineNo">4061</span> * families.</li><a
name="line.4061"></a>
+<span class="sourceLineNo">4062</span> * <li>Throw an exception if the
table exists on peer cluster but descriptors are not same.</li><a
name="line.4062"></a>
+<span class="sourceLineNo">4063</span> * </ol><a name="line.4063"></a>
+<span class="sourceLineNo">4064</span> * @param tableName name of the table
to sync to the peer<a name="line.4064"></a>
+<span class="sourceLineNo">4065</span> * @param splits table split keys<a
name="line.4065"></a>
+<span class="sourceLineNo">4066</span> * @throws IOException<a
name="line.4066"></a>
+<span class="sourceLineNo">4067</span> */<a name="line.4067"></a>
+<span class="sourceLineNo">4068</span> private void
checkAndSyncTableDescToPeers(final TableName tableName, final byte[][]
splits)<a name="line.4068"></a>
+<span class="sourceLineNo">4069</span> throws IOException {<a
name="line.4069"></a>
+<span class="sourceLineNo">4070</span>
List<ReplicationPeerDescription> peers = listReplicationPeers();<a
name="line.4070"></a>
+<span class="sourceLineNo">4071</span> if (peers == null || peers.size()
<= 0) {<a name="line.4071"></a>
+<span class="sourceLineNo">4072</span> throw new
IllegalArgumentException("Found no peer cluster for replication.");<a
name="line.4072"></a>
+<span class="sourceLineNo">4073</span> }<a name="line.4073"></a>
+<span class="sourceLineNo">4074</span><a name="line.4074"></a>
+<span class="sourceLineNo">4075</span> for (ReplicationPeerDescription
peerDesc : peers) {<a name="line.4075"></a>
+<span class="sourceLineNo">4076</span> if
(peerDesc.getPeerConfig().needToReplicate(tableName)) {<a name="line.4076"></a>
+<span class="sourceLineNo">4077</span> Configuration peerConf =<a
name="line.4077"></a>
+<span class="sourceLineNo">4078</span>
ReplicationPeerConfigUtil.getPeerClusterConfiguration(this.conf, peerDesc);<a
name="line.4078"></a>
+<span class="sourceLineNo">4079</span> try (Connection conn =
ConnectionFactory.createConnection(peerConf);<a name="line.4079"></a>
+<span class="sourceLineNo">4080</span> Admin repHBaseAdmin =
conn.getAdmin()) {<a name="line.4080"></a>
+<span class="sourceLineNo">4081</span> TableDescriptor tableDesc =
getDescriptor(tableName);<a name="line.4081"></a>
+<span class="sourceLineNo">4082</span> TableDescriptor peerTableDesc
= null;<a name="line.4082"></a>
+<span class="sourceLineNo">4083</span> if
(!repHBaseAdmin.tableExists(tableName)) {<a name="line.4083"></a>
+<span class="sourceLineNo">4084</span>
repHBaseAdmin.createTable(tableDesc, splits);<a name="line.4084"></a>
+<span class="sourceLineNo">4085</span> } else {<a
name="line.4085"></a>
+<span class="sourceLineNo">4086</span> peerTableDesc =
repHBaseAdmin.getDescriptor(tableName);<a name="line.4086"></a>
+<span class="sourceLineNo">4087</span> if (peerTableDesc == null)
{<a name="line.4087"></a>
+<span class="sourceLineNo">4088</span> throw new
IllegalArgumentException("Failed to get table descriptor for table "<a
name="line.4088"></a>
+<span class="sourceLineNo">4089</span> +
tableName.getNameAsString() + " from peer cluster " + peerDesc.getPeerId());<a
name="line.4089"></a>
+<span class="sourceLineNo">4090</span> }<a name="line.4090"></a>
+<span class="sourceLineNo">4091</span> if
(TableDescriptor.COMPARATOR_IGNORE_REPLICATION.compare(peerTableDesc,<a
name="line.4091"></a>
+<span class="sourceLineNo">4092</span> tableDesc) != 0) {<a
name="line.4092"></a>
+<span class="sourceLineNo">4093</span> throw new
IllegalArgumentException("Table " + tableName.getNameAsString()<a
name="line.4093"></a>
+<span class="sourceLineNo">4094</span> + " exists in peer
cluster " + peerDesc.getPeerId()<a name="line.4094"></a>
+<span class="sourceLineNo">4095</span> + ", but the table
descriptors are not same when compared with source cluster."<a
name="line.4095"></a>
+<span class="sourceLineNo">4096</span> + " Thus can not
enable the table's replication switch.");<a name="line.4096"></a>
+<span class="sourceLineNo">4097</span> }<a name="line.4097"></a>
+<span class="sourceLineNo">4098</span> }<a name="line.4098"></a>
+<span class="sourceLineNo">4099</span> }<a name="line.4099"></a>
+<span class="sourceLineNo">4100</span> }<a name="line.4100"></a>
+<span class="sourceLineNo">4101</span> }<a name="line.4101"></a>
+<span class="sourceLineNo">4102</span> }<a name="line.4102"></a>
+<span class="sourceLineNo">4103</span><a name="line.4103"></a>
+<span class="sourceLineNo">4104</span> /**<a name="line.4104"></a>
+<span class="sourceLineNo">4105</span> * Set the table's replication switch
if the table's replication switch is already not set.<a name="line.4105"></a>
+<span class="sourceLineNo">4106</span> * @param tableName name of the
table<a name="line.4106"></a>
+<span class="sourceLineNo">4107</span> * @param enableRep is replication
switch enable or disable<a name="line.4107"></a>
+<span class="sourceLineNo">4108</span> * @throws IOException if a remote or
network exception occurs<a name="line.4108"></a>
+<span class="sourceLineNo">4109</span> */<a name="line.4109"></a>
+<span class="sourceLineNo">4110</span> private void setTableRep(final
TableName tableName, boolean enableRep) throws IOException {<a
name="line.4110"></a>
+<span class="sourceLineNo">4111</span> TableDescriptor tableDesc =
getDescriptor(tableName);<a name="line.4111"></a>
+<span class="sourceLineNo">4112</span> if
(!tableDesc.matchReplicationScope(enableRep)) {<a name="line.4112"></a>
+<span class="sourceLineNo">4113</span> int scope =<a name="line.4113"></a>
+<span class="sourceLineNo">4114</span> enableRep ?
HConstants.REPLICATION_SCOPE_GLOBAL : HConstants.REPLICATION_SCOPE_LOCAL;<a
name="line.4114"></a>
+<span class="sourceLineNo">4115</span>
modifyTable(TableDescriptorBuilder.newBuilder(tableDesc).setReplicationScope(scope).build());<a
name="line.4115"></a>
+<span class="sourceLineNo">4116</span> }<a name="line.4116"></a>
+<span class="sourceLineNo">4117</span> }<a name="line.4117"></a>
+<span class="sourceLineNo">4118</span><a name="line.4118"></a>
+<span class="sourceLineNo">4119</span> @Override<a name="line.4119"></a>
+<span class="sourceLineNo">4120</span> public void
clearCompactionQueues(final ServerName sn, final Set<String> queues)<a
name="line.4120"></a>
+<span class="sourceLineNo">4121</span> throws IOException,
InterruptedException {<a name="line.4121"></a>
+<span class="sourceLineNo">4122</span> if (queues == null || queues.size()
== 0) {<a name="line.4122"></a>
+<span class="sourceLineNo">4123</span> throw new
IllegalArgumentException("queues cannot be null or empty");<a
name="line.4123"></a>
+<span class="sourceLineNo">4124</span> }<a name="line.4124"></a>
+<span class="sourceLineNo">4125</span> final AdminService.BlockingInterface
admin = this.connection.getAdmin(sn);<a name="line.4125"></a>
+<span class="sourceLineNo">4126</span> Callable<Void> callable = new
Callable<Void>() {<a name="line.4126"></a>
+<span class="sourceLineNo">4127</span> @Override<a name="line.4127"></a>
+<span class="sourceLineNo">4128</span> public Void call() throws
Exception {<a name="line.4128"></a>
+<span class="sourceLineNo">4129</span> // TODO: There is no timeout on
this controller. Set one!<a name="line.4129"></a>
+<span class="sourceLineNo">4130</span> HBaseRpcController controller =
rpcControllerFactory.newController();<a name="line.4130"></a>
+<span class="sourceLineNo">4131</span> ClearCompactionQueuesRequest
request =<a name="line.4131"></a>
+<span class="sourceLineNo">4132</span>
RequestConverter.buildClearCompactionQueuesRequest(queues);<a
name="line.4132"></a>
+<span class="sourceLineNo">4133</span>
admin.clearCompactionQueues(controller, request);<a name="line.4133"></a>
+<span class="sourceLineNo">4134</span> return null;<a
name="line.4134"></a>
+<span class="sourceLineNo">4135</span> }<a name="line.4135"></a>
+<span class="sourceLineNo">4136</span> };<a name="line.4136"></a>
+<span class="sourceLineNo">4137</span> ProtobufUtil.call(callable);<a
name="line.4137"></a>
+<span class="sourceLineNo">4138</span> }<a name="line.4138"></a>
+<span class="sourceLineNo">4139</span><a name="line.4139"></a>
+<span class="sourceLineNo">4140</span> @Override<a name="line.4140"></a>
+<span class="sourceLineNo">4141</span> public List<ServerName>
clearDeadServers(final List<ServerName> servers) throws IOException {<a
name="line.4141"></a>
+<span class="sourceLineNo">4142</span> if (servers == null ||
servers.size() == 0) {<a name="line.4142"></a>
+<span class="sourceLineNo">4143</span> throw new
IllegalArgumentException("servers cannot be null or empty");<a
name="line.4143"></a>
+<span class="sourceLineNo">4144</span> }<a name="line.4144"></a>
+<span class="sourceLineNo">4145</span> return executeCallable(new
MasterCallable<List<ServerName>>(getConnection(),<a
name="line.4145"></a>
+<span class="sourceLineNo">4146</span> getRpcControllerFactory())
{<a name="line.4146"></a>
+<span class="sourceLineNo">4147</span> @Override<a name="line.4147"></a>
+<span class="sourceLineNo">4148</span> protected List<ServerName>
rpcCall() throws Exception {<a name="line.4148"></a>
+<span class="sourceLineNo">4149</span> ClearDeadServersRequest req =
RequestConverter.buildClearDeadServersRequest(servers);<a name="line.4149"></a>
+<span class="sourceLineNo">4150</span> return
ProtobufUtil.toServerNameList(<a name="line.4150"></a>
+<span class="sourceLineNo">4151</span>
master.clearDeadServers(getRpcController(), req).getServerNameList());<a
name="line.4151"></a>
+<span class="sourceLineNo">4152</span> }<a name="line.4152"></a>
+<span class="sourceLineNo">4153</span> });<a name="line.4153"></a>
+<span class="sourceLineNo">4154</span> }<a name="line.4154"></a>
+<span class="sourceLineNo">4155</span>}<a name="line.4155"></a>