From c8999d9defe9dd80822c26f0af40c7ed429519fc Mon Sep 17 00:00:00 2001 From: Enis Soztutar Date: Thu, 12 Mar 2015 13:39:55 -0700 Subject: [PATCH] HBASE-13169 ModifyTable increasing the region replica count should also auto-setup RRRE Conflicts: hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/ModifyTableHandler.java --- .../master/handler/ModifyTableHandler.java | 5 +++ .../TestRegionReplicaReplicationEndpoint.java | 32 +++++++++++++++++++ 2 files changed, 37 insertions(+) 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 baa8513ce9b..ae40ee5e071 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.MasterFileSystem; import org.apache.hadoop.hbase.master.MasterServices; import org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos; import org.apache.hadoop.hbase.util.Bytes; +import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil; @InterfaceAudience.Private public class ModifyTableHandler extends TableEventHandler { @@ -84,6 +85,10 @@ public class ModifyTableHandler extends TableEventHandler { deleteFamilyFromFS(hris, oldHtd.getFamiliesKeys()); removeReplicaColumnsIfNeeded(this.htd.getRegionReplication(), oldHtd.getRegionReplication(), htd.getTableName()); + // Setup replication for region replicas if needed + if (htd.getRegionReplication() > 1 && oldHtd.getRegionReplication() <= 1) { + ServerRegionReplicaUtil.setupRegionReplicaReplication(server.getConfiguration()); + } if (cpHost != null) { cpHost.postModifyTableHandler(this.tableName, this.htd); } 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 9205f357db5..7acc859103e 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,38 @@ public class TestRegionReplicaReplicationEndpoint { admin.close(); } + @Test (timeout=240000) + 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(); + } public void testRegionReplicaReplication(int regionReplication) throws Exception { // test region replica replication. Create a table with single region, write some data