You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by sy...@apache.org on 2017/01/04 07:39:17 UTC
[15/50] [abbrv] hbase git commit: HBASE-17335 enable/disable
replication peer requests should be routed through master
http://git-wip-us.apache.org/repos/asf/hbase/blob/b3f2bec0/hbase-protocol-shaded/src/main/protobuf/Master.proto
----------------------------------------------------------------------
diff --git a/hbase-protocol-shaded/src/main/protobuf/Master.proto b/hbase-protocol-shaded/src/main/protobuf/Master.proto
index 384ac67..f4e7da6 100644
--- a/hbase-protocol-shaded/src/main/protobuf/Master.proto
+++ b/hbase-protocol-shaded/src/main/protobuf/Master.proto
@@ -855,4 +855,12 @@ service MasterService {
/** Remove a replication peer */
rpc RemoveReplicationPeer(RemoveReplicationPeerRequest)
returns(RemoveReplicationPeerResponse);
+
+ /** Enable a replication peer */
+ rpc EnableReplicationPeer(EnableReplicationPeerRequest)
+ returns(EnableReplicationPeerResponse);
+
+ /** Disable a replication peer */
+ rpc DisableReplicationPeer(DisableReplicationPeerRequest)
+ returns(DisableReplicationPeerResponse);
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/b3f2bec0/hbase-protocol-shaded/src/main/protobuf/Replication.proto
----------------------------------------------------------------------
diff --git a/hbase-protocol-shaded/src/main/protobuf/Replication.proto b/hbase-protocol-shaded/src/main/protobuf/Replication.proto
index 0bdf2c0..83633b3 100644
--- a/hbase-protocol-shaded/src/main/protobuf/Replication.proto
+++ b/hbase-protocol-shaded/src/main/protobuf/Replication.proto
@@ -40,3 +40,17 @@ message RemoveReplicationPeerRequest {
message RemoveReplicationPeerResponse {
}
+
+message EnableReplicationPeerRequest {
+ required string peer_id = 1;
+}
+
+message EnableReplicationPeerResponse {
+}
+
+message DisableReplicationPeerRequest {
+ required string peer_id = 1;
+}
+
+message DisableReplicationPeerResponse {
+}
http://git-wip-us.apache.org/repos/asf/hbase/blob/b3f2bec0/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/MasterObserver.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/MasterObserver.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/MasterObserver.java
index 5067b3b..d3b3868 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/MasterObserver.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/MasterObserver.java
@@ -1869,4 +1869,44 @@ public interface MasterObserver extends Coprocessor {
default void postRemoveReplicationPeer(final ObserverContext<MasterCoprocessorEnvironment> ctx,
String peerId) throws IOException {
}
+
+ /**
+ * Called before enable a replication peer
+ * @param ctx
+ * @param peerId a short name that identifies the peer
+ * @throws IOException on failure
+ */
+ default void preEnableReplicationPeer(final ObserverContext<MasterCoprocessorEnvironment> ctx,
+ String peerId) throws IOException {
+ }
+
+ /**
+ * Called after enable a replication peer
+ * @param ctx
+ * @param peerId a short name that identifies the peer
+ * @throws IOException on failure
+ */
+ default void postEnableReplicationPeer(final ObserverContext<MasterCoprocessorEnvironment> ctx,
+ String peerId) throws IOException {
+ }
+
+ /**
+ * Called before disable a replication peer
+ * @param ctx
+ * @param peerId a short name that identifies the peer
+ * @throws IOException on failure
+ */
+ default void preDisableReplicationPeer(final ObserverContext<MasterCoprocessorEnvironment> ctx,
+ String peerId) throws IOException {
+ }
+
+ /**
+ * Called after disable a replication peer
+ * @param ctx
+ * @param peerId a short name that identifies the peer
+ * @throws IOException on failure
+ */
+ default void postDisableReplicationPeer(final ObserverContext<MasterCoprocessorEnvironment> ctx,
+ String peerId) throws IOException {
+ }
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/b3f2bec0/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
index da35da1..6b135d9 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
@@ -3172,4 +3172,28 @@ public class HMaster extends HRegionServer implements MasterServices {
cpHost.postRemoveReplicationPeer(peerId);
}
}
+
+ @Override
+ public void enableReplicationPeer(String peerId) throws ReplicationException, IOException {
+ if (cpHost != null) {
+ cpHost.preEnableReplicationPeer(peerId);
+ }
+ LOG.info(getClientIdAuditPrefix() + " enable replication peer, id=" + peerId);
+ this.replicationManager.enableReplicationPeer(peerId);
+ if (cpHost != null) {
+ cpHost.postEnableReplicationPeer(peerId);
+ }
+ }
+
+ @Override
+ public void disableReplicationPeer(String peerId) throws ReplicationException, IOException {
+ if (cpHost != null) {
+ cpHost.preDisableReplicationPeer(peerId);
+ }
+ LOG.info(getClientIdAuditPrefix() + " disable replication peer, id=" + peerId);
+ this.replicationManager.disableReplicationPeer(peerId);
+ if (cpHost != null) {
+ cpHost.postDisableReplicationPeer(peerId);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/b3f2bec0/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java
index 97fbe67..0623f2b 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java
@@ -1687,4 +1687,44 @@ public class MasterCoprocessorHost
}
});
}
+
+ public void preEnableReplicationPeer(final String peerId) throws IOException {
+ execOperation(coprocessors.isEmpty() ? null : new CoprocessorOperation() {
+ @Override
+ public void call(MasterObserver observer, ObserverContext<MasterCoprocessorEnvironment> ctx)
+ throws IOException {
+ observer.preEnableReplicationPeer(ctx, peerId);
+ }
+ });
+ }
+
+ public void postEnableReplicationPeer(final String peerId) throws IOException {
+ execOperation(coprocessors.isEmpty() ? null : new CoprocessorOperation() {
+ @Override
+ public void call(MasterObserver observer, ObserverContext<MasterCoprocessorEnvironment> ctx)
+ throws IOException {
+ observer.postEnableReplicationPeer(ctx, peerId);
+ }
+ });
+ }
+
+ public void preDisableReplicationPeer(final String peerId) throws IOException {
+ execOperation(coprocessors.isEmpty() ? null : new CoprocessorOperation() {
+ @Override
+ public void call(MasterObserver observer, ObserverContext<MasterCoprocessorEnvironment> ctx)
+ throws IOException {
+ observer.preDisableReplicationPeer(ctx, peerId);
+ }
+ });
+ }
+
+ public void postDisableReplicationPeer(final String peerId) throws IOException {
+ execOperation(coprocessors.isEmpty() ? null : new CoprocessorOperation() {
+ @Override
+ public void call(MasterObserver observer, ObserverContext<MasterCoprocessorEnvironment> ctx)
+ throws IOException {
+ observer.postDisableReplicationPeer(ctx, peerId);
+ }
+ });
+ }
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/b3f2bec0/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java
----------------------------------------------------------------------
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 afd807c..8ee72c6 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
@@ -89,6 +89,10 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProto
import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.SplitTableRegionResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerRequest;
import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerResponse;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerRequest;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerResponse;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerRequest;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerResponse;
import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerRequest;
import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerResponse;
import org.apache.hadoop.hbase.regionserver.RSRpcServices;
@@ -1667,4 +1671,26 @@ public class MasterRpcServices extends RSRpcServices
throw new ServiceException(e);
}
}
+
+ @Override
+ public EnableReplicationPeerResponse enableReplicationPeer(RpcController controller,
+ EnableReplicationPeerRequest request) throws ServiceException {
+ try {
+ master.enableReplicationPeer(request.getPeerId());
+ return EnableReplicationPeerResponse.newBuilder().build();
+ } catch (ReplicationException | IOException e) {
+ throw new ServiceException(e);
+ }
+ }
+
+ @Override
+ public DisableReplicationPeerResponse disableReplicationPeer(RpcController controller,
+ DisableReplicationPeerRequest request) throws ServiceException {
+ try {
+ master.disableReplicationPeer(request.getPeerId());
+ return DisableReplicationPeerResponse.newBuilder().build();
+ } catch (ReplicationException | IOException e) {
+ throw new ServiceException(e);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/b3f2bec0/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java
index 5fc9d16..a7395bb 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java
@@ -431,4 +431,16 @@ public interface MasterServices extends Server {
* @param peerId a short name that identifies the peer
*/
void removeReplicationPeer(String peerId) throws ReplicationException, IOException;
+
+ /**
+ * Restart the replication stream to the specified peer
+ * @param peerId a short name that identifies the peer
+ */
+ void enableReplicationPeer(String peerId) throws ReplicationException, IOException;
+
+ /**
+ * Stop the replication stream to the specified peer
+ * @param peerId a short name that identifies the peer
+ */
+ void disableReplicationPeer(String peerId) throws ReplicationException, IOException;
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/b3f2bec0/hbase-server/src/main/java/org/apache/hadoop/hbase/master/replication/ReplicationManager.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/replication/ReplicationManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/replication/ReplicationManager.java
index 748f7af..8c13718 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/replication/ReplicationManager.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/replication/ReplicationManager.java
@@ -73,6 +73,14 @@ public class ReplicationManager {
this.replicationPeers.unregisterPeer(peerId);
}
+ public void enableReplicationPeer(String peerId) throws ReplicationException {
+ this.replicationPeers.enablePeer(peerId);
+ }
+
+ public void disableReplicationPeer(String peerId) throws ReplicationException {
+ this.replicationPeers.disablePeer(peerId);
+ }
+
/**
* Set a namespace in the peer config means that all tables in this namespace
* will be replicated to the peer cluster.
http://git-wip-us.apache.org/repos/asf/hbase/blob/b3f2bec0/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java
index 0452883..eaa0611 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java
@@ -2708,4 +2708,16 @@ public class AccessController extends BaseMasterAndRegionObserver
String peerId) throws IOException {
requirePermission(getActiveUser(ctx), "removeReplicationPeer", Action.ADMIN);
}
+
+ @Override
+ public void preEnableReplicationPeer(final ObserverContext<MasterCoprocessorEnvironment> ctx,
+ String peerId) throws IOException {
+ requirePermission(getActiveUser(ctx), "enableReplicationPeer", Action.ADMIN);
+ }
+
+ @Override
+ public void preDisableReplicationPeer(final ObserverContext<MasterCoprocessorEnvironment> ctx,
+ String peerId) throws IOException {
+ requirePermission(getActiveUser(ctx), "disableReplicationPeer", Action.ADMIN);
+ }
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/b3f2bec0/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockNoopMasterServices.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockNoopMasterServices.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockNoopMasterServices.java
index 55138a0..4e85d29 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockNoopMasterServices.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockNoopMasterServices.java
@@ -391,4 +391,12 @@ public class MockNoopMasterServices implements MasterServices, Server {
@Override
public void removeReplicationPeer(String peerId) throws ReplicationException {
}
+
+ @Override
+ public void enableReplicationPeer(String peerId) throws ReplicationException, IOException {
+ }
+
+ @Override
+ public void disableReplicationPeer(String peerId) throws ReplicationException, IOException {
+ }
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/b3f2bec0/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController.java
index a0f6f29..956eadf 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController.java
@@ -2900,4 +2900,34 @@ public class TestAccessController extends SecureTestUtil {
verifyAllowed(action, SUPERUSER, USER_ADMIN);
verifyDenied(action, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER);
}
+
+ @Test
+ public void testEnableReplicationPeer() throws Exception {
+ AccessTestAction action = new AccessTestAction() {
+ @Override
+ public Object run() throws Exception {
+ ACCESS_CONTROLLER.preEnableReplicationPeer(ObserverContext.createAndPrepare(CP_ENV, null),
+ "test");
+ return null;
+ }
+ };
+
+ verifyAllowed(action, SUPERUSER, USER_ADMIN);
+ verifyDenied(action, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER);
+ }
+
+ @Test
+ public void testDisableReplicationPeer() throws Exception {
+ AccessTestAction action = new AccessTestAction() {
+ @Override
+ public Object run() throws Exception {
+ ACCESS_CONTROLLER.preDisableReplicationPeer(ObserverContext.createAndPrepare(CP_ENV, null),
+ "test");
+ return null;
+ }
+ };
+
+ verifyAllowed(action, SUPERUSER, USER_ADMIN);
+ verifyDenied(action, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER);
+ }
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/b3f2bec0/src/main/asciidoc/_chapters/appendix_acl_matrix.adoc
----------------------------------------------------------------------
diff --git a/src/main/asciidoc/_chapters/appendix_acl_matrix.adoc b/src/main/asciidoc/_chapters/appendix_acl_matrix.adoc
index a71d916..afe7b57 100644
--- a/src/main/asciidoc/_chapters/appendix_acl_matrix.adoc
+++ b/src/main/asciidoc/_chapters/appendix_acl_matrix.adoc
@@ -118,6 +118,8 @@ In case the table goes out of date, the unit tests which check for accuracy of p
| | setNamespaceQuota | superuser\|global(A)
| | addReplicationPeer | superuser\|global(A)
| | removeReplicationPeer | superuser\|global(A)
+| | enableReplicationPeer | superuser\|global(A)
+| | disableReplicationPeer | superuser\|global(A)
| Region | openRegion | superuser\|global(A)
| | closeRegion | superuser\|global(A)
| | flush | superuser\|global(A)\|global\(C)\|TableOwner\|table(A)\|table\(C)