Author: jdcryans
Date: Mon Nov  2 23:31:27 2009
New Revision: 832194

URL: http://svn.apache.org/viewvc?rev=832194&view=rev
Log:
HBASE-1947  If HBase starts/stops often in less than 24 hours, 
            you end up with lots of store files

Modified:
    hadoop/hbase/branches/0.20/CHANGES.txt
    
hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java
    
hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
    
hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/Store.java

Modified: hadoop/hbase/branches/0.20/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/hadoop/hbase/branches/0.20/CHANGES.txt?rev=832194&r1=832193&r2=832194&view=diff
==============================================================================
--- hadoop/hbase/branches/0.20/CHANGES.txt (original)
+++ hadoop/hbase/branches/0.20/CHANGES.txt Mon Nov  2 23:31:27 2009
@@ -31,6 +31,8 @@
    HBASE-1903  Enable DEBUG by default
    HBASE-1918  Don't do DNS resolving in .META. scanner for each row
    HBASE-1921  When the Master's session times out and there's only one, 
cluster is wedged
+   HBASE-1947  If HBase starts/stops often in less than 24 hours, 
+               you end up with lots of store files
 
 Release 0.20.1 - Released October 12th, 2009
   INCOMPATIBLE CHANGES

Modified: 
hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java
URL: 
http://svn.apache.org/viewvc/hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java?rev=832194&r1=832193&r2=832194&view=diff
==============================================================================
--- 
hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java
 (original)
+++ 
hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java
 Mon Nov  2 23:31:27 2009
@@ -2486,6 +2486,20 @@
   }
 
   /**
+   * Checks every store to see if one has too many
+   * store files
+   * @return true if any store has too many store files
+   */
+  public boolean hasTooManyStoreFiles() {
+    for(Store store : stores.values()) {
+      if(store.hasTooManyStoreFiles()) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
    * Facility for dumping and compacting catalog tables.
    * Only does catalog tables since these are only tables we for sure know
    * schema on.  For usage run:

Modified: 
hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
URL: 
http://svn.apache.org/viewvc/hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java?rev=832194&r1=832193&r2=832194&view=diff
==============================================================================
--- 
hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
 (original)
+++ 
hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
 Mon Nov  2 23:31:27 2009
@@ -1586,10 +1586,12 @@
     if (region == null) {
       try {
         region = instantiateRegion(regionInfo);
-        // Startup a compaction early if one is needed, if region has 
references.
-        if (region.hasReferences()) {
+        // Startup a compaction early if one is needed, if region has 
references
+        // or if a store has too many store files
+        if (region.hasReferences() || region.hasTooManyStoreFiles()) {
           this.compactSplitThread.compactionRequested(region,
-            "Region has references on open");
+            region.hasReferences() ? "Region has references on open" :
+                                     "Region has too many store files");
         }
       } catch (Throwable e) {
         Throwable t = cleanup(e,

Modified: 
hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/Store.java
URL: 
http://svn.apache.org/viewvc/hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/Store.java?rev=832194&r1=832193&r2=832194&view=diff
==============================================================================
--- 
hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/Store.java
 (original)
+++ 
hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/Store.java
 Mon Nov  2 23:31:27 2009
@@ -1532,6 +1532,15 @@
       this.lock.readLock().unlock();
     }
   }
+
+  /**
+   * See if there's too much store files in this store
+   * @return true if number of store files is greater than
+   *  the number defined in compactionThreshold
+   */
+  public boolean hasTooManyStoreFiles() {
+    return this.storefiles.size() > this.compactionThreshold;
+  }
   
   public static final long FIXED_OVERHEAD = ClassSize.align(
       ClassSize.OBJECT + (17 * ClassSize.REFERENCE) +


Reply via email to