You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ra...@apache.org on 2012/09/29 08:42:28 UTC
svn commit: r1391759 - in /hbase/trunk/hbase-server/src:
main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java
test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java
Author: ramkrishna
Date: Sat Sep 29 06:42:27 2012
New Revision: 1391759
URL: http://svn.apache.org/viewvc?rev=1391759&view=rev
Log:
HBASE-6853 IllegalArgument Exception is thrown when an empty region is spliitted(Priya)
Modified:
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java
hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java?rev=1391759&r1=1391758&r2=1391759&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java Sat Sep 29 06:42:27 2012
@@ -280,6 +280,12 @@ public class SplitTransaction {
throw new IOException(exceptionToThrow);
}
+
+ if (hstoreFilesToSplit.size() == 0) {
+ String errorMsg = "No store files to split for the region "+this.parent.getRegionInfo();
+ LOG.error(errorMsg);
+ throw new IOException(errorMsg);
+ }
if (!testing) {
services.removeFromOnlineRegions(this.parent.getRegionInfo().getEncodedName(), null);
}
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=1391759&r1=1391758&r2=1391759&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 Sat Sep 29 06:42:27 2012
@@ -541,6 +541,46 @@ public class TestSplitTransactionOnClust
testSplitBeforeSettingSplittingInZK(true);
testSplitBeforeSettingSplittingInZK(false);
}
+
+ @Test
+ public void testShouldThrowIOExceptionIfStoreFileSizeIsEmptyAndSHouldSuccessfullyExecuteRollback()
+ throws Exception {
+ final byte[] tableName = Bytes.toBytes("testRollBackShudBeSuccessfulIfStoreFileIsEmpty");
+ // Create table then get the single region for our new table.
+ TESTING_UTIL.createTable(tableName, HConstants.CATALOG_FAMILY);
+ List<HRegion> regions = cluster.getRegions(tableName);
+ HRegionInfo hri = getAndCheckSingleTableRegion(regions);
+ int tableRegionIndex = ensureTableRegionNotOnSameServerAsMeta(admin, hri);
+ int regionServerIndex = cluster.getServerWith(regions.get(0).getRegionName());
+ HRegionServer regionServer = cluster.getRegionServer(regionServerIndex);
+ // Turn off balancer so it doesn't cut in and mess up our placements.
+ this.admin.setBalancerRunning(false, false);
+ // Turn off the meta scanner so it don't remove parent on us.
+ cluster.getMaster().setCatalogJanitorEnabled(false);
+ try {
+ HRegionServer server = cluster.getRegionServer(tableRegionIndex);
+ printOutRegions(server, "Initial regions: ");
+ // Now split.
+ SplitTransaction st = null;
+ st = new MockedSplitTransaction(regions.get(0), null);
+ try {
+ st.execute(regionServer, regionServer);
+ } catch (IOException e) {
+ List<HRegion> daughters = cluster.getRegions(tableName);
+ assertTrue(daughters.size() == 1);
+
+ String node = ZKAssign.getNodeName(regionServer.getZooKeeper(), regions.get(0)
+ .getRegionInfo().getEncodedName());
+ assertFalse(ZKUtil.checkExists(regionServer.getZooKeeper(), node) == -1);
+ assertTrue(st.rollback(regionServer, regionServer));
+ assertTrue(ZKUtil.checkExists(regionServer.getZooKeeper(), node) == -1);
+ }
+ } finally {
+ admin.setBalancerRunning(true, false);
+ cluster.getMaster().setCatalogJanitorEnabled(true);
+ }
+
+ }
private void testSplitBeforeSettingSplittingInZK(boolean nodeCreated) throws IOException,
KeeperException {