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 2010/08/08 17:59:46 UTC

svn commit: r983442 - in /hbase/trunk: CHANGES.txt src/main/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java src/main/resources/hbase-default.xml

Author: stack
Date: Sun Aug  8 15:59:46 2010
New Revision: 983442

URL: http://svn.apache.org/viewvc?rev=983442&view=rev
Log:
HBASE-2844 Capping the number of regions

Modified:
    hbase/trunk/CHANGES.txt
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
    hbase/trunk/src/main/resources/hbase-default.xml

Modified: hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/trunk/CHANGES.txt?rev=983442&r1=983441&r2=983442&view=diff
==============================================================================
--- hbase/trunk/CHANGES.txt (original)
+++ hbase/trunk/CHANGES.txt Sun Aug  8 15:59:46 2010
@@ -827,6 +827,7 @@ Release 0.21.0 - Unreleased
    HBASE-2886  Add search box to site (Alex Baranau via Stack)
    HBASE-2792  Create a better way to chain log cleaners
                (Chongxin Li via Stack)
+   HBASE-2844  Capping the number of regions (Pranav Khaitan via Stack)
 
   NEW FEATURES
    HBASE-1961  HBase EC2 scripts

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java?rev=983442&r1=983441&r2=983442&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java Sun Aug  8 15:59:46 2010
@@ -49,11 +49,20 @@ class CompactSplitThread extends Thread 
 
   private final HashSet<HRegion> regionsInQueue = new HashSet<HRegion>();
 
+  /**
+   * Splitting should not take place if the total number of regions exceed this.
+   * This is not a hard limit to the number of regions but it is a guideline to
+   * stop splitting after number of online regions is greater than this.
+   */
+  private int regionSplitLimit;
+
   /** @param server */
   public CompactSplitThread(HRegionServer server) {
     super();
     this.server = server;
     this.conf = server.conf;
+    this.regionSplitLimit = conf.getInt("hbase.regionserver.regionSplitLimit",
+        Integer.MAX_VALUE);
     this.frequency =
       conf.getLong("hbase.regionserver.thread.splitcompactcheckfrequency",
       20 * 1000);
@@ -73,7 +82,8 @@ class CompactSplitThread extends Thread 
           try {
             // Don't interrupt us while we are working
             byte [] midKey = r.compactStores();
-            if (midKey != null && !this.server.isStopRequested()) {
+            if (shouldSplitRegion() && midKey != null &&
+                !this.server.isStopRequested()) {
               split(r, midKey);
             }
           } finally {
@@ -190,4 +200,15 @@ class CompactSplitThread extends Thread 
   public int getCompactionQueueSize() {
     return compactionQueue.size();
   }
+
+  private boolean shouldSplitRegion() {
+    return (regionSplitLimit > server.getNumberOfOnlineRegions());
+  }
+
+  /**
+   * @return the regionSplitLimit
+   */
+  public int getRegionSplitLimit() {
+    return this.regionSplitLimit;
+  }
 }

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java?rev=983442&r1=983441&r2=983442&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java Sun Aug  8 15:59:46 2010
@@ -2544,4 +2544,8 @@ public class HRegionServer implements HR
         HRegionServer.class);
     doMain(args, regionServerClass);
   }
+
+  public int getNumberOfOnlineRegions() {
+    return onlineRegions.size();
+  }
 }
\ No newline at end of file

Modified: hbase/trunk/src/main/resources/hbase-default.xml
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/resources/hbase-default.xml?rev=983442&r1=983441&r2=983442&view=diff
==============================================================================
--- hbase/trunk/src/main/resources/hbase-default.xml (original)
+++ hbase/trunk/src/main/resources/hbase-default.xml Sun Aug  8 15:59:46 2010
@@ -186,6 +186,15 @@
     </description>
   </property>
   <property>
+    <name>hbase.regionserver.regionSplitLimit</name>
+    <value>2147483647</value>
+    <description>Limit for the number of regions after which no more region
+    splitting should take place. This is not a hard limit for the number of
+    regions but acts as a guideline for the regionserver to stop splitting after
+    a certain limit. Default is set to MAX_INT.
+    </description>
+  </property>
+  <property>
     <name>hbase.regionserver.logroll.period</name>
     <value>3600000</value>
     <description>Period at which we will roll the commit log.</description>