You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ji...@apache.org on 2008/07/03 00:13:43 UTC

svn commit: r673524 - in /hadoop/hbase/trunk: CHANGES.txt src/java/org/apache/hadoop/hbase/regionserver/HRegion.java src/java/org/apache/hadoop/hbase/regionserver/HStore.java

Author: jimk
Date: Wed Jul  2 15:13:41 2008
New Revision: 673524

URL: http://svn.apache.org/viewvc?rev=673524&view=rev
Log:
HBASE-712   midKey found compacting is the first, not necessarily the optimal

Modified:
    hadoop/hbase/trunk/CHANGES.txt
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HStore.java

Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=673524&r1=673523&r2=673524&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Wed Jul  2 15:13:41 2008
@@ -163,6 +163,7 @@
    HBASE-527   RegexpRowFilter does not work when there are columns from 
                multiple families (Clint Morgan via Jim Kellerman)
    HBASE-534   Double-assignment at SPLIT-time
+   HBASE-712   midKey found compacting is the first, not necessarily the optimal
    
   IMPROVEMENTS
    HBASE-559   MR example job to count table rows

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java?rev=673524&r1=673523&r2=673524&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java Wed Jul  2 15:13:41 2008
@@ -876,10 +876,12 @@
       LOG.info("starting compaction on region " + this);
       long startTime = System.currentTimeMillis();
       doRegionCompactionPrep();
+      long maxSize = -1;
       for (HStore store: stores.values()) {
-        final byte [] key = store.compact(force);
-        if (key != null && midKey == null) {
-          midKey = key;
+        final HStore.StoreSize size = store.compact(force);
+        if (size != null && size.getSize() > maxSize) {
+          maxSize = size.getSize();
+          midKey = size.getKey();
         }
       }
       doRegionCompactionCleanup();

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HStore.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HStore.java?rev=673524&r1=673523&r2=673524&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HStore.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HStore.java Wed Jul  2 15:13:41 2008
@@ -854,7 +854,7 @@
    * @return mid key if a split is needed, null otherwise
    * @throws IOException
    */
-  byte [] compact(final boolean force) throws IOException {
+  StoreSize compact(final boolean force) throws IOException {
     synchronized (compactLock) {
       long maxId = -1;
       List<HStoreFile> filesToCompact = null;
@@ -1811,9 +1811,9 @@
   /**
    * Determines if HStore can be split
    * 
-   * @return midKey if store can be split, null otherwise
+   * @return a StoreSize if store can be split, null otherwise
    */
-  byte [] checkSplit() {
+  StoreSize checkSplit() {
     if (this.storefiles.size() <= 0) {
       return null;
     }
@@ -1865,7 +1865,7 @@
             Bytes.equals(mk.getRow(), lastKey.getRow())) {
           return null;
         }
-        return mk.getRow();
+        return new StoreSize(maxSize, mk.getRow());
       }
     } catch(IOException e) {
       LOG.warn("Failed getting store size for " + this.storeNameStr, e);
@@ -1931,4 +1931,22 @@
       return copy;
     }
   }
+  
+  class StoreSize {
+    private final long size;
+    private final byte[] key;
+    StoreSize(long size, byte[] key) {
+      this.size = size;
+      this.key = new byte[key.length];
+      System.arraycopy(key, 0, this.key, 0, key.length);
+    }
+    /* @return the size */
+    long getSize() {
+      return size;
+    }
+    /* @return the key */
+    byte[] getKey() {
+      return key;
+    }
+  }
 }
\ No newline at end of file