You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2014/01/20 22:58:00 UTC
svn commit: r1559838 -
/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java
Author: stack
Date: Mon Jan 20 21:58:00 2014
New Revision: 1559838
URL: http://svn.apache.org/r1559838
Log:
HBASE-10377 Add test for HBASE-10370 Compaction in out-of-date Store causes region split failure
Modified:
hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java
Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java?rev=1559838&r1=1559837&r2=1559838&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java Mon Jan 20 21:58:00 2014
@@ -75,6 +75,8 @@ import org.apache.hadoop.hbase.master.Re
import org.apache.hadoop.hbase.master.RegionStates;
import org.apache.hadoop.hbase.master.RegionState.State;
import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
+import org.apache.hadoop.hbase.regionserver.compactions.CompactionContext;
+import org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
import org.apache.hadoop.hbase.util.FSUtils;
@@ -298,7 +300,54 @@ public class TestSplitTransactionOnClust
TESTING_UTIL.deleteTable(tableName);
}
}
-
+ @Test
+ public void testSplitFailedCompactionAndSplit() throws Exception {
+ final byte[] tableName = Bytes.toBytes("testSplitFailedCompactionAndSplit");
+ Configuration conf = TESTING_UTIL.getConfiguration();
+ HBaseAdmin admin = new HBaseAdmin(conf);
+ // Create table then get the single region for our new table.
+ HTableDescriptor htd = new HTableDescriptor(tableName);
+ byte[] cf = Bytes.toBytes("cf");
+ htd.addFamily(new HColumnDescriptor(cf));
+ admin.createTable(htd);
+
+ for (int i = 0; cluster.getRegions(tableName).size() == 0 && i < 100; i++) {
+ Thread.sleep(100);
+ }
+ assertEquals(1, cluster.getRegions(tableName).size());
+
+ HRegion region = cluster.getRegions(tableName).get(0);
+ Store store = region.getStore(cf);
+ int regionServerIndex = cluster.getServerWith(region.getRegionName());
+ HRegionServer regionServer = cluster.getRegionServer(regionServerIndex);
+
+ HTable t = new HTable(conf, tableName);
+ // insert data
+ insertData(tableName, admin, t);
+ insertData(tableName, admin, t);
+
+ int fileNum = store.getStorefiles().size();
+ // 0, Compaction Request
+ store.triggerMajorCompaction();
+ CompactionContext cc = store.requestCompaction();
+ assertNotNull(cc);
+ // 1, A timeout split
+ // 1.1 close region
+ assertEquals(2, region.close(false).get(cf).size());
+ // 1.2 rollback and Region initialize again
+ region.initialize();
+
+ // 2, Run Compaction cc
+ assertFalse(region.compact(cc, store));
+ assertTrue(fileNum > store.getStorefiles().size());
+
+ // 3, Split
+ SplitTransaction st = new SplitTransaction(region, Bytes.toBytes("row3"));
+ assertTrue(st.prepare());
+ st.execute(regionServer, regionServer);
+ assertEquals(2, cluster.getRegions(tableName).size());
+ }
+
public static class FailingSplitRegionObserver extends BaseRegionObserver {
static volatile CountDownLatch latch = new CountDownLatch(1);
@Override