Repository: hbase
Updated Branches:
  refs/heads/master 9aa8f0672 -> be25b0d59


HBASE-13169 ModifyTable increasing the region replica count should also 
auto-setup RRRE


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/be25b0d5
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/be25b0d5
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/be25b0d5

Branch: refs/heads/master
Commit: be25b0d595371e221da93a1b734dc696d044c9c8
Parents: 9aa8f06
Author: Enis Soztutar <e...@apache.org>
Authored: Mon Mar 9 18:49:40 2015 -0700
Committer: Enis Soztutar <e...@apache.org>
Committed: Mon Mar 9 18:49:40 2015 -0700

----------------------------------------------------------------------
 .../master/handler/ModifyTableHandler.java      |  6 +++
 .../TestRegionReplicaReplicationEndpoint.java   | 39 ++++++++++++++++++++
 2 files changed, 45 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/be25b0d5/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/ModifyTableHandler.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/ModifyTableHandler.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/ModifyTableHandler.java
index 1cb0643..2896354 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/ModifyTableHandler.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/ModifyTableHandler.java
@@ -44,6 +44,7 @@ import org.apache.hadoop.hbase.master.MasterCoprocessorHost;
 import org.apache.hadoop.hbase.master.MasterFileSystem;
 import org.apache.hadoop.hbase.master.MasterServices;
 import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;
 
 @InterfaceAudience.Private
 public class ModifyTableHandler extends TableEventHandler {
@@ -88,6 +89,11 @@ public class ModifyTableHandler extends TableEventHandler {
         this.htd.getRegionReplication(),
         oldDescriptor.getRegionReplication(),
         this.htd.getTableName());
+
+    // Setup replication for region replicas if needed
+    if (htd.getRegionReplication() > 1 && oldDescriptor.getRegionReplication() 
<= 1) {
+      
ServerRegionReplicaUtil.setupRegionReplicaReplication(server.getConfiguration());
+    }
     if (cpHost != null) {
       cpHost.postModifyTableHandler(this.tableName, this.htd);
     }

http://git-wip-us.apache.org/repos/asf/hbase/blob/be25b0d5/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 886bd6e..9306b15 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
@@ -135,6 +135,45 @@ public class TestRegionReplicaReplicationEndpoint {
     admin.close();
   }
 
+  @Test
+  public void testRegionReplicaReplicationPeerIsCreatedForModifyTable() throws 
Exception {
+    // modify a table by adding region replicas. Check whether the replication 
peer is created
+    // and replication started.
+    ReplicationAdmin admin = new ReplicationAdmin(HTU.getConfiguration());
+    String peerId = "region_replica_replication";
+
+    if (admin.getPeerConfig(peerId) != null) {
+      admin.removePeer(peerId);
+    }
+
+    HTableDescriptor htd
+      = 
HTU.createTableDescriptor("testRegionReplicaReplicationPeerIsCreatedForModifyTable");
+    HTU.getHBaseAdmin().createTable(htd);
+
+    // assert that replication peer is not created yet
+    ReplicationPeerConfig peerConfig = admin.getPeerConfig(peerId);
+    assertNull(peerConfig);
+
+    HTU.getHBaseAdmin().disableTable(htd.getTableName());
+    htd.setRegionReplication(2);
+    HTU.getHBaseAdmin().modifyTable(htd.getTableName(), htd);
+    HTU.getHBaseAdmin().enableTable(htd.getTableName());
+
+    // assert peer configuration is correct
+    peerConfig = admin.getPeerConfig(peerId);
+    assertNotNull(peerConfig);
+    assertEquals(peerConfig.getClusterKey(), 
ZKUtil.getZooKeeperClusterKey(HTU.getConfiguration()));
+    assertEquals(peerConfig.getReplicationEndpointImpl(),
+      RegionReplicaReplicationEndpoint.class.getName());
+    admin.close();
+
+    // verify it is working
+    try(Connection connection = 
ConnectionFactory.createConnection(HTU.getConfiguration());
+        Table table = connection.getTable(htd.getTableName());){
+      HTU.loadNumericRows(table, HBaseTestingUtility.fam1, 0, 1000);
+      verifyReplication(htd.getTableName(), 2, 0, 1000);
+    }
+  }
 
   public void testRegionReplicaReplication(int regionReplication) throws 
Exception {
     // test region replica replication. Create a table with single region, 
write some data

Reply via email to