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:44 UTC
[42/50] [abbrv] hbase git commit: HBASE-17336 get/update replication
peer config requests should be routed through master
http://git-wip-us.apache.org/repos/asf/hbase/blob/0e486656/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 0a000ee..f553e8f 100644
--- a/hbase-protocol-shaded/src/main/protobuf/Master.proto
+++ b/hbase-protocol-shaded/src/main/protobuf/Master.proto
@@ -885,6 +885,14 @@ service MasterService {
rpc DisableReplicationPeer(DisableReplicationPeerRequest)
returns(DisableReplicationPeerResponse);
+ /** Return peer config for a replication peer */
+ rpc GetReplicationPeerConfig(GetReplicationPeerConfigRequest)
+ returns(GetReplicationPeerConfigResponse);
+
+ /** Update peer config for a replication peer */
+ rpc UpdateReplicationPeerConfig(UpdateReplicationPeerConfigRequest)
+ returns(UpdateReplicationPeerConfigResponse);
+
/** Returns a list of ServerNames marked as draining. */
rpc listDrainingRegionServers(ListDrainingRegionServersRequest)
returns(ListDrainingRegionServersResponse);
http://git-wip-us.apache.org/repos/asf/hbase/blob/0e486656/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 83633b3..05b6e59 100644
--- a/hbase-protocol-shaded/src/main/protobuf/Replication.proto
+++ b/hbase-protocol-shaded/src/main/protobuf/Replication.proto
@@ -54,3 +54,20 @@ message DisableReplicationPeerRequest {
message DisableReplicationPeerResponse {
}
+
+message GetReplicationPeerConfigRequest {
+ required string peer_id = 1;
+}
+
+message GetReplicationPeerConfigResponse {
+ required string peer_id = 1;
+ required ReplicationPeer peer_config = 2;
+}
+
+message UpdateReplicationPeerConfigRequest {
+ required string peer_id = 1;
+ required ReplicationPeer peer_config = 2;
+}
+
+message UpdateReplicationPeerConfigResponse {
+}
http://git-wip-us.apache.org/repos/asf/hbase/blob/0e486656/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 d3b3868..c42c7b7 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
@@ -1909,4 +1909,46 @@ public interface MasterObserver extends Coprocessor {
default void postDisableReplicationPeer(final ObserverContext<MasterCoprocessorEnvironment> ctx,
String peerId) throws IOException {
}
+
+ /**
+ * Called before get the configured ReplicationPeerConfig for the specified peer
+ * @param ctx
+ * @param peerId a short name that identifies the peer
+ * @throws IOException on failure
+ */
+ default void preGetReplicationPeerConfig(final ObserverContext<MasterCoprocessorEnvironment> ctx,
+ String peerId) throws IOException {
+ }
+
+ /**
+ * Called after get the configured ReplicationPeerConfig for the specified peer
+ * @param ctx
+ * @param peerId a short name that identifies the peer
+ * @throws IOException on failure
+ */
+ default void postGetReplicationPeerConfig(
+ final ObserverContext<MasterCoprocessorEnvironment> ctx, String peerId) throws IOException {
+ }
+
+ /**
+ * Called before update peerConfig for the specified peer
+ * @param ctx
+ * @param peerId a short name that identifies the peer
+ * @throws IOException on failure
+ */
+ default void preUpdateReplicationPeerConfig(
+ final ObserverContext<MasterCoprocessorEnvironment> ctx, String peerId,
+ ReplicationPeerConfig peerConfig) throws IOException {
+ }
+
+ /**
+ * Called after update peerConfig for the specified peer
+ * @param ctx
+ * @param peerId a short name that identifies the peer
+ * @throws IOException on failure
+ */
+ default void postUpdateReplicationPeerConfig(
+ final ObserverContext<MasterCoprocessorEnvironment> ctx, String peerId,
+ ReplicationPeerConfig peerConfig) throws IOException {
+ }
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/0e486656/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 ecaaa16..a87c38e 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
@@ -3198,6 +3198,33 @@ public class HMaster extends HRegionServer implements MasterServices {
}
@Override
+ public ReplicationPeerConfig getReplicationPeerConfig(String peerId) throws ReplicationException,
+ IOException {
+ if (cpHost != null) {
+ cpHost.preGetReplicationPeerConfig(peerId);
+ }
+ final ReplicationPeerConfig peerConfig = this.replicationManager.getPeerConfig(peerId);
+ if (cpHost != null) {
+ cpHost.postGetReplicationPeerConfig(peerId);
+ }
+ return peerConfig;
+ }
+
+ @Override
+ public void updateReplicationPeerConfig(String peerId, ReplicationPeerConfig peerConfig)
+ throws ReplicationException, IOException {
+ if (cpHost != null) {
+ cpHost.preUpdateReplicationPeerConfig(peerId, peerConfig);
+ }
+ LOG.info(getClientIdAuditPrefix() + " update replication peer config, id=" + peerId
+ + ", config=" + peerConfig);
+ this.replicationManager.updatePeerConfig(peerId, peerConfig);
+ if (cpHost != null) {
+ cpHost.postUpdateReplicationPeerConfig(peerId, peerConfig);
+ }
+ }
+
+ @Override
public void drainRegionServer(final ServerName server) {
String parentZnode = getZooKeeper().znodePaths.drainingZNode;
try {
http://git-wip-us.apache.org/repos/asf/hbase/blob/0e486656/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 0623f2b..4e3987e 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
@@ -1727,4 +1727,46 @@ public class MasterCoprocessorHost
}
});
}
+
+ public void preGetReplicationPeerConfig(final String peerId) throws IOException {
+ execOperation(coprocessors.isEmpty() ? null : new CoprocessorOperation() {
+ @Override
+ public void call(MasterObserver observer, ObserverContext<MasterCoprocessorEnvironment> ctx)
+ throws IOException {
+ observer.preGetReplicationPeerConfig(ctx, peerId);
+ }
+ });
+ }
+
+ public void postGetReplicationPeerConfig(final String peerId) throws IOException {
+ execOperation(coprocessors.isEmpty() ? null : new CoprocessorOperation() {
+ @Override
+ public void call(MasterObserver observer, ObserverContext<MasterCoprocessorEnvironment> ctx)
+ throws IOException {
+ observer.postGetReplicationPeerConfig(ctx, peerId);
+ }
+ });
+ }
+
+ public void preUpdateReplicationPeerConfig(final String peerId,
+ final ReplicationPeerConfig peerConfig) throws IOException {
+ execOperation(coprocessors.isEmpty() ? null : new CoprocessorOperation() {
+ @Override
+ public void call(MasterObserver observer, ObserverContext<MasterCoprocessorEnvironment> ctx)
+ throws IOException {
+ observer.preUpdateReplicationPeerConfig(ctx, peerId, peerConfig);
+ }
+ });
+ }
+
+ public void postUpdateReplicationPeerConfig(final String peerId,
+ final ReplicationPeerConfig peerConfig) throws IOException {
+ execOperation(coprocessors.isEmpty() ? null : new CoprocessorOperation() {
+ @Override
+ public void call(MasterObserver observer, ObserverContext<MasterCoprocessorEnvironment> ctx)
+ throws IOException {
+ observer.postUpdateReplicationPeerConfig(ctx, peerId, peerConfig);
+ }
+ });
+ }
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/0e486656/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 76da838..707cb39 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
@@ -93,10 +93,15 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.Disab
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.GetReplicationPeerConfigRequest;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigResponse;
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.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigRequest;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigResponse;
import org.apache.hadoop.hbase.regionserver.RSRpcServices;
import org.apache.hadoop.hbase.replication.ReplicationException;
+import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;
import org.apache.hadoop.hbase.security.User;
import org.apache.hadoop.hbase.security.access.AccessController;
import org.apache.hadoop.hbase.security.visibility.VisibilityController;
@@ -1695,6 +1700,34 @@ public class MasterRpcServices extends RSRpcServices
}
@Override
+ public GetReplicationPeerConfigResponse getReplicationPeerConfig(RpcController controller,
+ GetReplicationPeerConfigRequest request) throws ServiceException {
+ GetReplicationPeerConfigResponse.Builder response = GetReplicationPeerConfigResponse
+ .newBuilder();
+ try {
+ String peerId = request.getPeerId();
+ ReplicationPeerConfig peerConfig = master.getReplicationPeerConfig(peerId);
+ response.setPeerId(peerId);
+ response.setPeerConfig(ReplicationSerDeHelper.convert(peerConfig));
+ } catch (ReplicationException | IOException e) {
+ throw new ServiceException(e);
+ }
+ return response.build();
+ }
+
+ @Override
+ public UpdateReplicationPeerConfigResponse updateReplicationPeerConfig(RpcController controller,
+ UpdateReplicationPeerConfigRequest request) throws ServiceException {
+ try {
+ master.updateReplicationPeerConfig(request.getPeerId(),
+ ReplicationSerDeHelper.convert(request.getPeerConfig()));
+ return UpdateReplicationPeerConfigResponse.newBuilder().build();
+ } catch (ReplicationException | IOException e) {
+ throw new ServiceException(e);
+ }
+ }
+
+ @Override
public ListDrainingRegionServersResponse listDrainingRegionServers(RpcController controller,
ListDrainingRegionServersRequest request) throws ServiceException {
ListDrainingRegionServersResponse.Builder response =
http://git-wip-us.apache.org/repos/asf/hbase/blob/0e486656/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 869e7ac..7686fc8 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
@@ -446,6 +446,22 @@ public interface MasterServices extends Server {
void disableReplicationPeer(String peerId) throws ReplicationException, IOException;
/**
+ * Returns the configured ReplicationPeerConfig for the specified peer
+ * @param peerId a short name that identifies the peer
+ * @return ReplicationPeerConfig for the peer
+ */
+ ReplicationPeerConfig getReplicationPeerConfig(String peerId) throws ReplicationException,
+ IOException;
+
+ /**
+ * Update the peerConfig for the specified peer
+ * @param peerId a short name that identifies the peer
+ * @param peerConfig new config for the peer
+ */
+ void updateReplicationPeerConfig(String peerId, ReplicationPeerConfig peerConfig)
+ throws ReplicationException, IOException;
+
+ /**
* Mark a region server as draining to prevent additional regions from getting assigned to it.
* @param server Region servers to drain.
*/
http://git-wip-us.apache.org/repos/asf/hbase/blob/0e486656/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 8c13718..f00730d 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
@@ -24,6 +24,7 @@ import java.util.Set;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Abortable;
+import org.apache.hadoop.hbase.ReplicationPeerNotFoundException;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.classification.InterfaceAudience;
import org.apache.hadoop.hbase.replication.ReplicationException;
@@ -66,11 +67,13 @@ public class ReplicationManager {
throws ReplicationException {
checkNamespacesAndTableCfsConfigConflict(peerConfig.getNamespaces(),
peerConfig.getTableCFsMap());
- this.replicationPeers.registerPeer(peerId, peerConfig);
+ replicationPeers.registerPeer(peerId, peerConfig);
+ replicationPeers.peerConnected(peerId);
}
public void removeReplicationPeer(String peerId) throws ReplicationException {
- this.replicationPeers.unregisterPeer(peerId);
+ replicationPeers.peerDisconnected(peerId);
+ replicationPeers.unregisterPeer(peerId);
}
public void enableReplicationPeer(String peerId) throws ReplicationException {
@@ -81,6 +84,22 @@ public class ReplicationManager {
this.replicationPeers.disablePeer(peerId);
}
+ public ReplicationPeerConfig getPeerConfig(String peerId) throws ReplicationException,
+ ReplicationPeerNotFoundException {
+ ReplicationPeerConfig peerConfig = replicationPeers.getReplicationPeerConfig(peerId);
+ if (peerConfig == null) {
+ throw new ReplicationPeerNotFoundException(peerId);
+ }
+ return peerConfig;
+ }
+
+ public void updatePeerConfig(String peerId, ReplicationPeerConfig peerConfig)
+ throws ReplicationException {
+ checkNamespacesAndTableCfsConfigConflict(peerConfig.getNamespaces(),
+ peerConfig.getTableCFsMap());
+ this.replicationPeers.updatePeerConfig(peerId, peerConfig);
+ }
+
/**
* 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/0e486656/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 eaa0611..0564ece 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
@@ -2720,4 +2720,17 @@ public class AccessController extends BaseMasterAndRegionObserver
String peerId) throws IOException {
requirePermission(getActiveUser(ctx), "disableReplicationPeer", Action.ADMIN);
}
+
+ @Override
+ public void preGetReplicationPeerConfig(final ObserverContext<MasterCoprocessorEnvironment> ctx,
+ String peerId) throws IOException {
+ requirePermission(getActiveUser(ctx), "getReplicationPeerConfig", Action.ADMIN);
+ }
+
+ @Override
+ public void preUpdateReplicationPeerConfig(
+ final ObserverContext<MasterCoprocessorEnvironment> ctx, String peerId,
+ ReplicationPeerConfig peerConfig) throws IOException {
+ requirePermission(getActiveUser(ctx), "updateReplicationPeerConfig", Action.ADMIN);
+ }
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/0e486656/hbase-server/src/main/java/org/apache/hadoop/hbase/util/ServerRegionReplicaUtil.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/ServerRegionReplicaUtil.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/ServerRegionReplicaUtil.java
index 0655a0f..9ecc9eb 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/ServerRegionReplicaUtil.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/ServerRegionReplicaUtil.java
@@ -20,14 +20,18 @@ package org.apache.hadoop.hbase.util;
import java.io.IOException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HRegionInfo;
+import org.apache.hadoop.hbase.ReplicationPeerNotFoundException;
import org.apache.hadoop.hbase.client.RegionReplicaUtil;
import org.apache.hadoop.hbase.client.replication.ReplicationAdmin;
import org.apache.hadoop.hbase.io.HFileLink;
import org.apache.hadoop.hbase.io.Reference;
+import org.apache.hadoop.hbase.quotas.MasterQuotaManager;
import org.apache.hadoop.hbase.regionserver.HRegion;
import org.apache.hadoop.hbase.regionserver.StoreFileInfo;
import org.apache.hadoop.hbase.replication.ReplicationException;
@@ -40,6 +44,8 @@ import org.apache.hadoop.hbase.zookeeper.ZKConfig;
*/
public class ServerRegionReplicaUtil extends RegionReplicaUtil {
+ private static final Log LOG = LogFactory.getLog(ServerRegionReplicaUtil.class);
+
/**
* Whether asynchronous WAL replication to the secondary region replicas is enabled or not.
* If this is enabled, a replication peer named "region_replica_replication" will be created
@@ -143,9 +149,18 @@ public class ServerRegionReplicaUtil extends RegionReplicaUtil {
return;
}
ReplicationAdmin repAdmin = new ReplicationAdmin(conf);
+ ReplicationPeerConfig peerConfig = null;
+ try {
+ peerConfig = repAdmin.getPeerConfig(REGION_REPLICA_REPLICATION_PEER);
+ } catch (ReplicationPeerNotFoundException e) {
+ LOG.warn("Region replica replication peer id=" + REGION_REPLICA_REPLICATION_PEER
+ + " not exist", e);
+ }
try {
- if (repAdmin.getPeerConfig(REGION_REPLICA_REPLICATION_PEER) == null) {
- ReplicationPeerConfig peerConfig = new ReplicationPeerConfig();
+ if (peerConfig == null) {
+ LOG.info("Region replica replication peer id=" + REGION_REPLICA_REPLICATION_PEER
+ + " not exist. Creating...");
+ peerConfig = new ReplicationPeerConfig();
peerConfig.setClusterKey(ZKConfig.getZooKeeperClusterKey(conf));
peerConfig.setReplicationEndpointImpl(RegionReplicaReplicationEndpoint.class.getName());
repAdmin.addPeer(REGION_REPLICA_REPLICATION_PEER, peerConfig, null);
http://git-wip-us.apache.org/repos/asf/hbase/blob/0e486656/hbase-server/src/test/java/org/apache/hadoop/hbase/client/replication/TestReplicationAdmin.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/replication/TestReplicationAdmin.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/replication/TestReplicationAdmin.java
index 10c73a6..15d5150 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/replication/TestReplicationAdmin.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/replication/TestReplicationAdmin.java
@@ -18,6 +18,7 @@
package org.apache.hadoop.hbase.client.replication;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
@@ -448,7 +449,7 @@ public class TestReplicationAdmin {
admin.updatePeerConfig(ID_ONE, rpc);
fail("Should throw ReplicationException, because table " + tab1 + " conflict with namespace "
+ ns1);
- } catch (ReplicationException e) {
+ } catch (IOException e) {
// OK
}
@@ -465,7 +466,7 @@ public class TestReplicationAdmin {
admin.updatePeerConfig(ID_ONE, rpc);
fail("Should throw ReplicationException, because namespace " + ns2 + " conflict with table "
+ tab2);
- } catch (ReplicationException e) {
+ } catch (IOException e) {
// OK
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/0e486656/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 2a5be12..36dc2e2 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
@@ -414,4 +414,15 @@ public class MockNoopMasterServices implements MasterServices, Server {
public void removeDrainFromRegionServer(ServerName servers) {
return;
}
+
+ @Override
+ public ReplicationPeerConfig getReplicationPeerConfig(String peerId) throws ReplicationException,
+ IOException {
+ return null;
+ }
+
+ @Override
+ public void updateReplicationPeerConfig(String peerId, ReplicationPeerConfig peerConfig)
+ throws ReplicationException, IOException {
+ }
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/0e486656/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/regionserver/TestRegionReplicaReplicationEndpoint.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/regionserver/TestRegionReplicaReplicationEndpoint.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/regionserver/TestRegionReplicaReplicationEndpoint.java
index 5147339..11df7e0 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/regionserver/TestRegionReplicaReplicationEndpoint.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/regionserver/TestRegionReplicaReplicationEndpoint.java
@@ -34,6 +34,7 @@ import org.apache.hadoop.hbase.HBaseTestingUtility;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.HRegionLocation;
import org.apache.hadoop.hbase.HTableDescriptor;
+import org.apache.hadoop.hbase.ReplicationPeerNotFoundException;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.Waiter;
import org.apache.hadoop.hbase.client.ClusterConnection;
@@ -111,14 +112,27 @@ public class TestRegionReplicaReplicationEndpoint {
ReplicationAdmin admin = new ReplicationAdmin(HTU.getConfiguration());
String peerId = "region_replica_replication";
- if (admin.getPeerConfig(peerId) != null) {
+ ReplicationPeerConfig peerConfig = null;
+ try {
+ peerConfig = admin.getPeerConfig(peerId);
+ } catch (ReplicationPeerNotFoundException e) {
+ LOG.warn("Region replica replication peer id=" + peerId + " not exist", e);
+ }
+
+ if (peerConfig != null) {
admin.removePeer(peerId);
+ peerConfig = null;
}
HTableDescriptor htd = HTU.createTableDescriptor(
"testReplicationPeerIsCreated_no_region_replicas");
HTU.getHBaseAdmin().createTable(htd);
- ReplicationPeerConfig peerConfig = admin.getPeerConfig(peerId);
+ try {
+ peerConfig = admin.getPeerConfig(peerId);
+ fail("Should throw ReplicationException, because replication peer id=" + peerId
+ + " not exist");
+ } catch (ReplicationPeerNotFoundException e) {
+ }
assertNull(peerConfig);
htd = HTU.createTableDescriptor("testReplicationPeerIsCreated");
@@ -142,8 +156,16 @@ public class TestRegionReplicaReplicationEndpoint {
ReplicationAdmin admin = new ReplicationAdmin(HTU.getConfiguration());
String peerId = "region_replica_replication";
- if (admin.getPeerConfig(peerId) != null) {
+ ReplicationPeerConfig peerConfig = null;
+ try {
+ peerConfig = admin.getPeerConfig(peerId);
+ } catch (ReplicationPeerNotFoundException e) {
+ LOG.warn("Region replica replication peer id=" + peerId + " not exist", e);
+ }
+
+ if (peerConfig != null) {
admin.removePeer(peerId);
+ peerConfig = null;
}
HTableDescriptor htd
@@ -151,7 +173,12 @@ public class TestRegionReplicaReplicationEndpoint {
HTU.getHBaseAdmin().createTable(htd);
// assert that replication peer is not created yet
- ReplicationPeerConfig peerConfig = admin.getPeerConfig(peerId);
+ try {
+ peerConfig = admin.getPeerConfig(peerId);
+ fail("Should throw ReplicationException, because replication peer id=" + peerId
+ + " not exist");
+ } catch (ReplicationPeerNotFoundException e) {
+ }
assertNull(peerConfig);
HTU.getHBaseAdmin().disableTable(htd.getTableName());
http://git-wip-us.apache.org/repos/asf/hbase/blob/0e486656/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 956eadf..7107669 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
@@ -113,6 +113,7 @@ import org.apache.hadoop.hbase.regionserver.Region;
import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;
import org.apache.hadoop.hbase.regionserver.RegionServerCoprocessorHost;
import org.apache.hadoop.hbase.regionserver.ScanType;
+import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;
import org.apache.hadoop.hbase.security.Superusers;
import org.apache.hadoop.hbase.security.User;
import org.apache.hadoop.hbase.security.access.Permission.Action;
@@ -2930,4 +2931,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 testGetReplicationPeerConfig() throws Exception {
+ AccessTestAction action = new AccessTestAction() {
+ @Override
+ public Object run() throws Exception {
+ ACCESS_CONTROLLER.preGetReplicationPeerConfig(
+ 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 testUpdateReplicationPeerConfig() throws Exception {
+ AccessTestAction action = new AccessTestAction() {
+ @Override
+ public Object run() throws Exception {
+ ACCESS_CONTROLLER.preUpdateReplicationPeerConfig(
+ ObserverContext.createAndPrepare(CP_ENV, null), "test", new ReplicationPeerConfig());
+ 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/0e486656/hbase-shell/src/main/ruby/hbase/replication_admin.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/main/ruby/hbase/replication_admin.rb b/hbase-shell/src/main/ruby/hbase/replication_admin.rb
index 5fd23d3..3c94db2 100644
--- a/hbase-shell/src/main/ruby/hbase/replication_admin.rb
+++ b/hbase-shell/src/main/ruby/hbase/replication_admin.rb
@@ -293,7 +293,7 @@ module Hbase
data = args.fetch(DATA, nil)
# Create and populate a ReplicationPeerConfig
- replication_peer_config = ReplicationPeerConfig.new
+ replication_peer_config = get_peer_config(id)
unless config.nil?
replication_peer_config.get_configuration.put_all(config)
end
http://git-wip-us.apache.org/repos/asf/hbase/blob/0e486656/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 afe7b57..e902618 100644
--- a/src/main/asciidoc/_chapters/appendix_acl_matrix.adoc
+++ b/src/main/asciidoc/_chapters/appendix_acl_matrix.adoc
@@ -120,6 +120,8 @@ In case the table goes out of date, the unit tests which check for accuracy of p
| | removeReplicationPeer | superuser\|global(A)
| | enableReplicationPeer | superuser\|global(A)
| | disableReplicationPeer | superuser\|global(A)
+| | getReplicationPeerConfig | superuser\|global(A)
+| | updateReplicationPeerConfig | superuser\|global(A)
| Region | openRegion | superuser\|global(A)
| | closeRegion | superuser\|global(A)
| | flush | superuser\|global(A)\|global\(C)\|TableOwner\|table(A)\|table\(C)