From ba40de13175d842909370f23c1373da48b6badc9 Mon Sep 17 00:00:00 2001 From: LiangJun He <2005hithlj@163.com> Date: Sat, 29 Oct 2022 21:41:18 +0800 Subject: [PATCH 1/4] HBASE-27448 Add an admin method to get replication enabled state --- .../org/apache/hadoop/hbase/client/Admin.java | 8 ++++ .../hbase/client/AdminOverAsyncAdmin.java | 5 ++ .../hadoop/hbase/client/AsyncAdmin.java | 8 ++++ .../hadoop/hbase/client/AsyncHBaseAdmin.java | 5 ++ .../hbase/client/RawAsyncHBaseAdmin.java | 14 ++++++ .../main/protobuf/server/master/Master.proto | 10 ++++ .../hbase/master/MasterRpcServices.java | 14 ++++++ .../replication/ReplicationPeerManager.java | 9 ++++ .../TestGetReplicationPeerState.java | 48 +++++++++++++++++++ .../hbase/rsgroup/VerifyingRSGroupAdmin.java | 5 ++ .../hbase/thrift2/client/ThriftAdmin.java | 5 ++ 11 files changed, 131 insertions(+) create mode 100644 hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestGetReplicationPeerState.java diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java index f5da0aa0bde7..d748ee75fd2a 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java @@ -2555,4 +2555,12 @@ List getLogEntries(Set serverNames, String logType, Server * Flush master local region */ void flushMasterStore() throws IOException; + + /** + * Check if a replication peer is enabled. + * @param peerId id of replication peer to check + * @return true if replication peer is enabled + * @throws IOException if a remote or network exception occurs + */ + boolean isReplicationPeerEnabled(String peerId) throws IOException; } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AdminOverAsyncAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AdminOverAsyncAdmin.java index 9e2b990d91c1..8fe15c47657f 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AdminOverAsyncAdmin.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AdminOverAsyncAdmin.java @@ -1084,4 +1084,9 @@ public List getLogEntries(Set serverNames, String logType, public void flushMasterStore() throws IOException { get(admin.flushMasterStore()); } + + @Override + public boolean isReplicationPeerEnabled(String peerId) throws IOException { + return get(admin.isReplicationPeerEnabled(peerId)); + } } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java index 6070c553f5e1..fb201411c208 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java @@ -1776,4 +1776,12 @@ CompletableFuture> getLogEntries(Set serverNames, Str * Flush master local region */ CompletableFuture flushMasterStore(); + + /** + * Check if a replication peer is enabled. + * @param peerId id of replication peer to check + * @return true if replication peer is enabled. The return value will be wrapped by a + * {@link CompletableFuture}. + */ + CompletableFuture isReplicationPeerEnabled(String peerId); } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java index a8f93dd506d4..841fe4b1df9f 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java @@ -959,4 +959,9 @@ public CompletableFuture> getLogEntries(Set serverNam public CompletableFuture flushMasterStore() { return wrap(rawAdmin.flushMasterStore()); } + + @Override + public CompletableFuture isReplicationPeerEnabled(String peerId) { + return wrap(rawAdmin.isReplicationPeerEnabled(peerId)); + } } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java index 4d614907326e..83a88b59a106 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java @@ -192,6 +192,8 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProcedureResultResponse; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProceduresRequest; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProceduresResponse; +import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetReplicationPeerStateRequest; +import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetReplicationPeerStateResponse; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableDescriptorsRequest; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableDescriptorsResponse; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableNamesRequest; @@ -4284,4 +4286,16 @@ Void> call(controller, stub, request.build(), (s, c, req, done) -> s.flushMasterStore(c, req, done), resp -> null)) .call(); } + + @Override + public CompletableFuture isReplicationPeerEnabled(String peerId) { + GetReplicationPeerStateRequest.Builder request = GetReplicationPeerStateRequest.newBuilder(); + request.setPeerId(peerId); + return this. newMasterCaller() + .action((controller, stub) -> this. call(controller, stub, request.build(), + (s, c, req, done) -> s.isReplicationPeerEnabled(c, req, done), + resp -> resp.getIsEnabled())) + .call(); + } } diff --git a/hbase-protocol-shaded/src/main/protobuf/server/master/Master.proto b/hbase-protocol-shaded/src/main/protobuf/server/master/Master.proto index 257abe8f11ca..8285c62c055a 100644 --- a/hbase-protocol-shaded/src/main/protobuf/server/master/Master.proto +++ b/hbase-protocol-shaded/src/main/protobuf/server/master/Master.proto @@ -761,6 +761,13 @@ message ModifyColumnStoreFileTrackerResponse { message FlushMasterStoreRequest {} message FlushMasterStoreResponse {} +message GetReplicationPeerStateRequest { + required string peer_id = 1; +} +message GetReplicationPeerStateResponse { + required bool is_enabled = 1; +} + service MasterService { /** Used by the client to get the number of regions that have received the updated schema */ rpc GetSchemaAlterStatus(GetSchemaAlterStatusRequest) @@ -1203,6 +1210,9 @@ service MasterService { rpc FlushMasterStore(FlushMasterStoreRequest) returns(FlushMasterStoreResponse); + + rpc IsReplicationPeerEnabled(GetReplicationPeerStateRequest) + returns(GetReplicationPeerStateResponse); } // HBCK Service definitions. diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java index 4a490b1e127c..5ef7bf60a1af 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java @@ -246,6 +246,8 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProcedureResultResponse; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProceduresRequest; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProceduresResponse; +import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetReplicationPeerStateRequest; +import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetReplicationPeerStateResponse; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetSchemaAlterStatusRequest; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetSchemaAlterStatusResponse; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableDescriptorsRequest; @@ -3491,4 +3493,16 @@ public FlushMasterStoreResponse flushMasterStore(RpcController controller, } return FlushMasterStoreResponse.newBuilder().build(); } + + @Override + public GetReplicationPeerStateResponse isReplicationPeerEnabled(RpcController controller, + GetReplicationPeerStateRequest request) throws ServiceException { + boolean isEnabled; + try { + isEnabled = server.getReplicationPeerManager().getPeerState(request.getPeerId()); + } catch (ReplicationException ioe) { + throw new ServiceException(ioe); + } + return GetReplicationPeerStateResponse.newBuilder().setIsEnabled(isEnabled).build(); + } } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.java index 0d4e11197cd1..06cf559d4923 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.java @@ -271,6 +271,15 @@ private void setPeerState(String peerId, boolean enabled) throws ReplicationExce desc.getSyncReplicationState())); } + public boolean getPeerState(String peerId) throws ReplicationException { + ReplicationPeerDescription desc = peers.get(peerId); + if (desc != null) { + return desc.isEnabled(); + } else { + throw new ReplicationException("Replication Peer of " + peerId + " does not exist."); + } + } + public void enablePeer(String peerId) throws ReplicationException { setPeerState(peerId, true); } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestGetReplicationPeerState.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestGetReplicationPeerState.java new file mode 100644 index 000000000000..af38cdbc16fa --- /dev/null +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestGetReplicationPeerState.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hbase.replication; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.apache.hadoop.hbase.HBaseClassTestRule; +import org.apache.hadoop.hbase.testclassification.LargeTests; +import org.apache.hadoop.hbase.testclassification.ReplicationTests; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +@Category({ ReplicationTests.class, LargeTests.class }) +public class TestGetReplicationPeerState extends TestReplicationBase { + + @ClassRule + public static final HBaseClassTestRule CLASS_RULE = + HBaseClassTestRule.forClass(TestGetReplicationPeerState.class); + + @Test + public void testGetReplicationPeerState() throws Exception { + + // Test disable replication peer + hbaseAdmin.disableReplicationPeer("2"); + assertFalse(hbaseAdmin.isReplicationPeerEnabled("2")); + + // Test enable replication peer + hbaseAdmin.enableReplicationPeer("2"); + assertTrue(hbaseAdmin.isReplicationPeerEnabled("2")); + } +} diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdmin.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdmin.java index 3c0658455f3a..a96c8a918c9f 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdmin.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdmin.java @@ -939,4 +939,9 @@ public Future modifyTableStoreFileTrackerAsync(TableName tableName, String public void flushMasterStore() throws IOException { admin.flushMasterStore(); } + + @Override + public boolean isReplicationPeerEnabled(String peerId) throws IOException { + return admin.isReplicationPeerEnabled(peerId); + } } diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftAdmin.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftAdmin.java index 13a1b9920ecf..1e8c0b2d1049 100644 --- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftAdmin.java +++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftAdmin.java @@ -1314,4 +1314,9 @@ public Future modifyTableStoreFileTrackerAsync(TableName tableName, String public void flushMasterStore() throws IOException { throw new NotImplementedException("flushMasterStore not supported in ThriftAdmin"); } + + @Override + public boolean isReplicationPeerEnabled(String peerId) throws IOException { + throw new NotImplementedException("isReplicationPeerEnabled not supported in ThriftAdmin"); + } } From 61fb0d3ff36579a01e31e8b7c9434b2fa0496745 Mon Sep 17 00:00:00 2001 From: LiangJun He <2005hithlj@163.com> Date: Sun, 30 Oct 2022 02:34:00 +0800 Subject: [PATCH 2/4] HBASE-27448 Add an admin method to get replication enabled state --- .../org/apache/hadoop/hbase/client/Admin.java | 16 +++---- .../hbase/client/AdminOverAsyncAdmin.java | 10 ++-- .../hadoop/hbase/client/AsyncAdmin.java | 16 +++---- .../hadoop/hbase/client/AsyncHBaseAdmin.java | 10 ++-- .../hbase/client/RawAsyncHBaseAdmin.java | 24 +++++----- .../TestGetReplicationPeerState.java | 48 ------------------- .../TestReplicationSmallTests.java | 16 +++++++ .../hbase/rsgroup/VerifyingRSGroupAdmin.java | 10 ++-- .../hbase/thrift2/client/ThriftAdmin.java | 10 ++-- 9 files changed, 64 insertions(+), 96 deletions(-) delete mode 100644 hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestGetReplicationPeerState.java diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java index d748ee75fd2a..ff008c15c276 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java @@ -2163,6 +2163,14 @@ default SyncReplicationState getReplicationPeerSyncReplicationState(String peerI return peers.get(0).getSyncReplicationState(); } + /** + * Check if a replication peer is enabled. + * @param peerId id of replication peer to check + * @return true if replication peer is enabled + * @throws IOException if a remote or network exception occurs + */ + boolean isReplicationPeerEnabled(String peerId) throws IOException; + /** * Mark region server(s) as decommissioned to prevent additional regions from getting assigned to * them. Optionally unload the regions on the servers. If there are multiple servers to be @@ -2555,12 +2563,4 @@ List getLogEntries(Set serverNames, String logType, Server * Flush master local region */ void flushMasterStore() throws IOException; - - /** - * Check if a replication peer is enabled. - * @param peerId id of replication peer to check - * @return true if replication peer is enabled - * @throws IOException if a remote or network exception occurs - */ - boolean isReplicationPeerEnabled(String peerId) throws IOException; } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AdminOverAsyncAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AdminOverAsyncAdmin.java index 8fe15c47657f..a199adc17c29 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AdminOverAsyncAdmin.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AdminOverAsyncAdmin.java @@ -876,6 +876,11 @@ public Future transitReplicationPeerSyncReplicationStateAsync(String peerI return admin.transitReplicationPeerSyncReplicationState(peerId, state); } + @Override + public boolean isReplicationPeerEnabled(String peerId) throws IOException { + return get(admin.isReplicationPeerEnabled(peerId)); + } + @Override public void decommissionRegionServers(List servers, boolean offload) throws IOException { @@ -1084,9 +1089,4 @@ public List getLogEntries(Set serverNames, String logType, public void flushMasterStore() throws IOException { get(admin.flushMasterStore()); } - - @Override - public boolean isReplicationPeerEnabled(String peerId) throws IOException { - return get(admin.isReplicationPeerEnabled(peerId)); - } } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java index fb201411c208..680aa4cc87dc 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java @@ -795,6 +795,14 @@ CompletableFuture removeReplicationPeerTableCFs(String peerId, */ CompletableFuture disableTableReplication(TableName tableName); + /** + * Check if a replication peer is enabled. + * @param peerId id of replication peer to check + * @return true if replication peer is enabled. The return value will be wrapped by a + * {@link CompletableFuture}. + */ + CompletableFuture isReplicationPeerEnabled(String peerId); + /** * Take a snapshot for the given table. If the table is enabled, a FLUSH-type snapshot will be * taken. If the table is disabled, an offline snapshot is taken. Snapshots are taken sequentially @@ -1776,12 +1784,4 @@ CompletableFuture> getLogEntries(Set serverNames, Str * Flush master local region */ CompletableFuture flushMasterStore(); - - /** - * Check if a replication peer is enabled. - * @param peerId id of replication peer to check - * @return true if replication peer is enabled. The return value will be wrapped by a - * {@link CompletableFuture}. - */ - CompletableFuture isReplicationPeerEnabled(String peerId); } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java index 841fe4b1df9f..fba883c1bbe7 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java @@ -481,6 +481,11 @@ public CompletableFuture disableTableReplication(TableName tableName) { return wrap(rawAdmin.disableTableReplication(tableName)); } + @Override + public CompletableFuture isReplicationPeerEnabled(String peerId) { + return wrap(rawAdmin.isReplicationPeerEnabled(peerId)); + } + @Override public CompletableFuture snapshot(SnapshotDescription snapshot) { return wrap(rawAdmin.snapshot(snapshot)); @@ -959,9 +964,4 @@ public CompletableFuture> getLogEntries(Set serverNam public CompletableFuture flushMasterStore() { return wrap(rawAdmin.flushMasterStore()); } - - @Override - public CompletableFuture isReplicationPeerEnabled(String peerId) { - return wrap(rawAdmin.isReplicationPeerEnabled(peerId)); - } } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java index 83a88b59a106..c6c03204ddc5 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java @@ -3736,6 +3736,18 @@ private CompletableFuture setTableReplication(TableName tableName, boolean return future; } + @Override + public CompletableFuture isReplicationPeerEnabled(String peerId) { + GetReplicationPeerStateRequest.Builder request = GetReplicationPeerStateRequest.newBuilder(); + request.setPeerId(peerId); + return this. newMasterCaller() + .action((controller, stub) -> this. call(controller, stub, request.build(), + (s, c, req, done) -> s.isReplicationPeerEnabled(c, req, done), + resp -> resp.getIsEnabled())) + .call(); + } + @Override public CompletableFuture clearBlockCache(TableName tableName) { CompletableFuture future = new CompletableFuture<>(); @@ -4286,16 +4298,4 @@ Void> call(controller, stub, request.build(), (s, c, req, done) -> s.flushMasterStore(c, req, done), resp -> null)) .call(); } - - @Override - public CompletableFuture isReplicationPeerEnabled(String peerId) { - GetReplicationPeerStateRequest.Builder request = GetReplicationPeerStateRequest.newBuilder(); - request.setPeerId(peerId); - return this. newMasterCaller() - .action((controller, stub) -> this. call(controller, stub, request.build(), - (s, c, req, done) -> s.isReplicationPeerEnabled(c, req, done), - resp -> resp.getIsEnabled())) - .call(); - } } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestGetReplicationPeerState.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestGetReplicationPeerState.java deleted file mode 100644 index af38cdbc16fa..000000000000 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestGetReplicationPeerState.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.hadoop.hbase.replication; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import org.apache.hadoop.hbase.HBaseClassTestRule; -import org.apache.hadoop.hbase.testclassification.LargeTests; -import org.apache.hadoop.hbase.testclassification.ReplicationTests; -import org.junit.ClassRule; -import org.junit.Test; -import org.junit.experimental.categories.Category; - -@Category({ ReplicationTests.class, LargeTests.class }) -public class TestGetReplicationPeerState extends TestReplicationBase { - - @ClassRule - public static final HBaseClassTestRule CLASS_RULE = - HBaseClassTestRule.forClass(TestGetReplicationPeerState.class); - - @Test - public void testGetReplicationPeerState() throws Exception { - - // Test disable replication peer - hbaseAdmin.disableReplicationPeer("2"); - assertFalse(hbaseAdmin.isReplicationPeerEnabled("2")); - - // Test enable replication peer - hbaseAdmin.enableReplicationPeer("2"); - assertTrue(hbaseAdmin.isReplicationPeerEnabled("2")); - } -} diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationSmallTests.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationSmallTests.java index 92f8e17ed594..3d9fa06d2e75 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationSmallTests.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationSmallTests.java @@ -19,6 +19,7 @@ import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -441,4 +442,19 @@ public void testReplicationInReplay() throws Exception { } } } + + /** + * Test for HBASE-27448 Add an admin method to get replication enabled state + */ + @Test + public void testGetReplicationPeerState() throws Exception { + + // Test disable replication peer + hbaseAdmin.disableReplicationPeer("2"); + assertFalse(hbaseAdmin.isReplicationPeerEnabled("2")); + + // Test enable replication peer + hbaseAdmin.enableReplicationPeer("2"); + assertTrue(hbaseAdmin.isReplicationPeerEnabled("2")); + } } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdmin.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdmin.java index a96c8a918c9f..37bef49b4912 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdmin.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdmin.java @@ -676,6 +676,11 @@ public Future transitReplicationPeerSyncReplicationStateAsync(String peerI return admin.transitReplicationPeerSyncReplicationStateAsync(peerId, state); } + @Override + public boolean isReplicationPeerEnabled(String peerId) throws IOException { + return admin.isReplicationPeerEnabled(peerId); + } + public void decommissionRegionServers(List servers, boolean offload) throws IOException { admin.decommissionRegionServers(servers, offload); @@ -939,9 +944,4 @@ public Future modifyTableStoreFileTrackerAsync(TableName tableName, String public void flushMasterStore() throws IOException { admin.flushMasterStore(); } - - @Override - public boolean isReplicationPeerEnabled(String peerId) throws IOException { - return admin.isReplicationPeerEnabled(peerId); - } } diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftAdmin.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftAdmin.java index 1e8c0b2d1049..0842497f9527 100644 --- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftAdmin.java +++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftAdmin.java @@ -1031,6 +1031,11 @@ public Future transitReplicationPeerSyncReplicationStateAsync(String peerI "transitReplicationPeerSyncReplicationStateAsync not supported in ThriftAdmin"); } + @Override + public boolean isReplicationPeerEnabled(String peerId) throws IOException { + throw new NotImplementedException("isReplicationPeerEnabled not supported in ThriftAdmin"); + } + @Override public void decommissionRegionServers(List servers, boolean offload) { throw new NotImplementedException("decommissionRegionServers not supported in ThriftAdmin"); @@ -1314,9 +1319,4 @@ public Future modifyTableStoreFileTrackerAsync(TableName tableName, String public void flushMasterStore() throws IOException { throw new NotImplementedException("flushMasterStore not supported in ThriftAdmin"); } - - @Override - public boolean isReplicationPeerEnabled(String peerId) throws IOException { - throw new NotImplementedException("isReplicationPeerEnabled not supported in ThriftAdmin"); - } } From e2b4a50445802ae189e6ccd1585e00c330ade004 Mon Sep 17 00:00:00 2001 From: LiangJun He <2005hithlj@163.com> Date: Sun, 30 Oct 2022 03:00:30 +0800 Subject: [PATCH 3/4] HBASE-27448 Add an admin method to get replication enabled state --- .../hbase/client/RawAsyncHBaseAdmin.java | 4 +-- .../main/protobuf/server/master/Master.proto | 13 +++------ .../protobuf/server/master/Replication.proto | 7 +++++ .../hbase/master/MasterRpcServices.java | 27 ++++++++++--------- 4 files changed, 26 insertions(+), 25 deletions(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java index c6c03204ddc5..21cc1d17b0c1 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java @@ -192,8 +192,6 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProcedureResultResponse; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProceduresRequest; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProceduresResponse; -import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetReplicationPeerStateRequest; -import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetReplicationPeerStateResponse; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableDescriptorsRequest; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableDescriptorsResponse; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableNamesRequest; @@ -327,6 +325,8 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerResponse; import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigRequest; import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigResponse; +import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerStateRequest; +import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerStateResponse; import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersRequest; import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersResponse; import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerRequest; diff --git a/hbase-protocol-shaded/src/main/protobuf/server/master/Master.proto b/hbase-protocol-shaded/src/main/protobuf/server/master/Master.proto index 8285c62c055a..f5d4a80f148e 100644 --- a/hbase-protocol-shaded/src/main/protobuf/server/master/Master.proto +++ b/hbase-protocol-shaded/src/main/protobuf/server/master/Master.proto @@ -761,13 +761,6 @@ message ModifyColumnStoreFileTrackerResponse { message FlushMasterStoreRequest {} message FlushMasterStoreResponse {} -message GetReplicationPeerStateRequest { - required string peer_id = 1; -} -message GetReplicationPeerStateResponse { - required bool is_enabled = 1; -} - service MasterService { /** Used by the client to get the number of regions that have received the updated schema */ rpc GetSchemaAlterStatus(GetSchemaAlterStatusRequest) @@ -1113,6 +1106,9 @@ service MasterService { rpc TransitReplicationPeerSyncReplicationState(TransitReplicationPeerSyncReplicationStateRequest) returns(TransitReplicationPeerSyncReplicationStateResponse); + rpc IsReplicationPeerEnabled(GetReplicationPeerStateRequest) + returns(GetReplicationPeerStateResponse); + /** Returns a list of ServerNames marked as decommissioned. */ rpc ListDecommissionedRegionServers(ListDecommissionedRegionServersRequest) returns(ListDecommissionedRegionServersResponse); @@ -1210,9 +1206,6 @@ service MasterService { rpc FlushMasterStore(FlushMasterStoreRequest) returns(FlushMasterStoreResponse); - - rpc IsReplicationPeerEnabled(GetReplicationPeerStateRequest) - returns(GetReplicationPeerStateResponse); } // HBCK Service definitions. diff --git a/hbase-protocol-shaded/src/main/protobuf/server/master/Replication.proto b/hbase-protocol-shaded/src/main/protobuf/server/master/Replication.proto index 6619c9694a46..24e459b39781 100644 --- a/hbase-protocol-shaded/src/main/protobuf/server/master/Replication.proto +++ b/hbase-protocol-shaded/src/main/protobuf/server/master/Replication.proto @@ -161,3 +161,10 @@ message TransitReplicationPeerSyncReplicationStateRequest { message TransitReplicationPeerSyncReplicationStateResponse { required uint64 proc_id = 1; } + +message GetReplicationPeerStateRequest { + required string peer_id = 1; +} +message GetReplicationPeerStateResponse { + required bool is_enabled = 1; +} diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java index 5ef7bf60a1af..1907e459ac3b 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java @@ -246,8 +246,6 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProcedureResultResponse; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProceduresRequest; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetProceduresResponse; -import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetReplicationPeerStateRequest; -import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetReplicationPeerStateResponse; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetSchemaAlterStatusRequest; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetSchemaAlterStatusResponse; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.GetTableDescriptorsRequest; @@ -419,6 +417,8 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerResponse; import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigRequest; import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigResponse; +import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerStateRequest; +import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerStateResponse; import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersRequest; import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersResponse; import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerRequest; @@ -2107,6 +2107,18 @@ public ListReplicationPeersResponse listReplicationPeers(RpcController controlle return response.build(); } + @Override + public GetReplicationPeerStateResponse isReplicationPeerEnabled(RpcController controller, + GetReplicationPeerStateRequest request) throws ServiceException { + boolean isEnabled; + try { + isEnabled = server.getReplicationPeerManager().getPeerState(request.getPeerId()); + } catch (ReplicationException ioe) { + throw new ServiceException(ioe); + } + return GetReplicationPeerStateResponse.newBuilder().setIsEnabled(isEnabled).build(); + } + @Override public ListDecommissionedRegionServersResponse listDecommissionedRegionServers( RpcController controller, ListDecommissionedRegionServersRequest request) @@ -3494,15 +3506,4 @@ public FlushMasterStoreResponse flushMasterStore(RpcController controller, return FlushMasterStoreResponse.newBuilder().build(); } - @Override - public GetReplicationPeerStateResponse isReplicationPeerEnabled(RpcController controller, - GetReplicationPeerStateRequest request) throws ServiceException { - boolean isEnabled; - try { - isEnabled = server.getReplicationPeerManager().getPeerState(request.getPeerId()); - } catch (ReplicationException ioe) { - throw new ServiceException(ioe); - } - return GetReplicationPeerStateResponse.newBuilder().setIsEnabled(isEnabled).build(); - } } From 2a0496615651275130b1eb47cb75597d2a889c4d Mon Sep 17 00:00:00 2001 From: LiangJun He <2005hithlj@163.com> Date: Sun, 30 Oct 2022 03:03:29 +0800 Subject: [PATCH 4/4] HBASE-27448 Add an admin method to get replication enabled state --- .../java/org/apache/hadoop/hbase/master/MasterRpcServices.java | 1 - 1 file changed, 1 deletion(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java index 1907e459ac3b..a37c9e35a450 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java @@ -3505,5 +3505,4 @@ public FlushMasterStoreResponse flushMasterStore(RpcController controller, } return FlushMasterStoreResponse.newBuilder().build(); } - }