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 2008/05/20 22:40:47 UTC

svn commit: r658419 - in /hadoop/hbase/trunk: ./ src/java/org/apache/hadoop/hbase/ src/java/org/apache/hadoop/hbase/regionserver/ src/test/org/apache/hadoop/hbase/regionserver/

Author: stack
Date: Tue May 20 13:40:47 2008
New Revision: 658419

URL: http://svn.apache.org/viewvc?rev=658419&view=rev
Log:
HBASE-621 Make MAX_VERSIONS work like TTL: In scans and gets, check MAX_VERSIONs setting and return that many only rather than wait on compaction

Modified:
    hadoop/hbase/trunk/CHANGES.txt
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HConstants.java
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HStore.java
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/Memcache.java
    hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/regionserver/TestCompaction.java

Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=658419&r1=658418&r2=658419&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Tue May 20 13:40:47 2008
@@ -40,6 +40,9 @@
                and HConnectionManager (Jean-Daniel Cryans via Stack)
    HBASE-23    UI listing regions should be sorted by address and show additional
                region state (Jean-Daniel Cryans via Stack)
+   HBASE-621   Make MAX_VERSIONS work like TTL: In scans and gets, check
+               MAX_VERSIONs setting and return that many only rather than wait on
+               compaction (Jean-Daniel Cryans via Stack)
 
 Release 0.1.2 - 05/13/2008
    

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HConstants.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HConstants.java?rev=658419&r1=658418&r2=658419&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HConstants.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/HConstants.java Tue May 20 13:40:47 2008
@@ -196,7 +196,7 @@
   /**
    * Define for 'return-all-versions'.
    */
-  static final int ALL_VERSIONS = -1;
+  static final int ALL_VERSIONS = Integer.MAX_VALUE;
   
   /**
    * Unlimited time-to-live.

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=658419&r1=658418&r2=658419&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 Tue May 20 13:40:47 2008
@@ -1230,7 +1230,7 @@
    * Get the value for the indicated HStoreKey.  Grab the target value and the 
    * previous 'numVersions-1' values, as well.
    *
-   * If 'numVersions' is negative, the method returns all available versions.
+   * Use {@link HConstants.ALL_VERSIONS} to retrieve all versions.
    * @param key
    * @param numVersions Number of versions to fetch.  Must be > 0.
    * @return values for the specified versions
@@ -1246,7 +1246,7 @@
     try {
       // Check the memcache
       List<Cell> results = this.memcache.get(key, numVersions);
-      // If we got sufficient versions from memcache, return.
+      // If we got sufficient versions from memcache, return. 
       if (results.size() == numVersions) {
         return results.toArray(new Cell[results.size()]);
       }
@@ -1323,9 +1323,18 @@
     }
   }
   
+  /**
+   * Small method to check if we are over the max number of versions
+   * or we acheived this family max versions. 
+   * The later happens when we have the situation described in HBASE-621.
+   * @param numVersions
+   * @param results
+   * @return 
+   */
   private boolean hasEnoughVersions(final int numVersions,
       final List<Cell> results) {
-    return numVersions > 0 && results.size() >= numVersions;
+    return (results.size() >= numVersions || results.size() >= family
+            .getMaxVersions());
   }
 
   /**
@@ -1345,8 +1354,9 @@
    */
   List<HStoreKey> getKeys(final HStoreKey origin, final int versions)
   throws IOException {
+      
     List<HStoreKey> keys = this.memcache.getKeys(origin, versions);
-    if (versions != ALL_VERSIONS && keys.size() >= versions) {
+    if (keys.size() >= versions) {
       return keys;
     }
     
@@ -1391,7 +1401,7 @@
                   }
 
                   // if we've collected enough versions, then exit the loop.
-                  if (versions != ALL_VERSIONS && keys.size() >= versions) {
+                  if (keys.size() >= versions) {
                     break;
                   }
                 }

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/Memcache.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/Memcache.java?rev=658419&r1=658418&r2=658419&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/Memcache.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/Memcache.java Tue May 20 13:40:47 2008
@@ -610,7 +610,7 @@
             LOG.debug("internalGetKeys: " + key + ": expired, skipped");
           }
         }
-        if (versions != HConstants.ALL_VERSIONS && result.size() >= versions) {
+        if (result.size() >= versions) {
           // We have enough results.  Return.
           break;
         }

Modified: hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/regionserver/TestCompaction.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/regionserver/TestCompaction.java?rev=658419&r1=658418&r2=658419&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/regionserver/TestCompaction.java (original)
+++ hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/regionserver/TestCompaction.java Tue May 20 13:40:47 2008
@@ -101,8 +101,8 @@
     addContent(new HRegionIncommon(r), Bytes.toString(COLUMN_FAMILY));
     Cell[] cellValues = 
       r.get(STARTROW, COLUMN_FAMILY_TEXT, 100 /*Too many*/);
-    // Assert that I can get > 5 versions (Should be at least 5 in there).
-    assertTrue(cellValues.length >= 5);
+    // Assert that I can get 3 versions since it is the max I should get
+    assertTrue(cellValues.length == 3);
     r.flushcache();
     r.compactStores();
     // Now assert that there are 4 versions of a record only: thats the