Repository: hbase-site Updated Branches: refs/heads/asf-site 83b248d3f -> fd365a2bc
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/fd365a2b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.TableFuture.TableWaitForStateCallable.html ---------------------------------------------------------------------- diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.TableFuture.TableWaitForStateCallable.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.TableFuture.TableWaitForStateCallable.html index d438f22..7c59e27 100644 --- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.TableFuture.TableWaitForStateCallable.html +++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HBaseAdmin.TableFuture.TableWaitForStateCallable.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>